]> Git Repo - linux.git/blob - drivers/phy/cadence/phy-cadence-sierra.c
net: bgmac: Fix return value check for fixed_phy_register()
[linux.git] / drivers / phy / cadence / phy-cadence-sierra.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Cadence Sierra PHY Driver
4  *
5  * Copyright (c) 2018 Cadence Design Systems
6  * Author: Alan Douglas <[email protected]>
7  *
8  */
9 #include <linux/clk.h>
10 #include <linux/clk-provider.h>
11 #include <linux/delay.h>
12 #include <linux/err.h>
13 #include <linux/io.h>
14 #include <linux/module.h>
15 #include <linux/phy/phy.h>
16 #include <linux/platform_device.h>
17 #include <linux/pm_runtime.h>
18 #include <linux/regmap.h>
19 #include <linux/reset.h>
20 #include <linux/slab.h>
21 #include <linux/of.h>
22 #include <linux/of_platform.h>
23 #include <dt-bindings/phy/phy.h>
24 #include <dt-bindings/phy/phy-cadence.h>
25
26 #define NUM_SSC_MODE            3
27 #define NUM_PHY_TYPE            5
28
29 /* PHY register offsets */
30 #define SIERRA_COMMON_CDB_OFFSET                        0x0
31 #define SIERRA_MACRO_ID_REG                             0x0
32 #define SIERRA_CMN_PLLLC_GEN_PREG                       0x42
33 #define SIERRA_CMN_PLLLC_MODE_PREG                      0x48
34 #define SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG            0x49
35 #define SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG            0x4A
36 #define SIERRA_CMN_PLLLC_LOCK_CNTSTART_PREG             0x4B
37 #define SIERRA_CMN_PLLLC_CLK1_PREG                      0x4D
38 #define SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG               0x4F
39 #define SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG               0x50
40 #define SIERRA_CMN_PLLLC_DSMCORR_PREG                   0x51
41 #define SIERRA_CMN_PLLLC_SS_PREG                        0x52
42 #define SIERRA_CMN_PLLLC_SS_AMP_STEP_SIZE_PREG          0x53
43 #define SIERRA_CMN_PLLLC_SSTWOPT_PREG                   0x54
44 #define SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG     0x62
45 #define SIERRA_CMN_PLLLC_LOCK_DELAY_CTRL_PREG           0x63
46 #define SIERRA_CMN_REFRCV_PREG                          0x98
47 #define SIERRA_CMN_REFRCV1_PREG                         0xB8
48 #define SIERRA_CMN_PLLLC1_GEN_PREG                      0xC2
49 #define SIERRA_CMN_PLLLC1_FBDIV_INT_PREG                0xC3
50 #define SIERRA_CMN_PLLLC1_LF_COEFF_MODE0_PREG           0xCA
51 #define SIERRA_CMN_PLLLC1_CLK0_PREG                     0xCE
52 #define SIERRA_CMN_PLLLC1_BWCAL_MODE0_PREG              0xD0
53 #define SIERRA_CMN_PLLLC1_SS_TIME_STEPSIZE_MODE_PREG    0xE2
54
55 #define SIERRA_LANE_CDB_OFFSET(ln, block_offset, reg_offset)    \
56                                 ((0x4000 << (block_offset)) + \
57                                  (((ln) << 9) << (reg_offset)))
58
59 #define SIERRA_DET_STANDEC_A_PREG                       0x000
60 #define SIERRA_DET_STANDEC_B_PREG                       0x001
61 #define SIERRA_DET_STANDEC_C_PREG                       0x002
62 #define SIERRA_DET_STANDEC_D_PREG                       0x003
63 #define SIERRA_DET_STANDEC_E_PREG                       0x004
64 #define SIERRA_PSM_LANECAL_DLY_A1_RESETS_PREG           0x008
65 #define SIERRA_PSM_A0IN_TMR_PREG                        0x009
66 #define SIERRA_PSM_A3IN_TMR_PREG                        0x00C
67 #define SIERRA_PSM_DIAG_PREG                            0x015
68 #define SIERRA_PSC_LN_A3_PREG                           0x023
69 #define SIERRA_PSC_LN_A4_PREG                           0x024
70 #define SIERRA_PSC_LN_IDLE_PREG                         0x026
71 #define SIERRA_PSC_TX_A0_PREG                           0x028
72 #define SIERRA_PSC_TX_A1_PREG                           0x029
73 #define SIERRA_PSC_TX_A2_PREG                           0x02A
74 #define SIERRA_PSC_TX_A3_PREG                           0x02B
75 #define SIERRA_PSC_RX_A0_PREG                           0x030
76 #define SIERRA_PSC_RX_A1_PREG                           0x031
77 #define SIERRA_PSC_RX_A2_PREG                           0x032
78 #define SIERRA_PSC_RX_A3_PREG                           0x033
79 #define SIERRA_PLLCTRL_FBDIV_MODE01_PREG                0x039
80 #define SIERRA_PLLCTRL_SUBRATE_PREG                     0x03A
81 #define SIERRA_PLLCTRL_GEN_A_PREG                       0x03B
82 #define SIERRA_PLLCTRL_GEN_D_PREG                       0x03E
83 #define SIERRA_PLLCTRL_CPGAIN_MODE_PREG                 0x03F
84 #define SIERRA_PLLCTRL_STATUS_PREG                      0x044
85 #define SIERRA_CLKPATH_BIASTRIM_PREG                    0x04B
86 #define SIERRA_DFE_BIASTRIM_PREG                        0x04C
87 #define SIERRA_DRVCTRL_ATTEN_PREG                       0x06A
88 #define SIERRA_DRVCTRL_BOOST_PREG                       0x06F
89 #define SIERRA_TX_RCVDET_OVRD_PREG                      0x072
90 #define SIERRA_CLKPATHCTRL_TMR_PREG                     0x081
91 #define SIERRA_RX_CREQ_FLTR_A_MODE3_PREG                0x085
92 #define SIERRA_RX_CREQ_FLTR_A_MODE2_PREG                0x086
93 #define SIERRA_RX_CREQ_FLTR_A_MODE1_PREG                0x087
94 #define SIERRA_RX_CREQ_FLTR_A_MODE0_PREG                0x088
95 #define SIERRA_CREQ_DCBIASATTEN_OVR_PREG                0x08C
96 #define SIERRA_CREQ_CCLKDET_MODE01_PREG                 0x08E
97 #define SIERRA_RX_CTLE_CAL_PREG                         0x08F
98 #define SIERRA_RX_CTLE_MAINTENANCE_PREG                 0x091
99 #define SIERRA_CREQ_FSMCLK_SEL_PREG                     0x092
100 #define SIERRA_CREQ_EQ_CTRL_PREG                        0x093
101 #define SIERRA_CREQ_SPARE_PREG                          0x096
102 #define SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG             0x097
103 #define SIERRA_CTLELUT_CTRL_PREG                        0x098
104 #define SIERRA_DFE_ECMP_RATESEL_PREG                    0x0C0
105 #define SIERRA_DFE_SMP_RATESEL_PREG                     0x0C1
106 #define SIERRA_DEQ_PHALIGN_CTRL                         0x0C4
107 #define SIERRA_DEQ_CONCUR_CTRL1_PREG                    0x0C8
108 #define SIERRA_DEQ_CONCUR_CTRL2_PREG                    0x0C9
109 #define SIERRA_DEQ_EPIPWR_CTRL2_PREG                    0x0CD
110 #define SIERRA_DEQ_FAST_MAINT_CYCLES_PREG               0x0CE
111 #define SIERRA_DEQ_ERRCMP_CTRL_PREG                     0x0D0
112 #define SIERRA_DEQ_OFFSET_CTRL_PREG                     0x0D8
113 #define SIERRA_DEQ_GAIN_CTRL_PREG                       0x0E0
114 #define SIERRA_DEQ_VGATUNE_CTRL_PREG                    0x0E1
115 #define SIERRA_DEQ_GLUT0                                0x0E8
116 #define SIERRA_DEQ_GLUT1                                0x0E9
117 #define SIERRA_DEQ_GLUT2                                0x0EA
118 #define SIERRA_DEQ_GLUT3                                0x0EB
119 #define SIERRA_DEQ_GLUT4                                0x0EC
120 #define SIERRA_DEQ_GLUT5                                0x0ED
121 #define SIERRA_DEQ_GLUT6                                0x0EE
122 #define SIERRA_DEQ_GLUT7                                0x0EF
123 #define SIERRA_DEQ_GLUT8                                0x0F0
124 #define SIERRA_DEQ_GLUT9                                0x0F1
125 #define SIERRA_DEQ_GLUT10                               0x0F2
126 #define SIERRA_DEQ_GLUT11                               0x0F3
127 #define SIERRA_DEQ_GLUT12                               0x0F4
128 #define SIERRA_DEQ_GLUT13                               0x0F5
129 #define SIERRA_DEQ_GLUT14                               0x0F6
130 #define SIERRA_DEQ_GLUT15                               0x0F7
131 #define SIERRA_DEQ_GLUT16                               0x0F8
132 #define SIERRA_DEQ_ALUT0                                0x108
133 #define SIERRA_DEQ_ALUT1                                0x109
134 #define SIERRA_DEQ_ALUT2                                0x10A
135 #define SIERRA_DEQ_ALUT3                                0x10B
136 #define SIERRA_DEQ_ALUT4                                0x10C
137 #define SIERRA_DEQ_ALUT5                                0x10D
138 #define SIERRA_DEQ_ALUT6                                0x10E
139 #define SIERRA_DEQ_ALUT7                                0x10F
140 #define SIERRA_DEQ_ALUT8                                0x110
141 #define SIERRA_DEQ_ALUT9                                0x111
142 #define SIERRA_DEQ_ALUT10                               0x112
143 #define SIERRA_DEQ_ALUT11                               0x113
144 #define SIERRA_DEQ_ALUT12                               0x114
145 #define SIERRA_DEQ_ALUT13                               0x115
146 #define SIERRA_DEQ_DFETAP_CTRL_PREG                     0x128
147 #define SIERRA_DEQ_DFETAP0                              0x129
148 #define SIERRA_DEQ_DFETAP1                              0x12B
149 #define SIERRA_DEQ_DFETAP2                              0x12D
150 #define SIERRA_DEQ_DFETAP3                              0x12F
151 #define SIERRA_DEQ_DFETAP4                              0x131
152 #define SIERRA_DFE_EN_1010_IGNORE_PREG                  0x134
153 #define SIERRA_DEQ_PRECUR_PREG                          0x138
154 #define SIERRA_DEQ_POSTCUR_PREG                         0x140
155 #define SIERRA_DEQ_POSTCUR_DECR_PREG                    0x142
156 #define SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG            0x150
157 #define SIERRA_DEQ_TAU_CTRL2_PREG                       0x151
158 #define SIERRA_DEQ_TAU_CTRL3_PREG                       0x152
159 #define SIERRA_DEQ_OPENEYE_CTRL_PREG                    0x158
160 #define SIERRA_DEQ_PICTRL_PREG                          0x161
161 #define SIERRA_CPICAL_TMRVAL_MODE1_PREG                 0x170
162 #define SIERRA_CPICAL_TMRVAL_MODE0_PREG                 0x171
163 #define SIERRA_CPICAL_PICNT_MODE1_PREG                  0x174
164 #define SIERRA_CPI_OUTBUF_RATESEL_PREG                  0x17C
165 #define SIERRA_CPI_RESBIAS_BIN_PREG                     0x17E
166 #define SIERRA_CPI_TRIM_PREG                            0x17F
167 #define SIERRA_CPICAL_RES_STARTCODE_MODE23_PREG         0x183
168 #define SIERRA_EPI_CTRL_PREG                            0x187
169 #define SIERRA_LFPSDET_SUPPORT_PREG                     0x188
170 #define SIERRA_LFPSFILT_NS_PREG                         0x18A
171 #define SIERRA_LFPSFILT_RD_PREG                         0x18B
172 #define SIERRA_LFPSFILT_MP_PREG                         0x18C
173 #define SIERRA_SIGDET_SUPPORT_PREG                      0x190
174 #define SIERRA_SDFILT_H2L_A_PREG                        0x191
175 #define SIERRA_SDFILT_L2H_PREG                          0x193
176 #define SIERRA_RXBUFFER_CTLECTRL_PREG                   0x19E
177 #define SIERRA_RXBUFFER_RCDFECTRL_PREG                  0x19F
178 #define SIERRA_RXBUFFER_DFECTRL_PREG                    0x1A0
179 #define SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG            0x14F
180 #define SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG            0x150
181
182 /* PHY PCS common registers */
183 #define SIERRA_PHY_PCS_COMMON_OFFSET(block_offset)      \
184                                      (0xc000 << (block_offset))
185 #define SIERRA_PHY_PIPE_CMN_CTRL1                       0x0
186 #define SIERRA_PHY_PLL_CFG                              0xe
187
188 /* PHY PCS lane registers */
189 #define SIERRA_PHY_PCS_LANE_CDB_OFFSET(ln, block_offset, reg_offset)    \
190                                        ((0xD000 << (block_offset)) +    \
191                                        (((ln) << 8) << (reg_offset)))
192
193 #define SIERRA_PHY_ISO_LINK_CTRL                        0xB
194
195 /* PHY PMA common registers */
196 #define SIERRA_PHY_PMA_COMMON_OFFSET(block_offset)      \
197                                      (0xE000 << (block_offset))
198 #define SIERRA_PHY_PMA_CMN_CTRL                         0x000
199
200 /* PHY PMA lane registers */
201 #define SIERRA_PHY_PMA_LANE_CDB_OFFSET(ln, block_offset, reg_offset)    \
202                                        ((0xF000 << (block_offset)) +    \
203                                        (((ln) << 8) << (reg_offset)))
204
205 #define SIERRA_PHY_PMA_XCVR_CTRL                        0x000
206
207 #define SIERRA_MACRO_ID                                 0x00007364
208 #define SIERRA_MAX_LANES                                16
209 #define PLL_LOCK_TIME                                   100000
210
211 #define CDNS_SIERRA_OUTPUT_CLOCKS                       3
212 #define CDNS_SIERRA_INPUT_CLOCKS                        3
213 enum cdns_sierra_clock_input {
214         PHY_CLK,
215         CMN_REFCLK_DIG_DIV,
216         CMN_REFCLK1_DIG_DIV,
217 };
218
219 #define SIERRA_NUM_CMN_PLLC                             2
220 #define SIERRA_NUM_CMN_PLLC_PARENTS                     2
221
222 static const struct reg_field macro_id_type =
223                                 REG_FIELD(SIERRA_MACRO_ID_REG, 0, 15);
224 static const struct reg_field phy_pll_cfg_1 =
225                                 REG_FIELD(SIERRA_PHY_PLL_CFG, 1, 1);
226 static const struct reg_field pma_cmn_ready =
227                                 REG_FIELD(SIERRA_PHY_PMA_CMN_CTRL, 0, 0);
228 static const struct reg_field pllctrl_lock =
229                                 REG_FIELD(SIERRA_PLLCTRL_STATUS_PREG, 0, 0);
230 static const struct reg_field phy_iso_link_ctrl_1 =
231                                 REG_FIELD(SIERRA_PHY_ISO_LINK_CTRL, 1, 1);
232 static const struct reg_field cmn_plllc_clk1outdiv_preg =
233                                 REG_FIELD(SIERRA_CMN_PLLLC_CLK1_PREG, 0, 6);
234 static const struct reg_field cmn_plllc_clk1_en_preg =
235                                 REG_FIELD(SIERRA_CMN_PLLLC_CLK1_PREG, 12, 12);
236
237 static const char * const clk_names[] = {
238         [CDNS_SIERRA_PLL_CMNLC] = "pll_cmnlc",
239         [CDNS_SIERRA_PLL_CMNLC1] = "pll_cmnlc1",
240         [CDNS_SIERRA_DERIVED_REFCLK] = "refclk_der",
241 };
242
243 enum cdns_sierra_cmn_plllc {
244         CMN_PLLLC,
245         CMN_PLLLC1,
246 };
247
248 struct cdns_sierra_pll_mux_reg_fields {
249         struct reg_field        pfdclk_sel_preg;
250         struct reg_field        plllc1en_field;
251         struct reg_field        termen_field;
252 };
253
254 static const struct cdns_sierra_pll_mux_reg_fields cmn_plllc_pfdclk1_sel_preg[] = {
255         [CMN_PLLLC] = {
256                 .pfdclk_sel_preg = REG_FIELD(SIERRA_CMN_PLLLC_GEN_PREG, 1, 1),
257                 .plllc1en_field = REG_FIELD(SIERRA_CMN_REFRCV1_PREG, 8, 8),
258                 .termen_field = REG_FIELD(SIERRA_CMN_REFRCV1_PREG, 0, 0),
259         },
260         [CMN_PLLLC1] = {
261                 .pfdclk_sel_preg = REG_FIELD(SIERRA_CMN_PLLLC1_GEN_PREG, 1, 1),
262                 .plllc1en_field = REG_FIELD(SIERRA_CMN_REFRCV_PREG, 8, 8),
263                 .termen_field = REG_FIELD(SIERRA_CMN_REFRCV_PREG, 0, 0),
264         },
265 };
266
267 struct cdns_sierra_pll_mux {
268         struct clk_hw           hw;
269         struct regmap_field     *pfdclk_sel_preg;
270         struct regmap_field     *plllc1en_field;
271         struct regmap_field     *termen_field;
272         struct clk_init_data    clk_data;
273 };
274
275 #define to_cdns_sierra_pll_mux(_hw)     \
276                         container_of(_hw, struct cdns_sierra_pll_mux, hw)
277
278 #define PLL0_REFCLK_NAME "pll0_refclk"
279 #define PLL1_REFCLK_NAME "pll1_refclk"
280
281 static const struct clk_parent_data pll_mux_parent_data[][SIERRA_NUM_CMN_PLLC_PARENTS] = {
282         [CMN_PLLLC] = {
283                 { .fw_name = PLL0_REFCLK_NAME },
284                 { .fw_name = PLL1_REFCLK_NAME }
285         },
286         [CMN_PLLLC1] = {
287                 { .fw_name = PLL1_REFCLK_NAME },
288                 { .fw_name = PLL0_REFCLK_NAME }
289         },
290 };
291
292 static u32 cdns_sierra_pll_mux_table[][SIERRA_NUM_CMN_PLLC_PARENTS] = {
293         [CMN_PLLLC] = { 0, 1 },
294         [CMN_PLLLC1] = { 1, 0 },
295 };
296
297 struct cdns_sierra_derived_refclk {
298         struct clk_hw           hw;
299         struct regmap_field     *cmn_plllc_clk1outdiv_preg;
300         struct regmap_field     *cmn_plllc_clk1_en_preg;
301         struct clk_init_data    clk_data;
302 };
303
304 #define to_cdns_sierra_derived_refclk(_hw)      \
305                         container_of(_hw, struct cdns_sierra_derived_refclk, hw)
306
307 enum cdns_sierra_phy_type {
308         TYPE_NONE,
309         TYPE_PCIE,
310         TYPE_USB,
311         TYPE_SGMII,
312         TYPE_QSGMII
313 };
314
315 enum cdns_sierra_ssc_mode {
316         NO_SSC,
317         EXTERNAL_SSC,
318         INTERNAL_SSC
319 };
320
321 struct cdns_sierra_inst {
322         struct phy *phy;
323         enum cdns_sierra_phy_type phy_type;
324         u32 num_lanes;
325         u32 mlane;
326         struct reset_control *lnk_rst;
327         enum cdns_sierra_ssc_mode ssc_mode;
328 };
329
330 struct cdns_reg_pairs {
331         u16 val;
332         u32 off;
333 };
334
335 struct cdns_sierra_vals {
336         const struct cdns_reg_pairs *reg_pairs;
337         u32 num_regs;
338 };
339
340 struct cdns_sierra_data {
341         u32 id_value;
342         u8 block_offset_shift;
343         u8 reg_offset_shift;
344         struct cdns_sierra_vals *pcs_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
345                                              [NUM_SSC_MODE];
346         struct cdns_sierra_vals *phy_pma_ln_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
347                                                 [NUM_SSC_MODE];
348         struct cdns_sierra_vals *pma_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
349                                              [NUM_SSC_MODE];
350         struct cdns_sierra_vals *pma_ln_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
351                                             [NUM_SSC_MODE];
352 };
353
354 struct cdns_regmap_cdb_context {
355         struct device *dev;
356         void __iomem *base;
357         u8 reg_offset_shift;
358 };
359
360 struct cdns_sierra_phy {
361         struct device *dev;
362         const struct cdns_sierra_data *init_data;
363         struct cdns_sierra_inst phys[SIERRA_MAX_LANES];
364         struct reset_control *phy_rst;
365         struct reset_control *apb_rst;
366         struct regmap *regmap_lane_cdb[SIERRA_MAX_LANES];
367         struct regmap *regmap_phy_pcs_common_cdb;
368         struct regmap *regmap_phy_pcs_lane_cdb[SIERRA_MAX_LANES];
369         struct regmap *regmap_phy_pma_common_cdb;
370         struct regmap *regmap_phy_pma_lane_cdb[SIERRA_MAX_LANES];
371         struct regmap *regmap_common_cdb;
372         struct regmap_field *macro_id_type;
373         struct regmap_field *phy_pll_cfg_1;
374         struct regmap_field *pma_cmn_ready;
375         struct regmap_field *pllctrl_lock[SIERRA_MAX_LANES];
376         struct regmap_field *phy_iso_link_ctrl_1[SIERRA_MAX_LANES];
377         struct regmap_field *cmn_refrcv_refclk_plllc1en_preg[SIERRA_NUM_CMN_PLLC];
378         struct regmap_field *cmn_refrcv_refclk_termen_preg[SIERRA_NUM_CMN_PLLC];
379         struct regmap_field *cmn_plllc_pfdclk1_sel_preg[SIERRA_NUM_CMN_PLLC];
380         struct clk *input_clks[CDNS_SIERRA_INPUT_CLOCKS];
381         int nsubnodes;
382         u32 num_lanes;
383         bool autoconf;
384         int already_configured;
385         struct clk *pll_clks[SIERRA_NUM_CMN_PLLC];
386         struct clk_hw_onecell_data clk_data;
387 };
388
389 static int cdns_regmap_write(void *context, unsigned int reg, unsigned int val)
390 {
391         struct cdns_regmap_cdb_context *ctx = context;
392         u32 offset = reg << ctx->reg_offset_shift;
393
394         writew(val, ctx->base + offset);
395
396         return 0;
397 }
398
399 static int cdns_regmap_read(void *context, unsigned int reg, unsigned int *val)
400 {
401         struct cdns_regmap_cdb_context *ctx = context;
402         u32 offset = reg << ctx->reg_offset_shift;
403
404         *val = readw(ctx->base + offset);
405         return 0;
406 }
407
408 #define SIERRA_LANE_CDB_REGMAP_CONF(n) \
409 { \
410         .name = "sierra_lane" n "_cdb", \
411         .reg_stride = 1, \
412         .fast_io = true, \
413         .reg_write = cdns_regmap_write, \
414         .reg_read = cdns_regmap_read, \
415 }
416
417 static const struct regmap_config cdns_sierra_lane_cdb_config[] = {
418         SIERRA_LANE_CDB_REGMAP_CONF("0"),
419         SIERRA_LANE_CDB_REGMAP_CONF("1"),
420         SIERRA_LANE_CDB_REGMAP_CONF("2"),
421         SIERRA_LANE_CDB_REGMAP_CONF("3"),
422         SIERRA_LANE_CDB_REGMAP_CONF("4"),
423         SIERRA_LANE_CDB_REGMAP_CONF("5"),
424         SIERRA_LANE_CDB_REGMAP_CONF("6"),
425         SIERRA_LANE_CDB_REGMAP_CONF("7"),
426         SIERRA_LANE_CDB_REGMAP_CONF("8"),
427         SIERRA_LANE_CDB_REGMAP_CONF("9"),
428         SIERRA_LANE_CDB_REGMAP_CONF("10"),
429         SIERRA_LANE_CDB_REGMAP_CONF("11"),
430         SIERRA_LANE_CDB_REGMAP_CONF("12"),
431         SIERRA_LANE_CDB_REGMAP_CONF("13"),
432         SIERRA_LANE_CDB_REGMAP_CONF("14"),
433         SIERRA_LANE_CDB_REGMAP_CONF("15"),
434 };
435
436 static const struct regmap_config cdns_sierra_common_cdb_config = {
437         .name = "sierra_common_cdb",
438         .reg_stride = 1,
439         .fast_io = true,
440         .reg_write = cdns_regmap_write,
441         .reg_read = cdns_regmap_read,
442 };
443
444 static const struct regmap_config cdns_sierra_phy_pcs_cmn_cdb_config = {
445         .name = "sierra_phy_pcs_cmn_cdb",
446         .reg_stride = 1,
447         .fast_io = true,
448         .reg_write = cdns_regmap_write,
449         .reg_read = cdns_regmap_read,
450 };
451
452 #define SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF(n) \
453 { \
454         .name = "sierra_phy_pcs_lane" n "_cdb", \
455         .reg_stride = 1, \
456         .fast_io = true, \
457         .reg_write = cdns_regmap_write, \
458         .reg_read = cdns_regmap_read, \
459 }
460
461 static const struct regmap_config cdns_sierra_phy_pcs_lane_cdb_config[] = {
462         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("0"),
463         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("1"),
464         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("2"),
465         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("3"),
466         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("4"),
467         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("5"),
468         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("6"),
469         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("7"),
470         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("8"),
471         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("9"),
472         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("10"),
473         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("11"),
474         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("12"),
475         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("13"),
476         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("14"),
477         SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("15"),
478 };
479
480 static const struct regmap_config cdns_sierra_phy_pma_cmn_cdb_config = {
481         .name = "sierra_phy_pma_cmn_cdb",
482         .reg_stride = 1,
483         .fast_io = true,
484         .reg_write = cdns_regmap_write,
485         .reg_read = cdns_regmap_read,
486 };
487
488 #define SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF(n) \
489 { \
490         .name = "sierra_phy_pma_lane" n "_cdb", \
491         .reg_stride = 1, \
492         .fast_io = true, \
493         .reg_write = cdns_regmap_write, \
494         .reg_read = cdns_regmap_read, \
495 }
496
497 static const struct regmap_config cdns_sierra_phy_pma_lane_cdb_config[] = {
498         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("0"),
499         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("1"),
500         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("2"),
501         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("3"),
502         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("4"),
503         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("5"),
504         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("6"),
505         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("7"),
506         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("8"),
507         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("9"),
508         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("10"),
509         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("11"),
510         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("12"),
511         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("13"),
512         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("14"),
513         SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("15"),
514 };
515
516 static int cdns_sierra_phy_init(struct phy *gphy)
517 {
518         struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
519         struct cdns_sierra_phy *phy = dev_get_drvdata(gphy->dev.parent);
520         const struct cdns_sierra_data *init_data = phy->init_data;
521         struct cdns_sierra_vals *pma_cmn_vals, *pma_ln_vals;
522         enum cdns_sierra_phy_type phy_type = ins->phy_type;
523         enum cdns_sierra_ssc_mode ssc = ins->ssc_mode;
524         struct cdns_sierra_vals *phy_pma_ln_vals;
525         const struct cdns_reg_pairs *reg_pairs;
526         struct cdns_sierra_vals *pcs_cmn_vals;
527         struct regmap *regmap;
528         u32 num_regs;
529         int i, j;
530
531         /* Initialise the PHY registers, unless auto configured */
532         if (phy->autoconf || phy->already_configured || phy->nsubnodes > 1)
533                 return 0;
534
535         clk_set_rate(phy->input_clks[CMN_REFCLK_DIG_DIV], 25000000);
536         clk_set_rate(phy->input_clks[CMN_REFCLK1_DIG_DIV], 25000000);
537
538         /* PHY PCS common registers configurations */
539         pcs_cmn_vals = init_data->pcs_cmn_vals[phy_type][TYPE_NONE][ssc];
540         if (pcs_cmn_vals) {
541                 reg_pairs = pcs_cmn_vals->reg_pairs;
542                 num_regs = pcs_cmn_vals->num_regs;
543                 regmap = phy->regmap_phy_pcs_common_cdb;
544                 for (i = 0; i < num_regs; i++)
545                         regmap_write(regmap, reg_pairs[i].off, reg_pairs[i].val);
546         }
547
548         /* PHY PMA lane registers configurations */
549         phy_pma_ln_vals = init_data->phy_pma_ln_vals[phy_type][TYPE_NONE][ssc];
550         if (phy_pma_ln_vals) {
551                 reg_pairs = phy_pma_ln_vals->reg_pairs;
552                 num_regs = phy_pma_ln_vals->num_regs;
553                 for (i = 0; i < ins->num_lanes; i++) {
554                         regmap = phy->regmap_phy_pma_lane_cdb[i + ins->mlane];
555                         for (j = 0; j < num_regs; j++)
556                                 regmap_write(regmap, reg_pairs[j].off, reg_pairs[j].val);
557                 }
558         }
559
560         /* PMA common registers configurations */
561         pma_cmn_vals = init_data->pma_cmn_vals[phy_type][TYPE_NONE][ssc];
562         if (pma_cmn_vals) {
563                 reg_pairs = pma_cmn_vals->reg_pairs;
564                 num_regs = pma_cmn_vals->num_regs;
565                 regmap = phy->regmap_common_cdb;
566                 for (i = 0; i < num_regs; i++)
567                         regmap_write(regmap, reg_pairs[i].off, reg_pairs[i].val);
568         }
569
570         /* PMA lane registers configurations */
571         pma_ln_vals = init_data->pma_ln_vals[phy_type][TYPE_NONE][ssc];
572         if (pma_ln_vals) {
573                 reg_pairs = pma_ln_vals->reg_pairs;
574                 num_regs = pma_ln_vals->num_regs;
575                 for (i = 0; i < ins->num_lanes; i++) {
576                         regmap = phy->regmap_lane_cdb[i + ins->mlane];
577                         for (j = 0; j < num_regs; j++)
578                                 regmap_write(regmap, reg_pairs[j].off, reg_pairs[j].val);
579                 }
580         }
581
582         return 0;
583 }
584
585 static int cdns_sierra_phy_on(struct phy *gphy)
586 {
587         struct cdns_sierra_phy *sp = dev_get_drvdata(gphy->dev.parent);
588         struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
589         struct device *dev = sp->dev;
590         u32 val;
591         int ret;
592
593         if (sp->nsubnodes == 1) {
594                 /* Take the PHY out of reset */
595                 ret = reset_control_deassert(sp->phy_rst);
596                 if (ret) {
597                         dev_err(dev, "Failed to take the PHY out of reset\n");
598                         return ret;
599                 }
600         }
601
602         /* Take the PHY lane group out of reset */
603         ret = reset_control_deassert(ins->lnk_rst);
604         if (ret) {
605                 dev_err(dev, "Failed to take the PHY lane out of reset\n");
606                 return ret;
607         }
608
609         if (ins->phy_type == TYPE_PCIE || ins->phy_type == TYPE_USB) {
610                 ret = regmap_field_read_poll_timeout(sp->phy_iso_link_ctrl_1[ins->mlane],
611                                                      val, !val, 1000, PLL_LOCK_TIME);
612                 if (ret) {
613                         dev_err(dev, "Timeout waiting for PHY status ready\n");
614                         return ret;
615                 }
616         }
617
618         /*
619          * Wait for cmn_ready assertion
620          * PHY_PMA_CMN_CTRL[0] == 1
621          */
622         ret = regmap_field_read_poll_timeout(sp->pma_cmn_ready, val, val,
623                                              1000, PLL_LOCK_TIME);
624         if (ret) {
625                 dev_err(dev, "Timeout waiting for CMN ready\n");
626                 return ret;
627         }
628
629         ret = regmap_field_read_poll_timeout(sp->pllctrl_lock[ins->mlane],
630                                              val, val, 1000, PLL_LOCK_TIME);
631         if (ret < 0)
632                 dev_err(dev, "PLL lock of lane failed\n");
633
634         return ret;
635 }
636
637 static int cdns_sierra_phy_off(struct phy *gphy)
638 {
639         struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
640
641         return reset_control_assert(ins->lnk_rst);
642 }
643
644 static int cdns_sierra_phy_reset(struct phy *gphy)
645 {
646         struct cdns_sierra_phy *sp = dev_get_drvdata(gphy->dev.parent);
647
648         reset_control_assert(sp->phy_rst);
649         reset_control_deassert(sp->phy_rst);
650         return 0;
651 };
652
653 static const struct phy_ops ops = {
654         .init           = cdns_sierra_phy_init,
655         .power_on       = cdns_sierra_phy_on,
656         .power_off      = cdns_sierra_phy_off,
657         .reset          = cdns_sierra_phy_reset,
658         .owner          = THIS_MODULE,
659 };
660
661 static int cdns_sierra_noop_phy_on(struct phy *gphy)
662 {
663         usleep_range(5000, 10000);
664
665         return 0;
666 }
667
668 static const struct phy_ops noop_ops = {
669         .power_on       = cdns_sierra_noop_phy_on,
670         .owner          = THIS_MODULE,
671 };
672
673 static u8 cdns_sierra_pll_mux_get_parent(struct clk_hw *hw)
674 {
675         struct cdns_sierra_pll_mux *mux = to_cdns_sierra_pll_mux(hw);
676         struct regmap_field *plllc1en_field = mux->plllc1en_field;
677         struct regmap_field *termen_field = mux->termen_field;
678         struct regmap_field *field = mux->pfdclk_sel_preg;
679         unsigned int val;
680         int index;
681
682         regmap_field_read(field, &val);
683
684         if (strstr(clk_hw_get_name(hw), clk_names[CDNS_SIERRA_PLL_CMNLC1])) {
685                 index = clk_mux_val_to_index(hw, cdns_sierra_pll_mux_table[CMN_PLLLC1], 0, val);
686                 if (index == 1) {
687                         regmap_field_write(plllc1en_field, 1);
688                         regmap_field_write(termen_field, 1);
689                 }
690         } else {
691                 index = clk_mux_val_to_index(hw, cdns_sierra_pll_mux_table[CMN_PLLLC], 0, val);
692         }
693
694         return index;
695 }
696
697 static int cdns_sierra_pll_mux_set_parent(struct clk_hw *hw, u8 index)
698 {
699         struct cdns_sierra_pll_mux *mux = to_cdns_sierra_pll_mux(hw);
700         struct regmap_field *plllc1en_field = mux->plllc1en_field;
701         struct regmap_field *termen_field = mux->termen_field;
702         struct regmap_field *field = mux->pfdclk_sel_preg;
703         int val, ret;
704
705         ret = regmap_field_write(plllc1en_field, 0);
706         ret |= regmap_field_write(termen_field, 0);
707         if (index == 1) {
708                 ret |= regmap_field_write(plllc1en_field, 1);
709                 ret |= regmap_field_write(termen_field, 1);
710         }
711
712         if (strstr(clk_hw_get_name(hw), clk_names[CDNS_SIERRA_PLL_CMNLC1]))
713                 val = cdns_sierra_pll_mux_table[CMN_PLLLC1][index];
714         else
715                 val = cdns_sierra_pll_mux_table[CMN_PLLLC][index];
716
717         ret |= regmap_field_write(field, val);
718
719         return ret;
720 }
721
722 static const struct clk_ops cdns_sierra_pll_mux_ops = {
723         .determine_rate = __clk_mux_determine_rate,
724         .set_parent = cdns_sierra_pll_mux_set_parent,
725         .get_parent = cdns_sierra_pll_mux_get_parent,
726 };
727
728 static int cdns_sierra_pll_mux_register(struct cdns_sierra_phy *sp,
729                                         struct regmap_field *pfdclk1_sel_field,
730                                         struct regmap_field *plllc1en_field,
731                                         struct regmap_field *termen_field,
732                                         int clk_index)
733 {
734         struct cdns_sierra_pll_mux *mux;
735         struct device *dev = sp->dev;
736         struct clk_init_data *init;
737         char clk_name[100];
738         int ret;
739
740         mux = devm_kzalloc(dev, sizeof(*mux), GFP_KERNEL);
741         if (!mux)
742                 return -ENOMEM;
743
744         snprintf(clk_name, sizeof(clk_name), "%s_%s", dev_name(dev), clk_names[clk_index]);
745
746         init = &mux->clk_data;
747
748         init->ops = &cdns_sierra_pll_mux_ops;
749         init->flags = CLK_SET_RATE_NO_REPARENT;
750         init->parent_data = pll_mux_parent_data[clk_index];
751         init->num_parents = SIERRA_NUM_CMN_PLLC_PARENTS;
752         init->name = clk_name;
753
754         mux->pfdclk_sel_preg = pfdclk1_sel_field;
755         mux->plllc1en_field = plllc1en_field;
756         mux->termen_field = termen_field;
757         mux->hw.init = init;
758
759         ret = devm_clk_hw_register(dev, &mux->hw);
760         if (ret)
761                 return ret;
762
763         sp->clk_data.hws[clk_index] = &mux->hw;
764
765         sp->pll_clks[clk_index] = devm_clk_hw_get_clk(dev, &mux->hw,
766                                                       clk_names[clk_index]);
767
768         return 0;
769 }
770
771 static int cdns_sierra_phy_register_pll_mux(struct cdns_sierra_phy *sp)
772 {
773         struct regmap_field *pfdclk1_sel_field;
774         struct regmap_field *plllc1en_field;
775         struct regmap_field *termen_field;
776         struct device *dev = sp->dev;
777         int ret = 0, i, clk_index;
778
779         clk_index = CDNS_SIERRA_PLL_CMNLC;
780         for (i = 0; i < SIERRA_NUM_CMN_PLLC; i++, clk_index++) {
781                 pfdclk1_sel_field = sp->cmn_plllc_pfdclk1_sel_preg[i];
782                 plllc1en_field = sp->cmn_refrcv_refclk_plllc1en_preg[i];
783                 termen_field = sp->cmn_refrcv_refclk_termen_preg[i];
784
785                 ret = cdns_sierra_pll_mux_register(sp, pfdclk1_sel_field, plllc1en_field,
786                                                    termen_field, clk_index);
787                 if (ret) {
788                         dev_err(dev, "Fail to register cmn plllc mux\n");
789                         return ret;
790                 }
791         }
792
793         return 0;
794 }
795
796 static int cdns_sierra_derived_refclk_enable(struct clk_hw *hw)
797 {
798         struct cdns_sierra_derived_refclk *derived_refclk = to_cdns_sierra_derived_refclk(hw);
799
800         regmap_field_write(derived_refclk->cmn_plllc_clk1_en_preg, 0x1);
801
802         /* Programming to get 100Mhz clock output in ref_der_clk_out 5GHz VCO/50 = 100MHz */
803         regmap_field_write(derived_refclk->cmn_plllc_clk1outdiv_preg, 0x2E);
804
805         return 0;
806 }
807
808 static void cdns_sierra_derived_refclk_disable(struct clk_hw *hw)
809 {
810         struct cdns_sierra_derived_refclk *derived_refclk = to_cdns_sierra_derived_refclk(hw);
811
812         regmap_field_write(derived_refclk->cmn_plllc_clk1_en_preg, 0);
813 }
814
815 static int cdns_sierra_derived_refclk_is_enabled(struct clk_hw *hw)
816 {
817         struct cdns_sierra_derived_refclk *derived_refclk = to_cdns_sierra_derived_refclk(hw);
818         int val;
819
820         regmap_field_read(derived_refclk->cmn_plllc_clk1_en_preg, &val);
821
822         return !!val;
823 }
824
825 static const struct clk_ops cdns_sierra_derived_refclk_ops = {
826         .enable = cdns_sierra_derived_refclk_enable,
827         .disable = cdns_sierra_derived_refclk_disable,
828         .is_enabled = cdns_sierra_derived_refclk_is_enabled,
829 };
830
831 static int cdns_sierra_derived_refclk_register(struct cdns_sierra_phy *sp)
832 {
833         struct cdns_sierra_derived_refclk *derived_refclk;
834         struct device *dev = sp->dev;
835         struct regmap_field *field;
836         struct clk_init_data *init;
837         struct regmap *regmap;
838         char clk_name[100];
839         int ret;
840
841         derived_refclk = devm_kzalloc(dev, sizeof(*derived_refclk), GFP_KERNEL);
842         if (!derived_refclk)
843                 return -ENOMEM;
844
845         snprintf(clk_name, sizeof(clk_name), "%s_%s", dev_name(dev),
846                  clk_names[CDNS_SIERRA_DERIVED_REFCLK]);
847
848         init = &derived_refclk->clk_data;
849
850         init->ops = &cdns_sierra_derived_refclk_ops;
851         init->flags = 0;
852         init->name = clk_name;
853
854         regmap = sp->regmap_common_cdb;
855
856         field = devm_regmap_field_alloc(dev, regmap, cmn_plllc_clk1outdiv_preg);
857         if (IS_ERR(field)) {
858                 dev_err(dev, "cmn_plllc_clk1outdiv_preg reg field init failed\n");
859                 return PTR_ERR(field);
860         }
861         derived_refclk->cmn_plllc_clk1outdiv_preg = field;
862
863         field = devm_regmap_field_alloc(dev, regmap, cmn_plllc_clk1_en_preg);
864         if (IS_ERR(field)) {
865                 dev_err(dev, "cmn_plllc_clk1_en_preg reg field init failed\n");
866                 return PTR_ERR(field);
867         }
868         derived_refclk->cmn_plllc_clk1_en_preg = field;
869
870         derived_refclk->hw.init = init;
871
872         ret = devm_clk_hw_register(dev, &derived_refclk->hw);
873         if (ret)
874                 return ret;
875
876         sp->clk_data.hws[CDNS_SIERRA_DERIVED_REFCLK] = &derived_refclk->hw;
877
878         return 0;
879 }
880
881 static void cdns_sierra_clk_unregister(struct cdns_sierra_phy *sp)
882 {
883         struct device *dev = sp->dev;
884         struct device_node *node = dev->of_node;
885
886         of_clk_del_provider(node);
887 }
888
889 static int cdns_sierra_clk_register(struct cdns_sierra_phy *sp)
890 {
891         struct device *dev = sp->dev;
892         struct device_node *node = dev->of_node;
893         int ret;
894
895         ret = cdns_sierra_phy_register_pll_mux(sp);
896         if (ret) {
897                 dev_err(dev, "Failed to pll mux clocks\n");
898                 return ret;
899         }
900
901         ret = cdns_sierra_derived_refclk_register(sp);
902         if (ret) {
903                 dev_err(dev, "Failed to register derived refclk\n");
904                 return ret;
905         }
906
907         sp->clk_data.num = CDNS_SIERRA_OUTPUT_CLOCKS;
908         ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
909                                      &sp->clk_data);
910         if (ret)
911                 dev_err(dev, "Failed to add clock provider: %s\n", node->name);
912
913         return ret;
914 }
915
916 static int cdns_sierra_get_optional(struct cdns_sierra_inst *inst,
917                                     struct device_node *child)
918 {
919         u32 phy_type;
920
921         if (of_property_read_u32(child, "reg", &inst->mlane))
922                 return -EINVAL;
923
924         if (of_property_read_u32(child, "cdns,num-lanes", &inst->num_lanes))
925                 return -EINVAL;
926
927         if (of_property_read_u32(child, "cdns,phy-type", &phy_type))
928                 return -EINVAL;
929
930         switch (phy_type) {
931         case PHY_TYPE_PCIE:
932                 inst->phy_type = TYPE_PCIE;
933                 break;
934         case PHY_TYPE_USB3:
935                 inst->phy_type = TYPE_USB;
936                 break;
937         case PHY_TYPE_SGMII:
938                 inst->phy_type = TYPE_SGMII;
939                 break;
940         case PHY_TYPE_QSGMII:
941                 inst->phy_type = TYPE_QSGMII;
942                 break;
943         default:
944                 return -EINVAL;
945         }
946
947         inst->ssc_mode = EXTERNAL_SSC;
948         of_property_read_u32(child, "cdns,ssc-mode", &inst->ssc_mode);
949
950         return 0;
951 }
952
953 static struct regmap *cdns_regmap_init(struct device *dev, void __iomem *base,
954                                        u32 block_offset, u8 reg_offset_shift,
955                                        const struct regmap_config *config)
956 {
957         struct cdns_regmap_cdb_context *ctx;
958
959         ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
960         if (!ctx)
961                 return ERR_PTR(-ENOMEM);
962
963         ctx->dev = dev;
964         ctx->base = base + block_offset;
965         ctx->reg_offset_shift = reg_offset_shift;
966
967         return devm_regmap_init(dev, NULL, ctx, config);
968 }
969
970 static int cdns_regfield_init(struct cdns_sierra_phy *sp)
971 {
972         struct device *dev = sp->dev;
973         struct regmap_field *field;
974         struct reg_field reg_field;
975         struct regmap *regmap;
976         int i;
977
978         regmap = sp->regmap_common_cdb;
979         field = devm_regmap_field_alloc(dev, regmap, macro_id_type);
980         if (IS_ERR(field)) {
981                 dev_err(dev, "MACRO_ID_TYPE reg field init failed\n");
982                 return PTR_ERR(field);
983         }
984         sp->macro_id_type = field;
985
986         for (i = 0; i < SIERRA_NUM_CMN_PLLC; i++) {
987                 reg_field = cmn_plllc_pfdclk1_sel_preg[i].pfdclk_sel_preg;
988                 field = devm_regmap_field_alloc(dev, regmap, reg_field);
989                 if (IS_ERR(field)) {
990                         dev_err(dev, "PLLLC%d_PFDCLK1_SEL failed\n", i);
991                         return PTR_ERR(field);
992                 }
993                 sp->cmn_plllc_pfdclk1_sel_preg[i] = field;
994
995                 reg_field = cmn_plllc_pfdclk1_sel_preg[i].plllc1en_field;
996                 field = devm_regmap_field_alloc(dev, regmap, reg_field);
997                 if (IS_ERR(field)) {
998                         dev_err(dev, "REFRCV%d_REFCLK_PLLLC1EN failed\n", i);
999                         return PTR_ERR(field);
1000                 }
1001                 sp->cmn_refrcv_refclk_plllc1en_preg[i] = field;
1002
1003                 reg_field = cmn_plllc_pfdclk1_sel_preg[i].termen_field;
1004                 field = devm_regmap_field_alloc(dev, regmap, reg_field);
1005                 if (IS_ERR(field)) {
1006                         dev_err(dev, "REFRCV%d_REFCLK_TERMEN failed\n", i);
1007                         return PTR_ERR(field);
1008                 }
1009                 sp->cmn_refrcv_refclk_termen_preg[i] = field;
1010         }
1011
1012         regmap = sp->regmap_phy_pcs_common_cdb;
1013         field = devm_regmap_field_alloc(dev, regmap, phy_pll_cfg_1);
1014         if (IS_ERR(field)) {
1015                 dev_err(dev, "PHY_PLL_CFG_1 reg field init failed\n");
1016                 return PTR_ERR(field);
1017         }
1018         sp->phy_pll_cfg_1 = field;
1019
1020         regmap = sp->regmap_phy_pma_common_cdb;
1021         field = devm_regmap_field_alloc(dev, regmap, pma_cmn_ready);
1022         if (IS_ERR(field)) {
1023                 dev_err(dev, "PHY_PMA_CMN_CTRL reg field init failed\n");
1024                 return PTR_ERR(field);
1025         }
1026         sp->pma_cmn_ready = field;
1027
1028         for (i = 0; i < SIERRA_MAX_LANES; i++) {
1029                 regmap = sp->regmap_lane_cdb[i];
1030                 field = devm_regmap_field_alloc(dev, regmap, pllctrl_lock);
1031                 if (IS_ERR(field)) {
1032                         dev_err(dev, "P%d_ENABLE reg field init failed\n", i);
1033                         return PTR_ERR(field);
1034                 }
1035                 sp->pllctrl_lock[i] = field;
1036         }
1037
1038         for (i = 0; i < SIERRA_MAX_LANES; i++) {
1039                 regmap = sp->regmap_phy_pcs_lane_cdb[i];
1040                 field = devm_regmap_field_alloc(dev, regmap, phy_iso_link_ctrl_1);
1041                 if (IS_ERR(field)) {
1042                         dev_err(dev, "PHY_ISO_LINK_CTRL reg field init for lane %d failed\n", i);
1043                         return PTR_ERR(field);
1044                 }
1045                 sp->phy_iso_link_ctrl_1[i] = field;
1046         }
1047
1048         return 0;
1049 }
1050
1051 static int cdns_regmap_init_blocks(struct cdns_sierra_phy *sp,
1052                                    void __iomem *base, u8 block_offset_shift,
1053                                    u8 reg_offset_shift)
1054 {
1055         struct device *dev = sp->dev;
1056         struct regmap *regmap;
1057         u32 block_offset;
1058         int i;
1059
1060         for (i = 0; i < SIERRA_MAX_LANES; i++) {
1061                 block_offset = SIERRA_LANE_CDB_OFFSET(i, block_offset_shift,
1062                                                       reg_offset_shift);
1063                 regmap = cdns_regmap_init(dev, base, block_offset,
1064                                           reg_offset_shift,
1065                                           &cdns_sierra_lane_cdb_config[i]);
1066                 if (IS_ERR(regmap)) {
1067                         dev_err(dev, "Failed to init lane CDB regmap\n");
1068                         return PTR_ERR(regmap);
1069                 }
1070                 sp->regmap_lane_cdb[i] = regmap;
1071         }
1072
1073         regmap = cdns_regmap_init(dev, base, SIERRA_COMMON_CDB_OFFSET,
1074                                   reg_offset_shift,
1075                                   &cdns_sierra_common_cdb_config);
1076         if (IS_ERR(regmap)) {
1077                 dev_err(dev, "Failed to init common CDB regmap\n");
1078                 return PTR_ERR(regmap);
1079         }
1080         sp->regmap_common_cdb = regmap;
1081
1082         block_offset = SIERRA_PHY_PCS_COMMON_OFFSET(block_offset_shift);
1083         regmap = cdns_regmap_init(dev, base, block_offset, reg_offset_shift,
1084                                   &cdns_sierra_phy_pcs_cmn_cdb_config);
1085         if (IS_ERR(regmap)) {
1086                 dev_err(dev, "Failed to init PHY PCS common CDB regmap\n");
1087                 return PTR_ERR(regmap);
1088         }
1089         sp->regmap_phy_pcs_common_cdb = regmap;
1090
1091         for (i = 0; i < SIERRA_MAX_LANES; i++) {
1092                 block_offset = SIERRA_PHY_PCS_LANE_CDB_OFFSET(i, block_offset_shift,
1093                                                               reg_offset_shift);
1094                 regmap = cdns_regmap_init(dev, base, block_offset,
1095                                           reg_offset_shift,
1096                                           &cdns_sierra_phy_pcs_lane_cdb_config[i]);
1097                 if (IS_ERR(regmap)) {
1098                         dev_err(dev, "Failed to init PHY PCS lane CDB regmap\n");
1099                         return PTR_ERR(regmap);
1100                 }
1101                 sp->regmap_phy_pcs_lane_cdb[i] = regmap;
1102         }
1103
1104         block_offset = SIERRA_PHY_PMA_COMMON_OFFSET(block_offset_shift);
1105         regmap = cdns_regmap_init(dev, base, block_offset, reg_offset_shift,
1106                                   &cdns_sierra_phy_pma_cmn_cdb_config);
1107         if (IS_ERR(regmap)) {
1108                 dev_err(dev, "Failed to init PHY PMA common CDB regmap\n");
1109                 return PTR_ERR(regmap);
1110         }
1111         sp->regmap_phy_pma_common_cdb = regmap;
1112
1113         for (i = 0; i < SIERRA_MAX_LANES; i++) {
1114                 block_offset = SIERRA_PHY_PMA_LANE_CDB_OFFSET(i, block_offset_shift,
1115                                                               reg_offset_shift);
1116                 regmap = cdns_regmap_init(dev, base, block_offset,
1117                                           reg_offset_shift,
1118                                           &cdns_sierra_phy_pma_lane_cdb_config[i]);
1119                 if (IS_ERR(regmap)) {
1120                         dev_err(dev, "Failed to init PHY PMA lane CDB regmap\n");
1121                         return PTR_ERR(regmap);
1122                 }
1123                 sp->regmap_phy_pma_lane_cdb[i] = regmap;
1124         }
1125
1126         return 0;
1127 }
1128
1129 static int cdns_sierra_phy_get_clocks(struct cdns_sierra_phy *sp,
1130                                       struct device *dev)
1131 {
1132         struct clk *clk;
1133         int ret;
1134
1135         clk = devm_clk_get_optional(dev, "cmn_refclk_dig_div");
1136         if (IS_ERR(clk)) {
1137                 dev_err(dev, "cmn_refclk_dig_div clock not found\n");
1138                 ret = PTR_ERR(clk);
1139                 return ret;
1140         }
1141         sp->input_clks[CMN_REFCLK_DIG_DIV] = clk;
1142
1143         clk = devm_clk_get_optional(dev, "cmn_refclk1_dig_div");
1144         if (IS_ERR(clk)) {
1145                 dev_err(dev, "cmn_refclk1_dig_div clock not found\n");
1146                 ret = PTR_ERR(clk);
1147                 return ret;
1148         }
1149         sp->input_clks[CMN_REFCLK1_DIG_DIV] = clk;
1150
1151         return 0;
1152 }
1153
1154 static int cdns_sierra_phy_clk(struct cdns_sierra_phy *sp)
1155 {
1156         struct device *dev = sp->dev;
1157         struct clk *clk;
1158         int ret;
1159
1160         clk = devm_clk_get_optional(dev, "phy_clk");
1161         if (IS_ERR(clk)) {
1162                 dev_err(dev, "failed to get clock phy_clk\n");
1163                 return PTR_ERR(clk);
1164         }
1165         sp->input_clks[PHY_CLK] = clk;
1166
1167         ret = clk_prepare_enable(sp->input_clks[PHY_CLK]);
1168         if (ret)
1169                 return ret;
1170
1171         return 0;
1172 }
1173
1174 static int cdns_sierra_phy_enable_clocks(struct cdns_sierra_phy *sp)
1175 {
1176         int ret;
1177
1178         ret = clk_prepare_enable(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC]);
1179         if (ret)
1180                 return ret;
1181
1182         ret = clk_prepare_enable(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC1]);
1183         if (ret)
1184                 goto err_pll_cmnlc1;
1185
1186         return 0;
1187
1188 err_pll_cmnlc1:
1189         clk_disable_unprepare(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC]);
1190
1191         return ret;
1192 }
1193
1194 static void cdns_sierra_phy_disable_clocks(struct cdns_sierra_phy *sp)
1195 {
1196         clk_disable_unprepare(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC1]);
1197         clk_disable_unprepare(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC]);
1198         if (!sp->already_configured)
1199                 clk_disable_unprepare(sp->input_clks[PHY_CLK]);
1200 }
1201
1202 static int cdns_sierra_phy_get_resets(struct cdns_sierra_phy *sp,
1203                                       struct device *dev)
1204 {
1205         struct reset_control *rst;
1206
1207         rst = devm_reset_control_get_exclusive(dev, "sierra_reset");
1208         if (IS_ERR(rst)) {
1209                 dev_err(dev, "failed to get reset\n");
1210                 return PTR_ERR(rst);
1211         }
1212         sp->phy_rst = rst;
1213
1214         rst = devm_reset_control_get_optional_exclusive(dev, "sierra_apb");
1215         if (IS_ERR(rst)) {
1216                 dev_err(dev, "failed to get apb reset\n");
1217                 return PTR_ERR(rst);
1218         }
1219         sp->apb_rst = rst;
1220
1221         return 0;
1222 }
1223
1224 static int cdns_sierra_phy_configure_multilink(struct cdns_sierra_phy *sp)
1225 {
1226         const struct cdns_sierra_data *init_data = sp->init_data;
1227         struct cdns_sierra_vals *pma_cmn_vals, *pma_ln_vals;
1228         enum cdns_sierra_phy_type phy_t1, phy_t2;
1229         struct cdns_sierra_vals *phy_pma_ln_vals;
1230         const struct cdns_reg_pairs *reg_pairs;
1231         struct cdns_sierra_vals *pcs_cmn_vals;
1232         int i, j, node, mlane, num_lanes, ret;
1233         enum cdns_sierra_ssc_mode ssc;
1234         struct regmap *regmap;
1235         u32 num_regs;
1236
1237         /* Maximum 2 links (subnodes) are supported */
1238         if (sp->nsubnodes != 2)
1239                 return -EINVAL;
1240
1241         clk_set_rate(sp->input_clks[CMN_REFCLK_DIG_DIV], 25000000);
1242         clk_set_rate(sp->input_clks[CMN_REFCLK1_DIG_DIV], 25000000);
1243
1244         /* PHY configured to use both PLL LC and LC1 */
1245         regmap_field_write(sp->phy_pll_cfg_1, 0x1);
1246
1247         phy_t1 = sp->phys[0].phy_type;
1248         phy_t2 = sp->phys[1].phy_type;
1249
1250         /*
1251          * PHY configuration for multi-link operation is done in two steps.
1252          * e.g. Consider a case for a 4 lane PHY with PCIe using 2 lanes and QSGMII other 2 lanes.
1253          * Sierra PHY has 2 PLLs, viz. PLLLC and PLLLC1. So in this case, PLLLC is used for PCIe
1254          * and PLLLC1 is used for QSGMII. PHY is configured in two steps as described below.
1255          *
1256          * [1] For first step, phy_t1 = TYPE_PCIE and phy_t2 = TYPE_QSGMII
1257          *     So the register values are selected as [TYPE_PCIE][TYPE_QSGMII][ssc].
1258          *     This will configure PHY registers associated for PCIe (i.e. first protocol)
1259          *     involving PLLLC registers and registers for first 2 lanes of PHY.
1260          * [2] In second step, the variables phy_t1 and phy_t2 are swapped. So now,
1261          *     phy_t1 = TYPE_QSGMII and phy_t2 = TYPE_PCIE. And the register values are selected as
1262          *     [TYPE_QSGMII][TYPE_PCIE][ssc].
1263          *     This will configure PHY registers associated for QSGMII (i.e. second protocol)
1264          *     involving PLLLC1 registers and registers for other 2 lanes of PHY.
1265          *
1266          * This completes the PHY configuration for multilink operation. This approach enables
1267          * dividing the large number of PHY register configurations into protocol specific
1268          * smaller groups.
1269          */
1270         for (node = 0; node < sp->nsubnodes; node++) {
1271                 if (node == 1) {
1272                         /*
1273                          * If first link with phy_t1 is configured, then configure the PHY for
1274                          * second link with phy_t2. Get the array values as [phy_t2][phy_t1][ssc].
1275                          */
1276                         swap(phy_t1, phy_t2);
1277                 }
1278
1279                 mlane = sp->phys[node].mlane;
1280                 ssc = sp->phys[node].ssc_mode;
1281                 num_lanes = sp->phys[node].num_lanes;
1282
1283                 /* PHY PCS common registers configurations */
1284                 pcs_cmn_vals = init_data->pcs_cmn_vals[phy_t1][phy_t2][ssc];
1285                 if (pcs_cmn_vals) {
1286                         reg_pairs = pcs_cmn_vals->reg_pairs;
1287                         num_regs = pcs_cmn_vals->num_regs;
1288                         regmap = sp->regmap_phy_pcs_common_cdb;
1289                         for (i = 0; i < num_regs; i++)
1290                                 regmap_write(regmap, reg_pairs[i].off, reg_pairs[i].val);
1291                 }
1292
1293                 /* PHY PMA lane registers configurations */
1294                 phy_pma_ln_vals = init_data->phy_pma_ln_vals[phy_t1][phy_t2][ssc];
1295                 if (phy_pma_ln_vals) {
1296                         reg_pairs = phy_pma_ln_vals->reg_pairs;
1297                         num_regs = phy_pma_ln_vals->num_regs;
1298                         for (i = 0; i < num_lanes; i++) {
1299                                 regmap = sp->regmap_phy_pma_lane_cdb[i + mlane];
1300                                 for (j = 0; j < num_regs; j++)
1301                                         regmap_write(regmap, reg_pairs[j].off, reg_pairs[j].val);
1302                         }
1303                 }
1304
1305                 /* PMA common registers configurations */
1306                 pma_cmn_vals = init_data->pma_cmn_vals[phy_t1][phy_t2][ssc];
1307                 if (pma_cmn_vals) {
1308                         reg_pairs = pma_cmn_vals->reg_pairs;
1309                         num_regs = pma_cmn_vals->num_regs;
1310                         regmap = sp->regmap_common_cdb;
1311                         for (i = 0; i < num_regs; i++)
1312                                 regmap_write(regmap, reg_pairs[i].off, reg_pairs[i].val);
1313                 }
1314
1315                 /* PMA lane registers configurations */
1316                 pma_ln_vals = init_data->pma_ln_vals[phy_t1][phy_t2][ssc];
1317                 if (pma_ln_vals) {
1318                         reg_pairs = pma_ln_vals->reg_pairs;
1319                         num_regs = pma_ln_vals->num_regs;
1320                         for (i = 0; i < num_lanes; i++) {
1321                                 regmap = sp->regmap_lane_cdb[i + mlane];
1322                                 for (j = 0; j < num_regs; j++)
1323                                         regmap_write(regmap, reg_pairs[j].off, reg_pairs[j].val);
1324                         }
1325                 }
1326
1327                 if (phy_t1 == TYPE_SGMII || phy_t1 == TYPE_QSGMII)
1328                         reset_control_deassert(sp->phys[node].lnk_rst);
1329         }
1330
1331         /* Take the PHY out of reset */
1332         ret = reset_control_deassert(sp->phy_rst);
1333         if (ret)
1334                 return ret;
1335
1336         return 0;
1337 }
1338
1339 static int cdns_sierra_phy_probe(struct platform_device *pdev)
1340 {
1341         struct cdns_sierra_phy *sp;
1342         struct phy_provider *phy_provider;
1343         struct device *dev = &pdev->dev;
1344         const struct cdns_sierra_data *data;
1345         unsigned int id_value;
1346         int ret, node = 0;
1347         void __iomem *base;
1348         struct device_node *dn = dev->of_node, *child;
1349
1350         if (of_get_child_count(dn) == 0)
1351                 return -ENODEV;
1352
1353         /* Get init data for this PHY */
1354         data = of_device_get_match_data(dev);
1355         if (!data)
1356                 return -EINVAL;
1357
1358         sp = devm_kzalloc(dev, struct_size(sp, clk_data.hws,
1359                                            CDNS_SIERRA_OUTPUT_CLOCKS),
1360                           GFP_KERNEL);
1361         if (!sp)
1362                 return -ENOMEM;
1363         dev_set_drvdata(dev, sp);
1364         sp->dev = dev;
1365         sp->init_data = data;
1366
1367         base = devm_platform_ioremap_resource(pdev, 0);
1368         if (IS_ERR(base)) {
1369                 dev_err(dev, "missing \"reg\"\n");
1370                 return PTR_ERR(base);
1371         }
1372
1373         ret = cdns_regmap_init_blocks(sp, base, data->block_offset_shift,
1374                                       data->reg_offset_shift);
1375         if (ret)
1376                 return ret;
1377
1378         ret = cdns_regfield_init(sp);
1379         if (ret)
1380                 return ret;
1381
1382         platform_set_drvdata(pdev, sp);
1383
1384         ret = cdns_sierra_phy_get_clocks(sp, dev);
1385         if (ret)
1386                 return ret;
1387
1388         ret = cdns_sierra_clk_register(sp);
1389         if (ret)
1390                 return ret;
1391
1392         ret = cdns_sierra_phy_enable_clocks(sp);
1393         if (ret)
1394                 goto unregister_clk;
1395
1396         regmap_field_read(sp->pma_cmn_ready, &sp->already_configured);
1397
1398         if (!sp->already_configured) {
1399                 ret = cdns_sierra_phy_clk(sp);
1400                 if (ret)
1401                         goto clk_disable;
1402
1403                 ret = cdns_sierra_phy_get_resets(sp, dev);
1404                 if (ret)
1405                         goto clk_disable;
1406
1407                 /* Enable APB */
1408                 reset_control_deassert(sp->apb_rst);
1409         }
1410
1411         /* Check that PHY is present */
1412         regmap_field_read(sp->macro_id_type, &id_value);
1413         if  (sp->init_data->id_value != id_value) {
1414                 ret = -EINVAL;
1415                 goto ctrl_assert;
1416         }
1417
1418         sp->autoconf = of_property_read_bool(dn, "cdns,autoconf");
1419
1420         for_each_available_child_of_node(dn, child) {
1421                 struct phy *gphy;
1422
1423                 if (!(of_node_name_eq(child, "phy") ||
1424                       of_node_name_eq(child, "link")))
1425                         continue;
1426
1427                 sp->phys[node].lnk_rst =
1428                         of_reset_control_array_get_exclusive(child);
1429
1430                 if (IS_ERR(sp->phys[node].lnk_rst)) {
1431                         dev_err(dev, "failed to get reset %s\n",
1432                                 child->full_name);
1433                         ret = PTR_ERR(sp->phys[node].lnk_rst);
1434                         of_node_put(child);
1435                         goto put_control;
1436                 }
1437
1438                 if (!sp->autoconf) {
1439                         ret = cdns_sierra_get_optional(&sp->phys[node], child);
1440                         if (ret) {
1441                                 dev_err(dev, "missing property in node %s\n",
1442                                         child->name);
1443                                 of_node_put(child);
1444                                 reset_control_put(sp->phys[node].lnk_rst);
1445                                 goto put_control;
1446                         }
1447                 }
1448
1449                 sp->num_lanes += sp->phys[node].num_lanes;
1450
1451                 if (!sp->already_configured)
1452                         gphy = devm_phy_create(dev, child, &ops);
1453                 else
1454                         gphy = devm_phy_create(dev, child, &noop_ops);
1455                 if (IS_ERR(gphy)) {
1456                         ret = PTR_ERR(gphy);
1457                         of_node_put(child);
1458                         reset_control_put(sp->phys[node].lnk_rst);
1459                         goto put_control;
1460                 }
1461                 sp->phys[node].phy = gphy;
1462                 phy_set_drvdata(gphy, &sp->phys[node]);
1463
1464                 node++;
1465         }
1466         sp->nsubnodes = node;
1467
1468         if (sp->num_lanes > SIERRA_MAX_LANES) {
1469                 ret = -EINVAL;
1470                 dev_err(dev, "Invalid lane configuration\n");
1471                 goto put_control;
1472         }
1473
1474         /* If more than one subnode, configure the PHY as multilink */
1475         if (!sp->already_configured && !sp->autoconf && sp->nsubnodes > 1) {
1476                 ret = cdns_sierra_phy_configure_multilink(sp);
1477                 if (ret)
1478                         goto put_control;
1479         }
1480
1481         pm_runtime_enable(dev);
1482         phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
1483         if (IS_ERR(phy_provider)) {
1484                 ret = PTR_ERR(phy_provider);
1485                 goto put_control;
1486         }
1487
1488         return 0;
1489
1490 put_control:
1491         while (--node >= 0)
1492                 reset_control_put(sp->phys[node].lnk_rst);
1493 ctrl_assert:
1494         if (!sp->already_configured)
1495                 reset_control_assert(sp->apb_rst);
1496 clk_disable:
1497         cdns_sierra_phy_disable_clocks(sp);
1498 unregister_clk:
1499         cdns_sierra_clk_unregister(sp);
1500         return ret;
1501 }
1502
1503 static void cdns_sierra_phy_remove(struct platform_device *pdev)
1504 {
1505         struct cdns_sierra_phy *phy = platform_get_drvdata(pdev);
1506         int i;
1507
1508         reset_control_assert(phy->phy_rst);
1509         reset_control_assert(phy->apb_rst);
1510         pm_runtime_disable(&pdev->dev);
1511
1512         cdns_sierra_phy_disable_clocks(phy);
1513         /*
1514          * The device level resets will be put automatically.
1515          * Need to put the subnode resets here though.
1516          */
1517         for (i = 0; i < phy->nsubnodes; i++) {
1518                 reset_control_assert(phy->phys[i].lnk_rst);
1519                 reset_control_put(phy->phys[i].lnk_rst);
1520         }
1521
1522         cdns_sierra_clk_unregister(phy);
1523 }
1524
1525 /* SGMII PHY PMA lane configuration */
1526 static struct cdns_reg_pairs sgmii_phy_pma_ln_regs[] = {
1527         {0x9010, SIERRA_PHY_PMA_XCVR_CTRL}
1528 };
1529
1530 static struct cdns_sierra_vals sgmii_phy_pma_ln_vals = {
1531         .reg_pairs = sgmii_phy_pma_ln_regs,
1532         .num_regs = ARRAY_SIZE(sgmii_phy_pma_ln_regs),
1533 };
1534
1535 /* SGMII refclk 100MHz, no ssc, opt3 and GE1 links using PLL LC1 */
1536 static const struct cdns_reg_pairs sgmii_100_no_ssc_plllc1_opt3_cmn_regs[] = {
1537         {0x002D, SIERRA_CMN_PLLLC1_FBDIV_INT_PREG},
1538         {0x2085, SIERRA_CMN_PLLLC1_LF_COEFF_MODE0_PREG},
1539         {0x1005, SIERRA_CMN_PLLLC1_CLK0_PREG},
1540         {0x0000, SIERRA_CMN_PLLLC1_BWCAL_MODE0_PREG},
1541         {0x0800, SIERRA_CMN_PLLLC1_SS_TIME_STEPSIZE_MODE_PREG}
1542 };
1543
1544 static const struct cdns_reg_pairs sgmii_100_no_ssc_plllc1_opt3_ln_regs[] = {
1545         {0x688E, SIERRA_DET_STANDEC_D_PREG},
1546         {0x0004, SIERRA_PSC_LN_IDLE_PREG},
1547         {0x0FFE, SIERRA_PSC_RX_A0_PREG},
1548         {0x0106, SIERRA_PLLCTRL_FBDIV_MODE01_PREG},
1549         {0x0013, SIERRA_PLLCTRL_SUBRATE_PREG},
1550         {0x0003, SIERRA_PLLCTRL_GEN_A_PREG},
1551         {0x0106, SIERRA_PLLCTRL_GEN_D_PREG},
1552         {0x5231, SIERRA_PLLCTRL_CPGAIN_MODE_PREG },
1553         {0x0000, SIERRA_DRVCTRL_ATTEN_PREG},
1554         {0x9702, SIERRA_DRVCTRL_BOOST_PREG},
1555         {0x0051, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
1556         {0x3C0E, SIERRA_CREQ_CCLKDET_MODE01_PREG},
1557         {0x3220, SIERRA_CREQ_FSMCLK_SEL_PREG},
1558         {0x0000, SIERRA_CREQ_EQ_CTRL_PREG},
1559         {0x0002, SIERRA_DEQ_PHALIGN_CTRL},
1560         {0x0186, SIERRA_DEQ_GLUT0},
1561         {0x0186, SIERRA_DEQ_GLUT1},
1562         {0x0186, SIERRA_DEQ_GLUT2},
1563         {0x0186, SIERRA_DEQ_GLUT3},
1564         {0x0186, SIERRA_DEQ_GLUT4},
1565         {0x0861, SIERRA_DEQ_ALUT0},
1566         {0x07E0, SIERRA_DEQ_ALUT1},
1567         {0x079E, SIERRA_DEQ_ALUT2},
1568         {0x071D, SIERRA_DEQ_ALUT3},
1569         {0x03F5, SIERRA_DEQ_DFETAP_CTRL_PREG},
1570         {0x0C01, SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG},
1571         {0x3C40, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
1572         {0x1C04, SIERRA_DEQ_TAU_CTRL2_PREG},
1573         {0x0033, SIERRA_DEQ_PICTRL_PREG},
1574         {0x0000, SIERRA_CPI_OUTBUF_RATESEL_PREG},
1575         {0x0B6D, SIERRA_CPI_RESBIAS_BIN_PREG},
1576         {0x0102, SIERRA_RXBUFFER_CTLECTRL_PREG},
1577         {0x0002, SIERRA_RXBUFFER_RCDFECTRL_PREG}
1578 };
1579
1580 static struct cdns_sierra_vals sgmii_100_no_ssc_plllc1_opt3_cmn_vals = {
1581         .reg_pairs = sgmii_100_no_ssc_plllc1_opt3_cmn_regs,
1582         .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_plllc1_opt3_cmn_regs),
1583 };
1584
1585 static struct cdns_sierra_vals sgmii_100_no_ssc_plllc1_opt3_ln_vals = {
1586         .reg_pairs = sgmii_100_no_ssc_plllc1_opt3_ln_regs,
1587         .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_plllc1_opt3_ln_regs),
1588 };
1589
1590 /* QSGMII PHY PMA lane configuration */
1591 static struct cdns_reg_pairs qsgmii_phy_pma_ln_regs[] = {
1592         {0x9010, SIERRA_PHY_PMA_XCVR_CTRL}
1593 };
1594
1595 static struct cdns_sierra_vals qsgmii_phy_pma_ln_vals = {
1596         .reg_pairs = qsgmii_phy_pma_ln_regs,
1597         .num_regs = ARRAY_SIZE(qsgmii_phy_pma_ln_regs),
1598 };
1599
1600 /* QSGMII refclk 100MHz, 20b, opt1, No BW cal, no ssc, PLL LC1 */
1601 static const struct cdns_reg_pairs qsgmii_100_no_ssc_plllc1_cmn_regs[] = {
1602         {0x2085, SIERRA_CMN_PLLLC1_LF_COEFF_MODE0_PREG},
1603         {0x0000, SIERRA_CMN_PLLLC1_BWCAL_MODE0_PREG},
1604         {0x0000, SIERRA_CMN_PLLLC1_SS_TIME_STEPSIZE_MODE_PREG}
1605 };
1606
1607 static const struct cdns_reg_pairs qsgmii_100_no_ssc_plllc1_ln_regs[] = {
1608         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
1609         {0x0252, SIERRA_DET_STANDEC_E_PREG},
1610         {0x0004, SIERRA_PSC_LN_IDLE_PREG},
1611         {0x0FFE, SIERRA_PSC_RX_A0_PREG},
1612         {0x0011, SIERRA_PLLCTRL_SUBRATE_PREG},
1613         {0x0001, SIERRA_PLLCTRL_GEN_A_PREG},
1614         {0x5233, SIERRA_PLLCTRL_CPGAIN_MODE_PREG},
1615         {0x0000, SIERRA_DRVCTRL_ATTEN_PREG},
1616         {0x0089, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
1617         {0x3C3C, SIERRA_CREQ_CCLKDET_MODE01_PREG},
1618         {0x3222, SIERRA_CREQ_FSMCLK_SEL_PREG},
1619         {0x0000, SIERRA_CREQ_EQ_CTRL_PREG},
1620         {0x8422, SIERRA_CTLELUT_CTRL_PREG},
1621         {0x4111, SIERRA_DFE_ECMP_RATESEL_PREG},
1622         {0x4111, SIERRA_DFE_SMP_RATESEL_PREG},
1623         {0x0002, SIERRA_DEQ_PHALIGN_CTRL},
1624         {0x9595, SIERRA_DEQ_VGATUNE_CTRL_PREG},
1625         {0x0186, SIERRA_DEQ_GLUT0},
1626         {0x0186, SIERRA_DEQ_GLUT1},
1627         {0x0186, SIERRA_DEQ_GLUT2},
1628         {0x0186, SIERRA_DEQ_GLUT3},
1629         {0x0186, SIERRA_DEQ_GLUT4},
1630         {0x0861, SIERRA_DEQ_ALUT0},
1631         {0x07E0, SIERRA_DEQ_ALUT1},
1632         {0x079E, SIERRA_DEQ_ALUT2},
1633         {0x071D, SIERRA_DEQ_ALUT3},
1634         {0x03F5, SIERRA_DEQ_DFETAP_CTRL_PREG},
1635         {0x0C01, SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG},
1636         {0x3C40, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
1637         {0x1C04, SIERRA_DEQ_TAU_CTRL2_PREG},
1638         {0x0033, SIERRA_DEQ_PICTRL_PREG},
1639         {0x0660, SIERRA_CPICAL_TMRVAL_MODE0_PREG},
1640         {0x00D5, SIERRA_CPI_OUTBUF_RATESEL_PREG},
1641         {0x0B6D, SIERRA_CPI_RESBIAS_BIN_PREG},
1642         {0x0102, SIERRA_RXBUFFER_CTLECTRL_PREG},
1643         {0x0002, SIERRA_RXBUFFER_RCDFECTRL_PREG}
1644 };
1645
1646 static struct cdns_sierra_vals qsgmii_100_no_ssc_plllc1_cmn_vals = {
1647         .reg_pairs = qsgmii_100_no_ssc_plllc1_cmn_regs,
1648         .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_plllc1_cmn_regs),
1649 };
1650
1651 static struct cdns_sierra_vals qsgmii_100_no_ssc_plllc1_ln_vals = {
1652         .reg_pairs = qsgmii_100_no_ssc_plllc1_ln_regs,
1653         .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_plllc1_ln_regs),
1654 };
1655
1656 /* PCIE PHY PCS common configuration */
1657 static struct cdns_reg_pairs pcie_phy_pcs_cmn_regs[] = {
1658         {0x0430, SIERRA_PHY_PIPE_CMN_CTRL1}
1659 };
1660
1661 static struct cdns_sierra_vals pcie_phy_pcs_cmn_vals = {
1662         .reg_pairs = pcie_phy_pcs_cmn_regs,
1663         .num_regs = ARRAY_SIZE(pcie_phy_pcs_cmn_regs),
1664 };
1665
1666 /* refclk100MHz_32b_PCIe_cmn_pll_no_ssc, pcie_links_using_plllc, pipe_bw_3 */
1667 static const struct cdns_reg_pairs pcie_100_no_ssc_plllc_cmn_regs[] = {
1668         {0x2105, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
1669         {0x2105, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
1670         {0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
1671         {0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG}
1672 };
1673
1674 /*
1675  * refclk100MHz_32b_PCIe_ln_no_ssc, multilink, using_plllc,
1676  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
1677  */
1678 static const struct cdns_reg_pairs ml_pcie_100_no_ssc_ln_regs[] = {
1679         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
1680         {0x001D, SIERRA_PSM_A3IN_TMR_PREG},
1681         {0x0004, SIERRA_PSC_LN_A3_PREG},
1682         {0x0004, SIERRA_PSC_LN_A4_PREG},
1683         {0x0004, SIERRA_PSC_LN_IDLE_PREG},
1684         {0x1555, SIERRA_DFE_BIASTRIM_PREG},
1685         {0x9703, SIERRA_DRVCTRL_BOOST_PREG},
1686         {0x8055, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
1687         {0x80BB, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
1688         {0x8351, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
1689         {0x8349, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
1690         {0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
1691         {0x9800, SIERRA_RX_CTLE_CAL_PREG},
1692         {0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
1693         {0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
1694         {0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
1695         {0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
1696         {0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
1697         {0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
1698         {0x0041, SIERRA_DEQ_GLUT0},
1699         {0x0082, SIERRA_DEQ_GLUT1},
1700         {0x00C3, SIERRA_DEQ_GLUT2},
1701         {0x0145, SIERRA_DEQ_GLUT3},
1702         {0x0186, SIERRA_DEQ_GLUT4},
1703         {0x09E7, SIERRA_DEQ_ALUT0},
1704         {0x09A6, SIERRA_DEQ_ALUT1},
1705         {0x0965, SIERRA_DEQ_ALUT2},
1706         {0x08E3, SIERRA_DEQ_ALUT3},
1707         {0x00FA, SIERRA_DEQ_DFETAP0},
1708         {0x00FA, SIERRA_DEQ_DFETAP1},
1709         {0x00FA, SIERRA_DEQ_DFETAP2},
1710         {0x00FA, SIERRA_DEQ_DFETAP3},
1711         {0x00FA, SIERRA_DEQ_DFETAP4},
1712         {0x000F, SIERRA_DEQ_PRECUR_PREG},
1713         {0x0280, SIERRA_DEQ_POSTCUR_PREG},
1714         {0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
1715         {0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
1716         {0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
1717         {0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
1718         {0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
1719         {0x002B, SIERRA_CPI_TRIM_PREG},
1720         {0x0003, SIERRA_EPI_CTRL_PREG},
1721         {0x803F, SIERRA_SDFILT_H2L_A_PREG},
1722         {0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
1723         {0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
1724         {0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
1725 };
1726
1727 static struct cdns_sierra_vals pcie_100_no_ssc_plllc_cmn_vals = {
1728         .reg_pairs = pcie_100_no_ssc_plllc_cmn_regs,
1729         .num_regs = ARRAY_SIZE(pcie_100_no_ssc_plllc_cmn_regs),
1730 };
1731
1732 static struct cdns_sierra_vals ml_pcie_100_no_ssc_ln_vals = {
1733         .reg_pairs = ml_pcie_100_no_ssc_ln_regs,
1734         .num_regs = ARRAY_SIZE(ml_pcie_100_no_ssc_ln_regs),
1735 };
1736
1737 /*
1738  * TI J721E:
1739  * refclk100MHz_32b_PCIe_ln_no_ssc, multilink, using_plllc,
1740  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
1741  */
1742 static const struct cdns_reg_pairs ti_ml_pcie_100_no_ssc_ln_regs[] = {
1743         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
1744         {0x001D, SIERRA_PSM_A3IN_TMR_PREG},
1745         {0x0004, SIERRA_PSC_LN_A3_PREG},
1746         {0x0004, SIERRA_PSC_LN_A4_PREG},
1747         {0x0004, SIERRA_PSC_LN_IDLE_PREG},
1748         {0x1555, SIERRA_DFE_BIASTRIM_PREG},
1749         {0x9703, SIERRA_DRVCTRL_BOOST_PREG},
1750         {0x8055, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
1751         {0x80BB, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
1752         {0x8351, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
1753         {0x8349, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
1754         {0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
1755         {0x9800, SIERRA_RX_CTLE_CAL_PREG},
1756         {0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
1757         {0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
1758         {0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
1759         {0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
1760         {0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
1761         {0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
1762         {0x0041, SIERRA_DEQ_GLUT0},
1763         {0x0082, SIERRA_DEQ_GLUT1},
1764         {0x00C3, SIERRA_DEQ_GLUT2},
1765         {0x0145, SIERRA_DEQ_GLUT3},
1766         {0x0186, SIERRA_DEQ_GLUT4},
1767         {0x09E7, SIERRA_DEQ_ALUT0},
1768         {0x09A6, SIERRA_DEQ_ALUT1},
1769         {0x0965, SIERRA_DEQ_ALUT2},
1770         {0x08E3, SIERRA_DEQ_ALUT3},
1771         {0x00FA, SIERRA_DEQ_DFETAP0},
1772         {0x00FA, SIERRA_DEQ_DFETAP1},
1773         {0x00FA, SIERRA_DEQ_DFETAP2},
1774         {0x00FA, SIERRA_DEQ_DFETAP3},
1775         {0x00FA, SIERRA_DEQ_DFETAP4},
1776         {0x000F, SIERRA_DEQ_PRECUR_PREG},
1777         {0x0280, SIERRA_DEQ_POSTCUR_PREG},
1778         {0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
1779         {0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
1780         {0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
1781         {0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
1782         {0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
1783         {0x002B, SIERRA_CPI_TRIM_PREG},
1784         {0x0003, SIERRA_EPI_CTRL_PREG},
1785         {0x803F, SIERRA_SDFILT_H2L_A_PREG},
1786         {0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
1787         {0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
1788         {0x4432, SIERRA_RXBUFFER_DFECTRL_PREG},
1789         {0x0002, SIERRA_TX_RCVDET_OVRD_PREG}
1790 };
1791
1792 static struct cdns_sierra_vals ti_ml_pcie_100_no_ssc_ln_vals = {
1793         .reg_pairs = ti_ml_pcie_100_no_ssc_ln_regs,
1794         .num_regs = ARRAY_SIZE(ti_ml_pcie_100_no_ssc_ln_regs),
1795 };
1796
1797 /* refclk100MHz_32b_PCIe_cmn_pll_int_ssc, pcie_links_using_plllc, pipe_bw_3 */
1798 static const struct cdns_reg_pairs pcie_100_int_ssc_plllc_cmn_regs[] = {
1799         {0x000E, SIERRA_CMN_PLLLC_MODE_PREG},
1800         {0x4006, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
1801         {0x4006, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
1802         {0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
1803         {0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
1804         {0x0581, SIERRA_CMN_PLLLC_DSMCORR_PREG},
1805         {0x7F80, SIERRA_CMN_PLLLC_SS_PREG},
1806         {0x0041, SIERRA_CMN_PLLLC_SS_AMP_STEP_SIZE_PREG},
1807         {0x0464, SIERRA_CMN_PLLLC_SSTWOPT_PREG},
1808         {0x0D0D, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG},
1809         {0x0060, SIERRA_CMN_PLLLC_LOCK_DELAY_CTRL_PREG}
1810 };
1811
1812 /*
1813  * refclk100MHz_32b_PCIe_ln_int_ssc, multilink, using_plllc,
1814  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
1815  */
1816 static const struct cdns_reg_pairs ml_pcie_100_int_ssc_ln_regs[] = {
1817         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
1818         {0x001D, SIERRA_PSM_A3IN_TMR_PREG},
1819         {0x0004, SIERRA_PSC_LN_A3_PREG},
1820         {0x0004, SIERRA_PSC_LN_A4_PREG},
1821         {0x0004, SIERRA_PSC_LN_IDLE_PREG},
1822         {0x1555, SIERRA_DFE_BIASTRIM_PREG},
1823         {0x9703, SIERRA_DRVCTRL_BOOST_PREG},
1824         {0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
1825         {0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
1826         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
1827         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
1828         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
1829         {0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
1830         {0x9800, SIERRA_RX_CTLE_CAL_PREG},
1831         {0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
1832         {0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
1833         {0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
1834         {0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
1835         {0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
1836         {0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
1837         {0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
1838         {0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
1839         {0x0041, SIERRA_DEQ_GLUT0},
1840         {0x0082, SIERRA_DEQ_GLUT1},
1841         {0x00C3, SIERRA_DEQ_GLUT2},
1842         {0x0145, SIERRA_DEQ_GLUT3},
1843         {0x0186, SIERRA_DEQ_GLUT4},
1844         {0x09E7, SIERRA_DEQ_ALUT0},
1845         {0x09A6, SIERRA_DEQ_ALUT1},
1846         {0x0965, SIERRA_DEQ_ALUT2},
1847         {0x08E3, SIERRA_DEQ_ALUT3},
1848         {0x00FA, SIERRA_DEQ_DFETAP0},
1849         {0x00FA, SIERRA_DEQ_DFETAP1},
1850         {0x00FA, SIERRA_DEQ_DFETAP2},
1851         {0x00FA, SIERRA_DEQ_DFETAP3},
1852         {0x00FA, SIERRA_DEQ_DFETAP4},
1853         {0x000F, SIERRA_DEQ_PRECUR_PREG},
1854         {0x0280, SIERRA_DEQ_POSTCUR_PREG},
1855         {0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
1856         {0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
1857         {0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
1858         {0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
1859         {0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
1860         {0x002B, SIERRA_CPI_TRIM_PREG},
1861         {0x0003, SIERRA_EPI_CTRL_PREG},
1862         {0x803F, SIERRA_SDFILT_H2L_A_PREG},
1863         {0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
1864         {0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
1865         {0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
1866 };
1867
1868 static struct cdns_sierra_vals pcie_100_int_ssc_plllc_cmn_vals = {
1869         .reg_pairs = pcie_100_int_ssc_plllc_cmn_regs,
1870         .num_regs = ARRAY_SIZE(pcie_100_int_ssc_plllc_cmn_regs),
1871 };
1872
1873 static struct cdns_sierra_vals ml_pcie_100_int_ssc_ln_vals = {
1874         .reg_pairs = ml_pcie_100_int_ssc_ln_regs,
1875         .num_regs = ARRAY_SIZE(ml_pcie_100_int_ssc_ln_regs),
1876 };
1877
1878 /*
1879  * TI J721E:
1880  * refclk100MHz_32b_PCIe_ln_int_ssc, multilink, using_plllc,
1881  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
1882  */
1883 static const struct cdns_reg_pairs ti_ml_pcie_100_int_ssc_ln_regs[] = {
1884         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
1885         {0x001D, SIERRA_PSM_A3IN_TMR_PREG},
1886         {0x0004, SIERRA_PSC_LN_A3_PREG},
1887         {0x0004, SIERRA_PSC_LN_A4_PREG},
1888         {0x0004, SIERRA_PSC_LN_IDLE_PREG},
1889         {0x1555, SIERRA_DFE_BIASTRIM_PREG},
1890         {0x9703, SIERRA_DRVCTRL_BOOST_PREG},
1891         {0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
1892         {0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
1893         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
1894         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
1895         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
1896         {0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
1897         {0x9800, SIERRA_RX_CTLE_CAL_PREG},
1898         {0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
1899         {0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
1900         {0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
1901         {0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
1902         {0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
1903         {0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
1904         {0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
1905         {0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
1906         {0x0041, SIERRA_DEQ_GLUT0},
1907         {0x0082, SIERRA_DEQ_GLUT1},
1908         {0x00C3, SIERRA_DEQ_GLUT2},
1909         {0x0145, SIERRA_DEQ_GLUT3},
1910         {0x0186, SIERRA_DEQ_GLUT4},
1911         {0x09E7, SIERRA_DEQ_ALUT0},
1912         {0x09A6, SIERRA_DEQ_ALUT1},
1913         {0x0965, SIERRA_DEQ_ALUT2},
1914         {0x08E3, SIERRA_DEQ_ALUT3},
1915         {0x00FA, SIERRA_DEQ_DFETAP0},
1916         {0x00FA, SIERRA_DEQ_DFETAP1},
1917         {0x00FA, SIERRA_DEQ_DFETAP2},
1918         {0x00FA, SIERRA_DEQ_DFETAP3},
1919         {0x00FA, SIERRA_DEQ_DFETAP4},
1920         {0x000F, SIERRA_DEQ_PRECUR_PREG},
1921         {0x0280, SIERRA_DEQ_POSTCUR_PREG},
1922         {0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
1923         {0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
1924         {0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
1925         {0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
1926         {0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
1927         {0x002B, SIERRA_CPI_TRIM_PREG},
1928         {0x0003, SIERRA_EPI_CTRL_PREG},
1929         {0x803F, SIERRA_SDFILT_H2L_A_PREG},
1930         {0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
1931         {0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
1932         {0x4432, SIERRA_RXBUFFER_DFECTRL_PREG},
1933         {0x0002, SIERRA_TX_RCVDET_OVRD_PREG}
1934 };
1935
1936 static struct cdns_sierra_vals ti_ml_pcie_100_int_ssc_ln_vals = {
1937         .reg_pairs = ti_ml_pcie_100_int_ssc_ln_regs,
1938         .num_regs = ARRAY_SIZE(ti_ml_pcie_100_int_ssc_ln_regs),
1939 };
1940
1941 /* refclk100MHz_32b_PCIe_cmn_pll_ext_ssc, pcie_links_using_plllc, pipe_bw_3 */
1942 static const struct cdns_reg_pairs pcie_100_ext_ssc_plllc_cmn_regs[] = {
1943         {0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
1944         {0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
1945         {0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
1946         {0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
1947         {0x1B1B, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG}
1948 };
1949
1950 /*
1951  * refclk100MHz_32b_PCIe_ln_ext_ssc, multilink, using_plllc,
1952  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
1953  */
1954 static const struct cdns_reg_pairs ml_pcie_100_ext_ssc_ln_regs[] = {
1955         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
1956         {0x001D, SIERRA_PSM_A3IN_TMR_PREG},
1957         {0x0004, SIERRA_PSC_LN_A3_PREG},
1958         {0x0004, SIERRA_PSC_LN_A4_PREG},
1959         {0x0004, SIERRA_PSC_LN_IDLE_PREG},
1960         {0x1555, SIERRA_DFE_BIASTRIM_PREG},
1961         {0x9703, SIERRA_DRVCTRL_BOOST_PREG},
1962         {0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
1963         {0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
1964         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
1965         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
1966         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
1967         {0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
1968         {0x9800, SIERRA_RX_CTLE_CAL_PREG},
1969         {0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
1970         {0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
1971         {0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
1972         {0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
1973         {0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
1974         {0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
1975         {0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
1976         {0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
1977         {0x0041, SIERRA_DEQ_GLUT0},
1978         {0x0082, SIERRA_DEQ_GLUT1},
1979         {0x00C3, SIERRA_DEQ_GLUT2},
1980         {0x0145, SIERRA_DEQ_GLUT3},
1981         {0x0186, SIERRA_DEQ_GLUT4},
1982         {0x09E7, SIERRA_DEQ_ALUT0},
1983         {0x09A6, SIERRA_DEQ_ALUT1},
1984         {0x0965, SIERRA_DEQ_ALUT2},
1985         {0x08E3, SIERRA_DEQ_ALUT3},
1986         {0x00FA, SIERRA_DEQ_DFETAP0},
1987         {0x00FA, SIERRA_DEQ_DFETAP1},
1988         {0x00FA, SIERRA_DEQ_DFETAP2},
1989         {0x00FA, SIERRA_DEQ_DFETAP3},
1990         {0x00FA, SIERRA_DEQ_DFETAP4},
1991         {0x000F, SIERRA_DEQ_PRECUR_PREG},
1992         {0x0280, SIERRA_DEQ_POSTCUR_PREG},
1993         {0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
1994         {0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
1995         {0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
1996         {0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
1997         {0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
1998         {0x002B, SIERRA_CPI_TRIM_PREG},
1999         {0x0003, SIERRA_EPI_CTRL_PREG},
2000         {0x803F, SIERRA_SDFILT_H2L_A_PREG},
2001         {0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
2002         {0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
2003         {0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
2004 };
2005
2006 static struct cdns_sierra_vals pcie_100_ext_ssc_plllc_cmn_vals = {
2007         .reg_pairs = pcie_100_ext_ssc_plllc_cmn_regs,
2008         .num_regs = ARRAY_SIZE(pcie_100_ext_ssc_plllc_cmn_regs),
2009 };
2010
2011 static struct cdns_sierra_vals ml_pcie_100_ext_ssc_ln_vals = {
2012         .reg_pairs = ml_pcie_100_ext_ssc_ln_regs,
2013         .num_regs = ARRAY_SIZE(ml_pcie_100_ext_ssc_ln_regs),
2014 };
2015
2016 /*
2017  * TI J721E:
2018  * refclk100MHz_32b_PCIe_ln_ext_ssc, multilink, using_plllc,
2019  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
2020  */
2021 static const struct cdns_reg_pairs ti_ml_pcie_100_ext_ssc_ln_regs[] = {
2022         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
2023         {0x001D, SIERRA_PSM_A3IN_TMR_PREG},
2024         {0x0004, SIERRA_PSC_LN_A3_PREG},
2025         {0x0004, SIERRA_PSC_LN_A4_PREG},
2026         {0x0004, SIERRA_PSC_LN_IDLE_PREG},
2027         {0x1555, SIERRA_DFE_BIASTRIM_PREG},
2028         {0x9703, SIERRA_DRVCTRL_BOOST_PREG},
2029         {0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
2030         {0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
2031         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
2032         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
2033         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
2034         {0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
2035         {0x9800, SIERRA_RX_CTLE_CAL_PREG},
2036         {0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
2037         {0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
2038         {0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
2039         {0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
2040         {0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
2041         {0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
2042         {0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
2043         {0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
2044         {0x0041, SIERRA_DEQ_GLUT0},
2045         {0x0082, SIERRA_DEQ_GLUT1},
2046         {0x00C3, SIERRA_DEQ_GLUT2},
2047         {0x0145, SIERRA_DEQ_GLUT3},
2048         {0x0186, SIERRA_DEQ_GLUT4},
2049         {0x09E7, SIERRA_DEQ_ALUT0},
2050         {0x09A6, SIERRA_DEQ_ALUT1},
2051         {0x0965, SIERRA_DEQ_ALUT2},
2052         {0x08E3, SIERRA_DEQ_ALUT3},
2053         {0x00FA, SIERRA_DEQ_DFETAP0},
2054         {0x00FA, SIERRA_DEQ_DFETAP1},
2055         {0x00FA, SIERRA_DEQ_DFETAP2},
2056         {0x00FA, SIERRA_DEQ_DFETAP3},
2057         {0x00FA, SIERRA_DEQ_DFETAP4},
2058         {0x000F, SIERRA_DEQ_PRECUR_PREG},
2059         {0x0280, SIERRA_DEQ_POSTCUR_PREG},
2060         {0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
2061         {0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
2062         {0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
2063         {0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
2064         {0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
2065         {0x002B, SIERRA_CPI_TRIM_PREG},
2066         {0x0003, SIERRA_EPI_CTRL_PREG},
2067         {0x803F, SIERRA_SDFILT_H2L_A_PREG},
2068         {0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
2069         {0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
2070         {0x4432, SIERRA_RXBUFFER_DFECTRL_PREG},
2071         {0x0002, SIERRA_TX_RCVDET_OVRD_PREG}
2072 };
2073
2074 static struct cdns_sierra_vals ti_ml_pcie_100_ext_ssc_ln_vals = {
2075         .reg_pairs = ti_ml_pcie_100_ext_ssc_ln_regs,
2076         .num_regs = ARRAY_SIZE(ti_ml_pcie_100_ext_ssc_ln_regs),
2077 };
2078
2079 /* refclk100MHz_32b_PCIe_cmn_pll_no_ssc */
2080 static const struct cdns_reg_pairs cdns_pcie_cmn_regs_no_ssc[] = {
2081         {0x2105, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
2082         {0x2105, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
2083         {0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
2084         {0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG}
2085 };
2086
2087 /* refclk100MHz_32b_PCIe_ln_no_ssc */
2088 static const struct cdns_reg_pairs cdns_pcie_ln_regs_no_ssc[] = {
2089         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
2090         {0x001D, SIERRA_PSM_A3IN_TMR_PREG},
2091         {0x1555, SIERRA_DFE_BIASTRIM_PREG},
2092         {0x9703, SIERRA_DRVCTRL_BOOST_PREG},
2093         {0x8055, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
2094         {0x80BB, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
2095         {0x8351, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
2096         {0x8349, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
2097         {0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
2098         {0x9800, SIERRA_RX_CTLE_CAL_PREG},
2099         {0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
2100         {0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
2101         {0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
2102         {0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
2103         {0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
2104         {0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
2105         {0x0041, SIERRA_DEQ_GLUT0},
2106         {0x0082, SIERRA_DEQ_GLUT1},
2107         {0x00C3, SIERRA_DEQ_GLUT2},
2108         {0x0145, SIERRA_DEQ_GLUT3},
2109         {0x0186, SIERRA_DEQ_GLUT4},
2110         {0x09E7, SIERRA_DEQ_ALUT0},
2111         {0x09A6, SIERRA_DEQ_ALUT1},
2112         {0x0965, SIERRA_DEQ_ALUT2},
2113         {0x08E3, SIERRA_DEQ_ALUT3},
2114         {0x00FA, SIERRA_DEQ_DFETAP0},
2115         {0x00FA, SIERRA_DEQ_DFETAP1},
2116         {0x00FA, SIERRA_DEQ_DFETAP2},
2117         {0x00FA, SIERRA_DEQ_DFETAP3},
2118         {0x00FA, SIERRA_DEQ_DFETAP4},
2119         {0x000F, SIERRA_DEQ_PRECUR_PREG},
2120         {0x0280, SIERRA_DEQ_POSTCUR_PREG},
2121         {0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
2122         {0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
2123         {0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
2124         {0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
2125         {0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
2126         {0x002B, SIERRA_CPI_TRIM_PREG},
2127         {0x0003, SIERRA_EPI_CTRL_PREG},
2128         {0x803F, SIERRA_SDFILT_H2L_A_PREG},
2129         {0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
2130         {0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
2131         {0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
2132 };
2133
2134 static struct cdns_sierra_vals pcie_100_no_ssc_cmn_vals = {
2135         .reg_pairs = cdns_pcie_cmn_regs_no_ssc,
2136         .num_regs = ARRAY_SIZE(cdns_pcie_cmn_regs_no_ssc),
2137 };
2138
2139 static struct cdns_sierra_vals pcie_100_no_ssc_ln_vals = {
2140         .reg_pairs = cdns_pcie_ln_regs_no_ssc,
2141         .num_regs = ARRAY_SIZE(cdns_pcie_ln_regs_no_ssc),
2142 };
2143
2144 /* refclk100MHz_32b_PCIe_cmn_pll_int_ssc */
2145 static const struct cdns_reg_pairs cdns_pcie_cmn_regs_int_ssc[] = {
2146         {0x000E, SIERRA_CMN_PLLLC_MODE_PREG},
2147         {0x4006, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
2148         {0x4006, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
2149         {0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
2150         {0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
2151         {0x0581, SIERRA_CMN_PLLLC_DSMCORR_PREG},
2152         {0x7F80, SIERRA_CMN_PLLLC_SS_PREG},
2153         {0x0041, SIERRA_CMN_PLLLC_SS_AMP_STEP_SIZE_PREG},
2154         {0x0464, SIERRA_CMN_PLLLC_SSTWOPT_PREG},
2155         {0x0D0D, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG},
2156         {0x0060, SIERRA_CMN_PLLLC_LOCK_DELAY_CTRL_PREG}
2157 };
2158
2159 /* refclk100MHz_32b_PCIe_ln_int_ssc */
2160 static const struct cdns_reg_pairs cdns_pcie_ln_regs_int_ssc[] = {
2161         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
2162         {0x001D, SIERRA_PSM_A3IN_TMR_PREG},
2163         {0x1555, SIERRA_DFE_BIASTRIM_PREG},
2164         {0x9703, SIERRA_DRVCTRL_BOOST_PREG},
2165         {0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
2166         {0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
2167         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
2168         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
2169         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
2170         {0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
2171         {0x9800, SIERRA_RX_CTLE_CAL_PREG},
2172         {0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
2173         {0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
2174         {0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
2175         {0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
2176         {0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
2177         {0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
2178         {0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
2179         {0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
2180         {0x0041, SIERRA_DEQ_GLUT0},
2181         {0x0082, SIERRA_DEQ_GLUT1},
2182         {0x00C3, SIERRA_DEQ_GLUT2},
2183         {0x0145, SIERRA_DEQ_GLUT3},
2184         {0x0186, SIERRA_DEQ_GLUT4},
2185         {0x09E7, SIERRA_DEQ_ALUT0},
2186         {0x09A6, SIERRA_DEQ_ALUT1},
2187         {0x0965, SIERRA_DEQ_ALUT2},
2188         {0x08E3, SIERRA_DEQ_ALUT3},
2189         {0x00FA, SIERRA_DEQ_DFETAP0},
2190         {0x00FA, SIERRA_DEQ_DFETAP1},
2191         {0x00FA, SIERRA_DEQ_DFETAP2},
2192         {0x00FA, SIERRA_DEQ_DFETAP3},
2193         {0x00FA, SIERRA_DEQ_DFETAP4},
2194         {0x000F, SIERRA_DEQ_PRECUR_PREG},
2195         {0x0280, SIERRA_DEQ_POSTCUR_PREG},
2196         {0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
2197         {0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
2198         {0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
2199         {0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
2200         {0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
2201         {0x002B, SIERRA_CPI_TRIM_PREG},
2202         {0x0003, SIERRA_EPI_CTRL_PREG},
2203         {0x803F, SIERRA_SDFILT_H2L_A_PREG},
2204         {0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
2205         {0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
2206         {0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
2207 };
2208
2209 static struct cdns_sierra_vals pcie_100_int_ssc_cmn_vals = {
2210         .reg_pairs = cdns_pcie_cmn_regs_int_ssc,
2211         .num_regs = ARRAY_SIZE(cdns_pcie_cmn_regs_int_ssc),
2212 };
2213
2214 static struct cdns_sierra_vals pcie_100_int_ssc_ln_vals = {
2215         .reg_pairs = cdns_pcie_ln_regs_int_ssc,
2216         .num_regs = ARRAY_SIZE(cdns_pcie_ln_regs_int_ssc),
2217 };
2218
2219 /* refclk100MHz_32b_PCIe_cmn_pll_ext_ssc */
2220 static const struct cdns_reg_pairs cdns_pcie_cmn_regs_ext_ssc[] = {
2221         {0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
2222         {0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
2223         {0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
2224         {0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
2225         {0x1B1B, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG}
2226 };
2227
2228 /* refclk100MHz_32b_PCIe_ln_ext_ssc */
2229 static const struct cdns_reg_pairs cdns_pcie_ln_regs_ext_ssc[] = {
2230         {0xFC08, SIERRA_DET_STANDEC_A_PREG},
2231         {0x001D, SIERRA_PSM_A3IN_TMR_PREG},
2232         {0x1555, SIERRA_DFE_BIASTRIM_PREG},
2233         {0x9703, SIERRA_DRVCTRL_BOOST_PREG},
2234         {0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
2235         {0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
2236         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
2237         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
2238         {0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
2239         {0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
2240         {0x9800, SIERRA_RX_CTLE_CAL_PREG},
2241         {0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
2242         {0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
2243         {0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
2244         {0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
2245         {0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
2246         {0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
2247         {0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
2248         {0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
2249         {0x0041, SIERRA_DEQ_GLUT0},
2250         {0x0082, SIERRA_DEQ_GLUT1},
2251         {0x00C3, SIERRA_DEQ_GLUT2},
2252         {0x0145, SIERRA_DEQ_GLUT3},
2253         {0x0186, SIERRA_DEQ_GLUT4},
2254         {0x09E7, SIERRA_DEQ_ALUT0},
2255         {0x09A6, SIERRA_DEQ_ALUT1},
2256         {0x0965, SIERRA_DEQ_ALUT2},
2257         {0x08E3, SIERRA_DEQ_ALUT3},
2258         {0x00FA, SIERRA_DEQ_DFETAP0},
2259         {0x00FA, SIERRA_DEQ_DFETAP1},
2260         {0x00FA, SIERRA_DEQ_DFETAP2},
2261         {0x00FA, SIERRA_DEQ_DFETAP3},
2262         {0x00FA, SIERRA_DEQ_DFETAP4},
2263         {0x000F, SIERRA_DEQ_PRECUR_PREG},
2264         {0x0280, SIERRA_DEQ_POSTCUR_PREG},
2265         {0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
2266         {0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
2267         {0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
2268         {0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
2269         {0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
2270         {0x002B, SIERRA_CPI_TRIM_PREG},
2271         {0x0003, SIERRA_EPI_CTRL_PREG},
2272         {0x803F, SIERRA_SDFILT_H2L_A_PREG},
2273         {0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
2274         {0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
2275         {0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
2276 };
2277
2278 static struct cdns_sierra_vals pcie_100_ext_ssc_cmn_vals = {
2279         .reg_pairs = cdns_pcie_cmn_regs_ext_ssc,
2280         .num_regs = ARRAY_SIZE(cdns_pcie_cmn_regs_ext_ssc),
2281 };
2282
2283 static struct cdns_sierra_vals pcie_100_ext_ssc_ln_vals = {
2284         .reg_pairs = cdns_pcie_ln_regs_ext_ssc,
2285         .num_regs = ARRAY_SIZE(cdns_pcie_ln_regs_ext_ssc),
2286 };
2287
2288 /* refclk100MHz_20b_USB_cmn_pll_ext_ssc */
2289 static const struct cdns_reg_pairs cdns_usb_cmn_regs_ext_ssc[] = {
2290         {0x2085, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
2291         {0x2085, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
2292         {0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
2293         {0x0000, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG}
2294 };
2295
2296 /* refclk100MHz_20b_USB_ln_ext_ssc */
2297 static const struct cdns_reg_pairs cdns_usb_ln_regs_ext_ssc[] = {
2298         {0xFE0A, SIERRA_DET_STANDEC_A_PREG},
2299         {0x000F, SIERRA_DET_STANDEC_B_PREG},
2300         {0x55A5, SIERRA_DET_STANDEC_C_PREG},
2301         {0x69ad, SIERRA_DET_STANDEC_D_PREG},
2302         {0x0241, SIERRA_DET_STANDEC_E_PREG},
2303         {0x0110, SIERRA_PSM_LANECAL_DLY_A1_RESETS_PREG},
2304         {0x0014, SIERRA_PSM_A0IN_TMR_PREG},
2305         {0xCF00, SIERRA_PSM_DIAG_PREG},
2306         {0x001F, SIERRA_PSC_TX_A0_PREG},
2307         {0x0007, SIERRA_PSC_TX_A1_PREG},
2308         {0x0003, SIERRA_PSC_TX_A2_PREG},
2309         {0x0003, SIERRA_PSC_TX_A3_PREG},
2310         {0x0FFF, SIERRA_PSC_RX_A0_PREG},
2311         {0x0003, SIERRA_PSC_RX_A1_PREG},
2312         {0x0003, SIERRA_PSC_RX_A2_PREG},
2313         {0x0001, SIERRA_PSC_RX_A3_PREG},
2314         {0x0001, SIERRA_PLLCTRL_SUBRATE_PREG},
2315         {0x0406, SIERRA_PLLCTRL_GEN_D_PREG},
2316         {0x5233, SIERRA_PLLCTRL_CPGAIN_MODE_PREG},
2317         {0x00CA, SIERRA_CLKPATH_BIASTRIM_PREG},
2318         {0x2512, SIERRA_DFE_BIASTRIM_PREG},
2319         {0x0000, SIERRA_DRVCTRL_ATTEN_PREG},
2320         {0x823E, SIERRA_CLKPATHCTRL_TMR_PREG},
2321         {0x078F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
2322         {0x078F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
2323         {0x7B3C, SIERRA_CREQ_CCLKDET_MODE01_PREG},
2324         {0x023C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
2325         {0x3232, SIERRA_CREQ_FSMCLK_SEL_PREG},
2326         {0x0000, SIERRA_CREQ_EQ_CTRL_PREG},
2327         {0x0000, SIERRA_CREQ_SPARE_PREG},
2328         {0xCC44, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
2329         {0x8452, SIERRA_CTLELUT_CTRL_PREG},
2330         {0x4121, SIERRA_DFE_ECMP_RATESEL_PREG},
2331         {0x4121, SIERRA_DFE_SMP_RATESEL_PREG},
2332         {0x0003, SIERRA_DEQ_PHALIGN_CTRL},
2333         {0x3200, SIERRA_DEQ_CONCUR_CTRL1_PREG},
2334         {0x5064, SIERRA_DEQ_CONCUR_CTRL2_PREG},
2335         {0x0030, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
2336         {0x0048, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
2337         {0x5A5A, SIERRA_DEQ_ERRCMP_CTRL_PREG},
2338         {0x02F5, SIERRA_DEQ_OFFSET_CTRL_PREG},
2339         {0x02F5, SIERRA_DEQ_GAIN_CTRL_PREG},
2340         {0x9999, SIERRA_DEQ_VGATUNE_CTRL_PREG},
2341         {0x0014, SIERRA_DEQ_GLUT0},
2342         {0x0014, SIERRA_DEQ_GLUT1},
2343         {0x0014, SIERRA_DEQ_GLUT2},
2344         {0x0014, SIERRA_DEQ_GLUT3},
2345         {0x0014, SIERRA_DEQ_GLUT4},
2346         {0x0014, SIERRA_DEQ_GLUT5},
2347         {0x0014, SIERRA_DEQ_GLUT6},
2348         {0x0014, SIERRA_DEQ_GLUT7},
2349         {0x0014, SIERRA_DEQ_GLUT8},
2350         {0x0014, SIERRA_DEQ_GLUT9},
2351         {0x0014, SIERRA_DEQ_GLUT10},
2352         {0x0014, SIERRA_DEQ_GLUT11},
2353         {0x0014, SIERRA_DEQ_GLUT12},
2354         {0x0014, SIERRA_DEQ_GLUT13},
2355         {0x0014, SIERRA_DEQ_GLUT14},
2356         {0x0014, SIERRA_DEQ_GLUT15},
2357         {0x0014, SIERRA_DEQ_GLUT16},
2358         {0x0BAE, SIERRA_DEQ_ALUT0},
2359         {0x0AEB, SIERRA_DEQ_ALUT1},
2360         {0x0A28, SIERRA_DEQ_ALUT2},
2361         {0x0965, SIERRA_DEQ_ALUT3},
2362         {0x08A2, SIERRA_DEQ_ALUT4},
2363         {0x07DF, SIERRA_DEQ_ALUT5},
2364         {0x071C, SIERRA_DEQ_ALUT6},
2365         {0x0659, SIERRA_DEQ_ALUT7},
2366         {0x0596, SIERRA_DEQ_ALUT8},
2367         {0x0514, SIERRA_DEQ_ALUT9},
2368         {0x0492, SIERRA_DEQ_ALUT10},
2369         {0x0410, SIERRA_DEQ_ALUT11},
2370         {0x038E, SIERRA_DEQ_ALUT12},
2371         {0x030C, SIERRA_DEQ_ALUT13},
2372         {0x03F4, SIERRA_DEQ_DFETAP_CTRL_PREG},
2373         {0x0001, SIERRA_DFE_EN_1010_IGNORE_PREG},
2374         {0x3C01, SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG},
2375         {0x3C40, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
2376         {0x1C08, SIERRA_DEQ_TAU_CTRL2_PREG},
2377         {0x0033, SIERRA_DEQ_PICTRL_PREG},
2378         {0x0400, SIERRA_CPICAL_TMRVAL_MODE1_PREG},
2379         {0x0330, SIERRA_CPICAL_TMRVAL_MODE0_PREG},
2380         {0x01FF, SIERRA_CPICAL_PICNT_MODE1_PREG},
2381         {0x0009, SIERRA_CPI_OUTBUF_RATESEL_PREG},
2382         {0x3232, SIERRA_CPICAL_RES_STARTCODE_MODE23_PREG},
2383         {0x0005, SIERRA_LFPSDET_SUPPORT_PREG},
2384         {0x000F, SIERRA_LFPSFILT_NS_PREG},
2385         {0x0009, SIERRA_LFPSFILT_RD_PREG},
2386         {0x0001, SIERRA_LFPSFILT_MP_PREG},
2387         {0x6013, SIERRA_SIGDET_SUPPORT_PREG},
2388         {0x8013, SIERRA_SDFILT_H2L_A_PREG},
2389         {0x8009, SIERRA_SDFILT_L2H_PREG},
2390         {0x0024, SIERRA_RXBUFFER_CTLECTRL_PREG},
2391         {0x0020, SIERRA_RXBUFFER_RCDFECTRL_PREG},
2392         {0x4243, SIERRA_RXBUFFER_DFECTRL_PREG}
2393 };
2394
2395 static struct cdns_sierra_vals usb_100_ext_ssc_cmn_vals = {
2396         .reg_pairs = cdns_usb_cmn_regs_ext_ssc,
2397         .num_regs = ARRAY_SIZE(cdns_usb_cmn_regs_ext_ssc),
2398 };
2399
2400 static struct cdns_sierra_vals usb_100_ext_ssc_ln_vals = {
2401         .reg_pairs = cdns_usb_ln_regs_ext_ssc,
2402         .num_regs = ARRAY_SIZE(cdns_usb_ln_regs_ext_ssc),
2403 };
2404
2405 static const struct cdns_sierra_data cdns_map_sierra = {
2406         .id_value = SIERRA_MACRO_ID,
2407         .block_offset_shift = 0x2,
2408         .reg_offset_shift = 0x2,
2409         .pcs_cmn_vals = {
2410                 [TYPE_PCIE] = {
2411                         [TYPE_NONE] = {
2412                                 [NO_SSC] = &pcie_phy_pcs_cmn_vals,
2413                                 [EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2414                                 [INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2415                         },
2416                         [TYPE_SGMII] = {
2417                                 [NO_SSC] = &pcie_phy_pcs_cmn_vals,
2418                                 [EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2419                                 [INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2420                         },
2421                         [TYPE_QSGMII] = {
2422                                 [NO_SSC] = &pcie_phy_pcs_cmn_vals,
2423                                 [EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2424                                 [INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2425                         },
2426                 },
2427         },
2428         .pma_cmn_vals = {
2429                 [TYPE_PCIE] = {
2430                         [TYPE_NONE] = {
2431                                 [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
2432                                 [EXTERNAL_SSC] = &pcie_100_ext_ssc_cmn_vals,
2433                                 [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
2434                         },
2435                         [TYPE_SGMII] = {
2436                                 [NO_SSC] = &pcie_100_no_ssc_plllc_cmn_vals,
2437                                 [EXTERNAL_SSC] = &pcie_100_ext_ssc_plllc_cmn_vals,
2438                                 [INTERNAL_SSC] = &pcie_100_int_ssc_plllc_cmn_vals,
2439                         },
2440                         [TYPE_QSGMII] = {
2441                                 [NO_SSC] = &pcie_100_no_ssc_plllc_cmn_vals,
2442                                 [EXTERNAL_SSC] = &pcie_100_ext_ssc_plllc_cmn_vals,
2443                                 [INTERNAL_SSC] = &pcie_100_int_ssc_plllc_cmn_vals,
2444                         },
2445                 },
2446                 [TYPE_USB] = {
2447                         [TYPE_NONE] = {
2448                                 [EXTERNAL_SSC] = &usb_100_ext_ssc_cmn_vals,
2449                         },
2450                 },
2451                 [TYPE_SGMII] = {
2452                         [TYPE_PCIE] = {
2453                                 [NO_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
2454                                 [EXTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
2455                                 [INTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
2456                         },
2457                 },
2458                 [TYPE_QSGMII] = {
2459                         [TYPE_PCIE] = {
2460                                 [NO_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
2461                                 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
2462                                 [INTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
2463                         },
2464                 },
2465         },
2466         .pma_ln_vals = {
2467                 [TYPE_PCIE] = {
2468                         [TYPE_NONE] = {
2469                                 [NO_SSC] = &pcie_100_no_ssc_ln_vals,
2470                                 [EXTERNAL_SSC] = &pcie_100_ext_ssc_ln_vals,
2471                                 [INTERNAL_SSC] = &pcie_100_int_ssc_ln_vals,
2472                         },
2473                         [TYPE_SGMII] = {
2474                                 [NO_SSC] = &ml_pcie_100_no_ssc_ln_vals,
2475                                 [EXTERNAL_SSC] = &ml_pcie_100_ext_ssc_ln_vals,
2476                                 [INTERNAL_SSC] = &ml_pcie_100_int_ssc_ln_vals,
2477                         },
2478                         [TYPE_QSGMII] = {
2479                                 [NO_SSC] = &ml_pcie_100_no_ssc_ln_vals,
2480                                 [EXTERNAL_SSC] = &ml_pcie_100_ext_ssc_ln_vals,
2481                                 [INTERNAL_SSC] = &ml_pcie_100_int_ssc_ln_vals,
2482                         },
2483                 },
2484                 [TYPE_USB] = {
2485                         [TYPE_NONE] = {
2486                                 [EXTERNAL_SSC] = &usb_100_ext_ssc_ln_vals,
2487                         },
2488                 },
2489                 [TYPE_SGMII] = {
2490                         [TYPE_PCIE] = {
2491                                 [NO_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
2492                                 [EXTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
2493                                 [INTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
2494                         },
2495                 },
2496                 [TYPE_QSGMII] = {
2497                         [TYPE_PCIE] = {
2498                                 [NO_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
2499                                 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
2500                                 [INTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
2501                         },
2502                 },
2503         },
2504 };
2505
2506 static const struct cdns_sierra_data cdns_ti_map_sierra = {
2507         .id_value = SIERRA_MACRO_ID,
2508         .block_offset_shift = 0x0,
2509         .reg_offset_shift = 0x1,
2510         .pcs_cmn_vals = {
2511                 [TYPE_PCIE] = {
2512                         [TYPE_NONE] = {
2513                                 [NO_SSC] = &pcie_phy_pcs_cmn_vals,
2514                                 [EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2515                                 [INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2516                         },
2517                         [TYPE_SGMII] = {
2518                                 [NO_SSC] = &pcie_phy_pcs_cmn_vals,
2519                                 [EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2520                                 [INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2521                         },
2522                         [TYPE_QSGMII] = {
2523                                 [NO_SSC] = &pcie_phy_pcs_cmn_vals,
2524                                 [EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2525                                 [INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2526                         },
2527                 },
2528         },
2529         .phy_pma_ln_vals = {
2530                 [TYPE_SGMII] = {
2531                         [TYPE_PCIE] = {
2532                                 [NO_SSC] = &sgmii_phy_pma_ln_vals,
2533                                 [EXTERNAL_SSC] = &sgmii_phy_pma_ln_vals,
2534                                 [INTERNAL_SSC] = &sgmii_phy_pma_ln_vals,
2535                         },
2536                 },
2537                 [TYPE_QSGMII] = {
2538                         [TYPE_PCIE] = {
2539                                 [NO_SSC] = &qsgmii_phy_pma_ln_vals,
2540                                 [EXTERNAL_SSC] = &qsgmii_phy_pma_ln_vals,
2541                                 [INTERNAL_SSC] = &qsgmii_phy_pma_ln_vals,
2542                         },
2543                 },
2544         },
2545         .pma_cmn_vals = {
2546                 [TYPE_PCIE] = {
2547                         [TYPE_NONE] = {
2548                                 [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
2549                                 [EXTERNAL_SSC] = &pcie_100_ext_ssc_cmn_vals,
2550                                 [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
2551                         },
2552                         [TYPE_SGMII] = {
2553                                 [NO_SSC] = &pcie_100_no_ssc_plllc_cmn_vals,
2554                                 [EXTERNAL_SSC] = &pcie_100_ext_ssc_plllc_cmn_vals,
2555                                 [INTERNAL_SSC] = &pcie_100_int_ssc_plllc_cmn_vals,
2556                         },
2557                         [TYPE_QSGMII] = {
2558                                 [NO_SSC] = &pcie_100_no_ssc_plllc_cmn_vals,
2559                                 [EXTERNAL_SSC] = &pcie_100_ext_ssc_plllc_cmn_vals,
2560                                 [INTERNAL_SSC] = &pcie_100_int_ssc_plllc_cmn_vals,
2561                         },
2562                 },
2563                 [TYPE_USB] = {
2564                         [TYPE_NONE] = {
2565                                 [EXTERNAL_SSC] = &usb_100_ext_ssc_cmn_vals,
2566                         },
2567                 },
2568                 [TYPE_SGMII] = {
2569                         [TYPE_PCIE] = {
2570                                 [NO_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
2571                                 [EXTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
2572                                 [INTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
2573                         },
2574                 },
2575                 [TYPE_QSGMII] = {
2576                         [TYPE_PCIE] = {
2577                                 [NO_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
2578                                 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
2579                                 [INTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
2580                         },
2581                 },
2582         },
2583         .pma_ln_vals = {
2584                 [TYPE_PCIE] = {
2585                         [TYPE_NONE] = {
2586                                 [NO_SSC] = &pcie_100_no_ssc_ln_vals,
2587                                 [EXTERNAL_SSC] = &pcie_100_ext_ssc_ln_vals,
2588                                 [INTERNAL_SSC] = &pcie_100_int_ssc_ln_vals,
2589                         },
2590                         [TYPE_SGMII] = {
2591                                 [NO_SSC] = &ti_ml_pcie_100_no_ssc_ln_vals,
2592                                 [EXTERNAL_SSC] = &ti_ml_pcie_100_ext_ssc_ln_vals,
2593                                 [INTERNAL_SSC] = &ti_ml_pcie_100_int_ssc_ln_vals,
2594                         },
2595                         [TYPE_QSGMII] = {
2596                                 [NO_SSC] = &ti_ml_pcie_100_no_ssc_ln_vals,
2597                                 [EXTERNAL_SSC] = &ti_ml_pcie_100_ext_ssc_ln_vals,
2598                                 [INTERNAL_SSC] = &ti_ml_pcie_100_int_ssc_ln_vals,
2599                         },
2600                 },
2601                 [TYPE_USB] = {
2602                         [TYPE_NONE] = {
2603                                 [EXTERNAL_SSC] = &usb_100_ext_ssc_ln_vals,
2604                         },
2605                 },
2606                 [TYPE_SGMII] = {
2607                         [TYPE_PCIE] = {
2608                                 [NO_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
2609                                 [EXTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
2610                                 [INTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
2611                         },
2612                 },
2613                 [TYPE_QSGMII] = {
2614                         [TYPE_PCIE] = {
2615                                 [NO_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
2616                                 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
2617                                 [INTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
2618                         },
2619                 },
2620         },
2621 };
2622
2623 static const struct of_device_id cdns_sierra_id_table[] = {
2624         {
2625                 .compatible = "cdns,sierra-phy-t0",
2626                 .data = &cdns_map_sierra,
2627         },
2628         {
2629                 .compatible = "ti,sierra-phy-t0",
2630                 .data = &cdns_ti_map_sierra,
2631         },
2632         {}
2633 };
2634 MODULE_DEVICE_TABLE(of, cdns_sierra_id_table);
2635
2636 static struct platform_driver cdns_sierra_driver = {
2637         .probe          = cdns_sierra_phy_probe,
2638         .remove_new     = cdns_sierra_phy_remove,
2639         .driver         = {
2640                 .name   = "cdns-sierra-phy",
2641                 .of_match_table = cdns_sierra_id_table,
2642         },
2643 };
2644 module_platform_driver(cdns_sierra_driver);
2645
2646 MODULE_ALIAS("platform:cdns_sierra");
2647 MODULE_AUTHOR("Cadence Design Systems");
2648 MODULE_DESCRIPTION("CDNS sierra phy driver");
2649 MODULE_LICENSE("GPL v2");
This page took 0.194695 seconds and 4 git commands to generate.