Merge tag 'acpi-5.16-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[linux-2.6-microblaze.git] / drivers / phy / cadence / phy-cadence-torrent.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Cadence Torrent SD0801 PHY driver.
4  *
5  * Copyright 2018 Cadence Design Systems, Inc.
6  *
7  */
8
9 #include <dt-bindings/phy/phy.h>
10 #include <dt-bindings/phy/phy-cadence.h>
11 #include <linux/clk.h>
12 #include <linux/clk-provider.h>
13 #include <linux/delay.h>
14 #include <linux/err.h>
15 #include <linux/io.h>
16 #include <linux/iopoll.h>
17 #include <linux/kernel.h>
18 #include <linux/module.h>
19 #include <linux/of.h>
20 #include <linux/of_address.h>
21 #include <linux/of_device.h>
22 #include <linux/phy/phy.h>
23 #include <linux/platform_device.h>
24 #include <linux/reset.h>
25 #include <linux/regmap.h>
26
27 #define REF_CLK_19_2MHZ         19200000
28 #define REF_CLK_25MHZ           25000000
29 #define REF_CLK_100MHZ          100000000
30
31 #define MAX_NUM_LANES           4
32 #define DEFAULT_MAX_BIT_RATE    8100 /* in Mbps */
33
34 #define NUM_SSC_MODE            3
35 #define NUM_REF_CLK             3
36 #define NUM_PHY_TYPE            6
37
38 #define POLL_TIMEOUT_US         5000
39 #define PLL_LOCK_TIMEOUT        100000
40
41 #define TORRENT_COMMON_CDB_OFFSET       0x0
42
43 #define TORRENT_TX_LANE_CDB_OFFSET(ln, block_offset, reg_offset)        \
44                                 ((0x4000 << (block_offset)) +           \
45                                 (((ln) << 9) << (reg_offset)))
46
47 #define TORRENT_RX_LANE_CDB_OFFSET(ln, block_offset, reg_offset)        \
48                                 ((0x8000 << (block_offset)) +           \
49                                 (((ln) << 9) << (reg_offset)))
50
51 #define TORRENT_PHY_PCS_COMMON_OFFSET(block_offset)     \
52                                 (0xC000 << (block_offset))
53
54 #define TORRENT_PHY_PCS_LANE_CDB_OFFSET(ln, block_offset, reg_offset)   \
55                                 ((0xD000 << (block_offset)) +           \
56                                 (((ln) << 8) << (reg_offset)))
57
58 #define TORRENT_PHY_PMA_COMMON_OFFSET(block_offset)     \
59                                 (0xE000 << (block_offset))
60
61 #define TORRENT_DPTX_PHY_OFFSET         0x0
62
63 /*
64  * register offsets from DPTX PHY register block base (i.e MHDP
65  * register base + 0x30a00)
66  */
67 #define PHY_AUX_CTRL                    0x04
68 #define PHY_RESET                       0x20
69 #define PMA_TX_ELEC_IDLE_MASK           0xF0U
70 #define PMA_TX_ELEC_IDLE_SHIFT          4
71 #define PHY_L00_RESET_N_MASK            0x01U
72 #define PHY_PMA_XCVR_PLLCLK_EN          0x24
73 #define PHY_PMA_XCVR_PLLCLK_EN_ACK      0x28
74 #define PHY_PMA_XCVR_POWER_STATE_REQ    0x2c
75 #define PHY_POWER_STATE_LN_0    0x0000
76 #define PHY_POWER_STATE_LN_1    0x0008
77 #define PHY_POWER_STATE_LN_2    0x0010
78 #define PHY_POWER_STATE_LN_3    0x0018
79 #define PMA_XCVR_POWER_STATE_REQ_LN_MASK        0x3FU
80 #define PHY_PMA_XCVR_POWER_STATE_ACK    0x30
81 #define PHY_PMA_CMN_READY               0x34
82
83 /*
84  * register offsets from SD0801 PHY register block base (i.e MHDP
85  * register base + 0x500000)
86  */
87 #define CMN_SSM_BANDGAP_TMR             0x0021U
88 #define CMN_SSM_BIAS_TMR                0x0022U
89 #define CMN_PLLSM0_PLLPRE_TMR           0x002AU
90 #define CMN_PLLSM0_PLLLOCK_TMR          0x002CU
91 #define CMN_PLLSM1_PLLPRE_TMR           0x0032U
92 #define CMN_PLLSM1_PLLLOCK_TMR          0x0034U
93 #define CMN_CDIAG_CDB_PWRI_OVRD         0x0041U
94 #define CMN_CDIAG_XCVRC_PWRI_OVRD       0x0047U
95 #define CMN_CDIAG_REFCLK_OVRD           0x004CU
96 #define CMN_CDIAG_REFCLK_DRV0_CTRL      0x0050U
97 #define CMN_BGCAL_INIT_TMR              0x0064U
98 #define CMN_BGCAL_ITER_TMR              0x0065U
99 #define CMN_IBCAL_INIT_TMR              0x0074U
100 #define CMN_PLL0_VCOCAL_TCTRL           0x0082U
101 #define CMN_PLL0_VCOCAL_INIT_TMR        0x0084U
102 #define CMN_PLL0_VCOCAL_ITER_TMR        0x0085U
103 #define CMN_PLL0_VCOCAL_REFTIM_START    0x0086U
104 #define CMN_PLL0_VCOCAL_PLLCNT_START    0x0088U
105 #define CMN_PLL0_INTDIV_M0              0x0090U
106 #define CMN_PLL0_FRACDIVL_M0            0x0091U
107 #define CMN_PLL0_FRACDIVH_M0            0x0092U
108 #define CMN_PLL0_HIGH_THR_M0            0x0093U
109 #define CMN_PLL0_DSM_DIAG_M0            0x0094U
110 #define CMN_PLL0_DSM_FBH_OVRD_M0        0x0095U
111 #define CMN_PLL0_SS_CTRL1_M0            0x0098U
112 #define CMN_PLL0_SS_CTRL2_M0            0x0099U
113 #define CMN_PLL0_SS_CTRL3_M0            0x009AU
114 #define CMN_PLL0_SS_CTRL4_M0            0x009BU
115 #define CMN_PLL0_LOCK_REFCNT_START      0x009CU
116 #define CMN_PLL0_LOCK_PLLCNT_START      0x009EU
117 #define CMN_PLL0_LOCK_PLLCNT_THR        0x009FU
118 #define CMN_PLL0_INTDIV_M1              0x00A0U
119 #define CMN_PLL0_FRACDIVH_M1            0x00A2U
120 #define CMN_PLL0_HIGH_THR_M1            0x00A3U
121 #define CMN_PLL0_DSM_DIAG_M1            0x00A4U
122 #define CMN_PLL0_SS_CTRL1_M1            0x00A8U
123 #define CMN_PLL0_SS_CTRL2_M1            0x00A9U
124 #define CMN_PLL0_SS_CTRL3_M1            0x00AAU
125 #define CMN_PLL0_SS_CTRL4_M1            0x00ABU
126 #define CMN_PLL1_VCOCAL_TCTRL           0x00C2U
127 #define CMN_PLL1_VCOCAL_INIT_TMR        0x00C4U
128 #define CMN_PLL1_VCOCAL_ITER_TMR        0x00C5U
129 #define CMN_PLL1_VCOCAL_REFTIM_START    0x00C6U
130 #define CMN_PLL1_VCOCAL_PLLCNT_START    0x00C8U
131 #define CMN_PLL1_INTDIV_M0              0x00D0U
132 #define CMN_PLL1_FRACDIVL_M0            0x00D1U
133 #define CMN_PLL1_FRACDIVH_M0            0x00D2U
134 #define CMN_PLL1_HIGH_THR_M0            0x00D3U
135 #define CMN_PLL1_DSM_DIAG_M0            0x00D4U
136 #define CMN_PLL1_DSM_FBH_OVRD_M0        0x00D5U
137 #define CMN_PLL1_DSM_FBL_OVRD_M0        0x00D6U
138 #define CMN_PLL1_SS_CTRL1_M0            0x00D8U
139 #define CMN_PLL1_SS_CTRL2_M0            0x00D9U
140 #define CMN_PLL1_SS_CTRL3_M0            0x00DAU
141 #define CMN_PLL1_SS_CTRL4_M0            0x00DBU
142 #define CMN_PLL1_LOCK_REFCNT_START      0x00DCU
143 #define CMN_PLL1_LOCK_PLLCNT_START      0x00DEU
144 #define CMN_PLL1_LOCK_PLLCNT_THR        0x00DFU
145 #define CMN_TXPUCAL_TUNE                0x0103U
146 #define CMN_TXPUCAL_INIT_TMR            0x0104U
147 #define CMN_TXPUCAL_ITER_TMR            0x0105U
148 #define CMN_TXPDCAL_TUNE                0x010BU
149 #define CMN_TXPDCAL_INIT_TMR            0x010CU
150 #define CMN_TXPDCAL_ITER_TMR            0x010DU
151 #define CMN_RXCAL_INIT_TMR              0x0114U
152 #define CMN_RXCAL_ITER_TMR              0x0115U
153 #define CMN_SD_CAL_INIT_TMR             0x0124U
154 #define CMN_SD_CAL_ITER_TMR             0x0125U
155 #define CMN_SD_CAL_REFTIM_START         0x0126U
156 #define CMN_SD_CAL_PLLCNT_START         0x0128U
157 #define CMN_PDIAG_PLL0_CTRL_M0          0x01A0U
158 #define CMN_PDIAG_PLL0_CLK_SEL_M0       0x01A1U
159 #define CMN_PDIAG_PLL0_CP_PADJ_M0       0x01A4U
160 #define CMN_PDIAG_PLL0_CP_IADJ_M0       0x01A5U
161 #define CMN_PDIAG_PLL0_FILT_PADJ_M0     0x01A6U
162 #define CMN_PDIAG_PLL0_CTRL_M1          0x01B0U
163 #define CMN_PDIAG_PLL0_CLK_SEL_M1       0x01B1U
164 #define CMN_PDIAG_PLL0_CP_PADJ_M1       0x01B4U
165 #define CMN_PDIAG_PLL0_CP_IADJ_M1       0x01B5U
166 #define CMN_PDIAG_PLL0_FILT_PADJ_M1     0x01B6U
167 #define CMN_PDIAG_PLL1_CTRL_M0          0x01C0U
168 #define CMN_PDIAG_PLL1_CLK_SEL_M0       0x01C1U
169 #define CMN_PDIAG_PLL1_CP_PADJ_M0       0x01C4U
170 #define CMN_PDIAG_PLL1_CP_IADJ_M0       0x01C5U
171 #define CMN_PDIAG_PLL1_FILT_PADJ_M0     0x01C6U
172 #define CMN_DIAG_BIAS_OVRD1             0x01E1U
173
174 /* PMA TX Lane registers */
175 #define TX_TXCC_CTRL                    0x0040U
176 #define TX_TXCC_CPOST_MULT_00           0x004CU
177 #define TX_TXCC_CPOST_MULT_01           0x004DU
178 #define TX_TXCC_MGNFS_MULT_000          0x0050U
179 #define TX_TXCC_MGNFS_MULT_100          0x0054U
180 #define DRV_DIAG_TX_DRV                 0x00C6U
181 #define XCVR_DIAG_PLLDRC_CTRL           0x00E5U
182 #define XCVR_DIAG_HSCLK_SEL             0x00E6U
183 #define XCVR_DIAG_HSCLK_DIV             0x00E7U
184 #define XCVR_DIAG_RXCLK_CTRL            0x00E9U
185 #define XCVR_DIAG_BIDI_CTRL             0x00EAU
186 #define XCVR_DIAG_PSC_OVRD              0x00EBU
187 #define TX_PSC_A0                       0x0100U
188 #define TX_PSC_A1                       0x0101U
189 #define TX_PSC_A2                       0x0102U
190 #define TX_PSC_A3                       0x0103U
191 #define TX_RCVDET_ST_TMR                0x0123U
192 #define TX_DIAG_ACYA                    0x01E7U
193 #define TX_DIAG_ACYA_HBDC_MASK          0x0001U
194
195 /* PMA RX Lane registers */
196 #define RX_PSC_A0                       0x0000U
197 #define RX_PSC_A1                       0x0001U
198 #define RX_PSC_A2                       0x0002U
199 #define RX_PSC_A3                       0x0003U
200 #define RX_PSC_CAL                      0x0006U
201 #define RX_CDRLF_CNFG                   0x0080U
202 #define RX_CDRLF_CNFG3                  0x0082U
203 #define RX_SIGDET_HL_FILT_TMR           0x0090U
204 #define RX_REE_GCSM1_CTRL               0x0108U
205 #define RX_REE_GCSM1_EQENM_PH1          0x0109U
206 #define RX_REE_GCSM1_EQENM_PH2          0x010AU
207 #define RX_REE_GCSM2_CTRL               0x0110U
208 #define RX_REE_PERGCSM_CTRL             0x0118U
209 #define RX_REE_ATTEN_THR                0x0149U
210 #define RX_REE_TAP1_CLIP                0x0171U
211 #define RX_REE_TAP2TON_CLIP             0x0172U
212 #define RX_REE_SMGM_CTRL1               0x0177U
213 #define RX_REE_SMGM_CTRL2               0x0178U
214 #define RX_DIAG_DFE_CTRL                0x01E0U
215 #define RX_DIAG_DFE_AMP_TUNE_2          0x01E2U
216 #define RX_DIAG_DFE_AMP_TUNE_3          0x01E3U
217 #define RX_DIAG_NQST_CTRL               0x01E5U
218 #define RX_DIAG_SIGDET_TUNE             0x01E8U
219 #define RX_DIAG_PI_RATE                 0x01F4U
220 #define RX_DIAG_PI_CAP                  0x01F5U
221 #define RX_DIAG_ACYA                    0x01FFU
222
223 /* PHY PCS common registers */
224 #define PHY_PIPE_CMN_CTRL1              0x0000U
225 #define PHY_PLL_CFG                     0x000EU
226 #define PHY_PIPE_USB3_GEN2_PRE_CFG0     0x0020U
227 #define PHY_PIPE_USB3_GEN2_POST_CFG0    0x0022U
228 #define PHY_PIPE_USB3_GEN2_POST_CFG1    0x0023U
229
230 /* PHY PCS lane registers */
231 #define PHY_PCS_ISO_LINK_CTRL           0x000BU
232
233 /* PHY PMA common registers */
234 #define PHY_PMA_CMN_CTRL1               0x0000U
235 #define PHY_PMA_CMN_CTRL2               0x0001U
236 #define PHY_PMA_PLL_RAW_CTRL            0x0003U
237
238 #define CDNS_TORRENT_OUTPUT_CLOCKS      3
239
240 static const char * const clk_names[] = {
241         [CDNS_TORRENT_REFCLK_DRIVER] = "refclk-driver",
242         [CDNS_TORRENT_DERIVED_REFCLK] = "refclk-der",
243         [CDNS_TORRENT_RECEIVED_REFCLK] = "refclk-rec",
244 };
245
246 static const struct reg_field phy_pll_cfg =
247                                 REG_FIELD(PHY_PLL_CFG, 0, 1);
248
249 static const struct reg_field phy_pma_cmn_ctrl_1 =
250                                 REG_FIELD(PHY_PMA_CMN_CTRL1, 0, 0);
251
252 static const struct reg_field phy_pma_cmn_ctrl_2 =
253                                 REG_FIELD(PHY_PMA_CMN_CTRL2, 0, 7);
254
255 static const struct reg_field phy_pma_pll_raw_ctrl =
256                                 REG_FIELD(PHY_PMA_PLL_RAW_CTRL, 0, 1);
257
258 static const struct reg_field phy_reset_ctrl =
259                                 REG_FIELD(PHY_RESET, 8, 8);
260
261 static const struct reg_field phy_pcs_iso_link_ctrl_1 =
262                                 REG_FIELD(PHY_PCS_ISO_LINK_CTRL, 1, 1);
263
264 static const struct reg_field phy_pipe_cmn_ctrl1_0 = REG_FIELD(PHY_PIPE_CMN_CTRL1, 0, 0);
265
266 static const struct reg_field cmn_cdiag_refclk_ovrd_4 =
267                                 REG_FIELD(CMN_CDIAG_REFCLK_OVRD, 4, 4);
268
269 #define REFCLK_OUT_NUM_CMN_CONFIG       4
270
271 enum cdns_torrent_refclk_out_cmn {
272         CMN_CDIAG_REFCLK_DRV0_CTRL_1,
273         CMN_CDIAG_REFCLK_DRV0_CTRL_4,
274         CMN_CDIAG_REFCLK_DRV0_CTRL_5,
275         CMN_CDIAG_REFCLK_DRV0_CTRL_6,
276 };
277
278 static const struct reg_field refclk_out_cmn_cfg[] = {
279         [CMN_CDIAG_REFCLK_DRV0_CTRL_1]  = REG_FIELD(CMN_CDIAG_REFCLK_DRV0_CTRL, 1, 1),
280         [CMN_CDIAG_REFCLK_DRV0_CTRL_4]  = REG_FIELD(CMN_CDIAG_REFCLK_DRV0_CTRL, 4, 4),
281         [CMN_CDIAG_REFCLK_DRV0_CTRL_5]  = REG_FIELD(CMN_CDIAG_REFCLK_DRV0_CTRL, 5, 5),
282         [CMN_CDIAG_REFCLK_DRV0_CTRL_6]  = REG_FIELD(CMN_CDIAG_REFCLK_DRV0_CTRL, 6, 6),
283 };
284
285 static const int refclk_driver_parent_index[] = {
286         CDNS_TORRENT_DERIVED_REFCLK,
287         CDNS_TORRENT_RECEIVED_REFCLK
288 };
289
290 static u32 cdns_torrent_refclk_driver_mux_table[] = { 1, 0 };
291
292 enum cdns_torrent_phy_type {
293         TYPE_NONE,
294         TYPE_DP,
295         TYPE_PCIE,
296         TYPE_SGMII,
297         TYPE_QSGMII,
298         TYPE_USB,
299 };
300
301 enum cdns_torrent_ref_clk {
302         CLK_19_2_MHZ,
303         CLK_25_MHZ,
304         CLK_100_MHZ
305 };
306
307 enum cdns_torrent_ssc_mode {
308         NO_SSC,
309         EXTERNAL_SSC,
310         INTERNAL_SSC
311 };
312
313 struct cdns_torrent_inst {
314         struct phy *phy;
315         u32 mlane;
316         enum cdns_torrent_phy_type phy_type;
317         u32 num_lanes;
318         struct reset_control *lnk_rst;
319         enum cdns_torrent_ssc_mode ssc_mode;
320 };
321
322 struct cdns_torrent_phy {
323         void __iomem *base;     /* DPTX registers base */
324         void __iomem *sd_base; /* SD0801 registers base */
325         u32 max_bit_rate; /* Maximum link bit rate to use (in Mbps) */
326         struct reset_control *phy_rst;
327         struct reset_control *apb_rst;
328         struct device *dev;
329         struct clk *clk;
330         enum cdns_torrent_ref_clk ref_clk_rate;
331         struct cdns_torrent_inst phys[MAX_NUM_LANES];
332         int nsubnodes;
333         const struct cdns_torrent_data *init_data;
334         struct regmap *regmap;
335         struct regmap *regmap_common_cdb;
336         struct regmap *regmap_phy_pcs_common_cdb;
337         struct regmap *regmap_phy_pma_common_cdb;
338         struct regmap *regmap_tx_lane_cdb[MAX_NUM_LANES];
339         struct regmap *regmap_rx_lane_cdb[MAX_NUM_LANES];
340         struct regmap *regmap_phy_pcs_lane_cdb[MAX_NUM_LANES];
341         struct regmap *regmap_dptx_phy_reg;
342         struct regmap_field *phy_pll_cfg;
343         struct regmap_field *phy_pipe_cmn_ctrl1_0;
344         struct regmap_field *cmn_cdiag_refclk_ovrd_4;
345         struct regmap_field *phy_pma_cmn_ctrl_1;
346         struct regmap_field *phy_pma_cmn_ctrl_2;
347         struct regmap_field *phy_pma_pll_raw_ctrl;
348         struct regmap_field *phy_reset_ctrl;
349         struct regmap_field *phy_pcs_iso_link_ctrl_1[MAX_NUM_LANES];
350         struct clk_hw_onecell_data *clk_hw_data;
351 };
352
353 enum phy_powerstate {
354         POWERSTATE_A0 = 0,
355         /* Powerstate A1 is unused */
356         POWERSTATE_A2 = 2,
357         POWERSTATE_A3 = 3,
358 };
359
360 struct cdns_torrent_refclk_driver {
361         struct clk_hw           hw;
362         struct regmap_field     *cmn_fields[REFCLK_OUT_NUM_CMN_CONFIG];
363         struct clk_init_data    clk_data;
364 };
365
366 #define to_cdns_torrent_refclk_driver(_hw)      \
367                         container_of(_hw, struct cdns_torrent_refclk_driver, hw)
368
369 struct cdns_torrent_derived_refclk {
370         struct clk_hw           hw;
371         struct regmap_field     *phy_pipe_cmn_ctrl1_0;
372         struct regmap_field     *cmn_cdiag_refclk_ovrd_4;
373         struct clk_init_data    clk_data;
374 };
375
376 #define to_cdns_torrent_derived_refclk(_hw)     \
377                         container_of(_hw, struct cdns_torrent_derived_refclk, hw)
378
379 struct cdns_torrent_received_refclk {
380         struct clk_hw           hw;
381         struct regmap_field     *phy_pipe_cmn_ctrl1_0;
382         struct regmap_field     *cmn_cdiag_refclk_ovrd_4;
383         struct clk_init_data    clk_data;
384 };
385
386 #define to_cdns_torrent_received_refclk(_hw)    \
387                         container_of(_hw, struct cdns_torrent_received_refclk, hw)
388
389 struct cdns_reg_pairs {
390         u32 val;
391         u32 off;
392 };
393
394 struct cdns_torrent_vals {
395         struct cdns_reg_pairs *reg_pairs;
396         u32 num_regs;
397 };
398
399 struct cdns_torrent_data {
400         u8 block_offset_shift;
401         u8 reg_offset_shift;
402         struct cdns_torrent_vals *link_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
403                                                [NUM_SSC_MODE];
404         struct cdns_torrent_vals *xcvr_diag_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
405                                                 [NUM_SSC_MODE];
406         struct cdns_torrent_vals *pcs_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
407                                               [NUM_SSC_MODE];
408         struct cdns_torrent_vals *cmn_vals[NUM_REF_CLK][NUM_PHY_TYPE]
409                                           [NUM_PHY_TYPE][NUM_SSC_MODE];
410         struct cdns_torrent_vals *tx_ln_vals[NUM_REF_CLK][NUM_PHY_TYPE]
411                                             [NUM_PHY_TYPE][NUM_SSC_MODE];
412         struct cdns_torrent_vals *rx_ln_vals[NUM_REF_CLK][NUM_PHY_TYPE]
413                                             [NUM_PHY_TYPE][NUM_SSC_MODE];
414 };
415
416 struct cdns_regmap_cdb_context {
417         struct device *dev;
418         void __iomem *base;
419         u8 reg_offset_shift;
420 };
421
422 static int cdns_regmap_write(void *context, unsigned int reg, unsigned int val)
423 {
424         struct cdns_regmap_cdb_context *ctx = context;
425         u32 offset = reg << ctx->reg_offset_shift;
426
427         writew(val, ctx->base + offset);
428
429         return 0;
430 }
431
432 static int cdns_regmap_read(void *context, unsigned int reg, unsigned int *val)
433 {
434         struct cdns_regmap_cdb_context *ctx = context;
435         u32 offset = reg << ctx->reg_offset_shift;
436
437         *val = readw(ctx->base + offset);
438         return 0;
439 }
440
441 static int cdns_regmap_dptx_write(void *context, unsigned int reg,
442                                   unsigned int val)
443 {
444         struct cdns_regmap_cdb_context *ctx = context;
445         u32 offset = reg;
446
447         writel(val, ctx->base + offset);
448
449         return 0;
450 }
451
452 static int cdns_regmap_dptx_read(void *context, unsigned int reg,
453                                  unsigned int *val)
454 {
455         struct cdns_regmap_cdb_context *ctx = context;
456         u32 offset = reg;
457
458         *val = readl(ctx->base + offset);
459         return 0;
460 }
461
462 #define TORRENT_TX_LANE_CDB_REGMAP_CONF(n) \
463 { \
464         .name = "torrent_tx_lane" n "_cdb", \
465         .reg_stride = 1, \
466         .fast_io = true, \
467         .reg_write = cdns_regmap_write, \
468         .reg_read = cdns_regmap_read, \
469 }
470
471 #define TORRENT_RX_LANE_CDB_REGMAP_CONF(n) \
472 { \
473         .name = "torrent_rx_lane" n "_cdb", \
474         .reg_stride = 1, \
475         .fast_io = true, \
476         .reg_write = cdns_regmap_write, \
477         .reg_read = cdns_regmap_read, \
478 }
479
480 static const struct regmap_config cdns_torrent_tx_lane_cdb_config[] = {
481         TORRENT_TX_LANE_CDB_REGMAP_CONF("0"),
482         TORRENT_TX_LANE_CDB_REGMAP_CONF("1"),
483         TORRENT_TX_LANE_CDB_REGMAP_CONF("2"),
484         TORRENT_TX_LANE_CDB_REGMAP_CONF("3"),
485 };
486
487 static const struct regmap_config cdns_torrent_rx_lane_cdb_config[] = {
488         TORRENT_RX_LANE_CDB_REGMAP_CONF("0"),
489         TORRENT_RX_LANE_CDB_REGMAP_CONF("1"),
490         TORRENT_RX_LANE_CDB_REGMAP_CONF("2"),
491         TORRENT_RX_LANE_CDB_REGMAP_CONF("3"),
492 };
493
494 static const struct regmap_config cdns_torrent_common_cdb_config = {
495         .name = "torrent_common_cdb",
496         .reg_stride = 1,
497         .fast_io = true,
498         .reg_write = cdns_regmap_write,
499         .reg_read = cdns_regmap_read,
500 };
501
502 #define TORRENT_PHY_PCS_LANE_CDB_REGMAP_CONF(n) \
503 { \
504         .name = "torrent_phy_pcs_lane" n "_cdb", \
505         .reg_stride = 1, \
506         .fast_io = true, \
507         .reg_write = cdns_regmap_write, \
508         .reg_read = cdns_regmap_read, \
509 }
510
511 static const struct regmap_config cdns_torrent_phy_pcs_lane_cdb_config[] = {
512         TORRENT_PHY_PCS_LANE_CDB_REGMAP_CONF("0"),
513         TORRENT_PHY_PCS_LANE_CDB_REGMAP_CONF("1"),
514         TORRENT_PHY_PCS_LANE_CDB_REGMAP_CONF("2"),
515         TORRENT_PHY_PCS_LANE_CDB_REGMAP_CONF("3"),
516 };
517
518 static const struct regmap_config cdns_torrent_phy_pcs_cmn_cdb_config = {
519         .name = "torrent_phy_pcs_cmn_cdb",
520         .reg_stride = 1,
521         .fast_io = true,
522         .reg_write = cdns_regmap_write,
523         .reg_read = cdns_regmap_read,
524 };
525
526 static const struct regmap_config cdns_torrent_phy_pma_cmn_cdb_config = {
527         .name = "torrent_phy_pma_cmn_cdb",
528         .reg_stride = 1,
529         .fast_io = true,
530         .reg_write = cdns_regmap_write,
531         .reg_read = cdns_regmap_read,
532 };
533
534 static const struct regmap_config cdns_torrent_dptx_phy_config = {
535         .name = "torrent_dptx_phy",
536         .reg_stride = 1,
537         .fast_io = true,
538         .reg_write = cdns_regmap_dptx_write,
539         .reg_read = cdns_regmap_dptx_read,
540 };
541
542 /* PHY mmr access functions */
543
544 static void cdns_torrent_phy_write(struct regmap *regmap, u32 offset, u32 val)
545 {
546         regmap_write(regmap, offset, val);
547 }
548
549 static u32 cdns_torrent_phy_read(struct regmap *regmap, u32 offset)
550 {
551         unsigned int val;
552
553         regmap_read(regmap, offset, &val);
554         return val;
555 }
556
557 /* DPTX mmr access functions */
558
559 static void cdns_torrent_dp_write(struct regmap *regmap, u32 offset, u32 val)
560 {
561         regmap_write(regmap, offset, val);
562 }
563
564 static u32 cdns_torrent_dp_read(struct regmap *regmap, u32 offset)
565 {
566         u32 val;
567
568         regmap_read(regmap, offset, &val);
569         return val;
570 }
571
572 /*
573  * Structure used to store values of PHY registers for voltage-related
574  * coefficients, for particular voltage swing and pre-emphasis level. Values
575  * are shared across all physical lanes.
576  */
577 struct coefficients {
578         /* Value of DRV_DIAG_TX_DRV register to use */
579         u16 diag_tx_drv;
580         /* Value of TX_TXCC_MGNFS_MULT_000 register to use */
581         u16 mgnfs_mult;
582         /* Value of TX_TXCC_CPOST_MULT_00 register to use */
583         u16 cpost_mult;
584 };
585
586 /*
587  * Array consists of values of voltage-related registers for sd0801 PHY. A value
588  * of 0xFFFF is a placeholder for invalid combination, and will never be used.
589  */
590 static const struct coefficients vltg_coeff[4][4] = {
591         /* voltage swing 0, pre-emphasis 0->3 */
592         {       {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x002A,
593                  .cpost_mult = 0x0000},
594                 {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x001F,
595                  .cpost_mult = 0x0014},
596                 {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x0012,
597                  .cpost_mult = 0x0020},
598                 {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x0000,
599                  .cpost_mult = 0x002A}
600         },
601
602         /* voltage swing 1, pre-emphasis 0->3 */
603         {       {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x001F,
604                  .cpost_mult = 0x0000},
605                 {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x0013,
606                  .cpost_mult = 0x0012},
607                 {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x0000,
608                  .cpost_mult = 0x001F},
609                 {.diag_tx_drv = 0xFFFF, .mgnfs_mult = 0xFFFF,
610                  .cpost_mult = 0xFFFF}
611         },
612
613         /* voltage swing 2, pre-emphasis 0->3 */
614         {       {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x0013,
615                  .cpost_mult = 0x0000},
616                 {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x0000,
617                  .cpost_mult = 0x0013},
618                 {.diag_tx_drv = 0xFFFF, .mgnfs_mult = 0xFFFF,
619                  .cpost_mult = 0xFFFF},
620                 {.diag_tx_drv = 0xFFFF, .mgnfs_mult = 0xFFFF,
621                  .cpost_mult = 0xFFFF}
622         },
623
624         /* voltage swing 3, pre-emphasis 0->3 */
625         {       {.diag_tx_drv = 0x0003, .mgnfs_mult = 0x0000,
626                  .cpost_mult = 0x0000},
627                 {.diag_tx_drv = 0xFFFF, .mgnfs_mult = 0xFFFF,
628                  .cpost_mult = 0xFFFF},
629                 {.diag_tx_drv = 0xFFFF, .mgnfs_mult = 0xFFFF,
630                  .cpost_mult = 0xFFFF},
631                 {.diag_tx_drv = 0xFFFF, .mgnfs_mult = 0xFFFF,
632                  .cpost_mult = 0xFFFF}
633         }
634 };
635
636 static const char *cdns_torrent_get_phy_type(enum cdns_torrent_phy_type phy_type)
637 {
638         switch (phy_type) {
639         case TYPE_DP:
640                 return "DisplayPort";
641         case TYPE_PCIE:
642                 return "PCIe";
643         case TYPE_SGMII:
644                 return "SGMII";
645         case TYPE_QSGMII:
646                 return "QSGMII";
647         case TYPE_USB:
648                 return "USB";
649         default:
650                 return "None";
651         }
652 }
653
654 /*
655  * Set registers responsible for enabling and configuring SSC, with second and
656  * third register values provided by parameters.
657  */
658 static
659 void cdns_torrent_dp_enable_ssc_19_2mhz(struct cdns_torrent_phy *cdns_phy,
660                                         u32 ctrl2_val, u32 ctrl3_val)
661 {
662         struct regmap *regmap = cdns_phy->regmap_common_cdb;
663
664         cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL1_M0, 0x0001);
665         cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL1_M0, ctrl2_val);
666         cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL1_M0, ctrl3_val);
667         cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL4_M0, 0x0003);
668         cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL1_M0, 0x0001);
669         cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL1_M0, ctrl2_val);
670         cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL1_M0, ctrl3_val);
671         cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL4_M0, 0x0003);
672 }
673
674 static
675 void cdns_torrent_dp_pma_cmn_vco_cfg_19_2mhz(struct cdns_torrent_phy *cdns_phy,
676                                              u32 rate, bool ssc)
677 {
678         struct regmap *regmap = cdns_phy->regmap_common_cdb;
679
680         /* Assumes 19.2 MHz refclock */
681         switch (rate) {
682         /* Setting VCO for 10.8GHz */
683         case 2700:
684         case 5400:
685                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x0119);
686                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0x4000);
687                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
688                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x00BC);
689                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CTRL_M0, 0x0012);
690                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x0119);
691                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0x4000);
692                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
693                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x00BC);
694                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CTRL_M0, 0x0012);
695                 if (ssc)
696                         cdns_torrent_dp_enable_ssc_19_2mhz(cdns_phy, 0x033A, 0x006A);
697                 break;
698         /* Setting VCO for 9.72GHz */
699         case 1620:
700         case 2430:
701         case 3240:
702                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x01FA);
703                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0x4000);
704                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
705                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x0152);
706                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CTRL_M0, 0x0002);
707                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x01FA);
708                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0x4000);
709                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
710                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x0152);
711                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CTRL_M0, 0x0002);
712                 if (ssc)
713                         cdns_torrent_dp_enable_ssc_19_2mhz(cdns_phy, 0x05DD, 0x0069);
714                 break;
715         /* Setting VCO for 8.64GHz */
716         case 2160:
717         case 4320:
718                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x01C2);
719                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0x0000);
720                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
721                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x012C);
722                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CTRL_M0, 0x0002);
723                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x01C2);
724                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0x0000);
725                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
726                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x012C);
727                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CTRL_M0, 0x0002);
728                 if (ssc)
729                         cdns_torrent_dp_enable_ssc_19_2mhz(cdns_phy, 0x0536, 0x0069);
730                 break;
731         /* Setting VCO for 8.1GHz */
732         case 8100:
733                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x01A5);
734                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0xE000);
735                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
736                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x011A);
737                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CTRL_M0, 0x0002);
738                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x01A5);
739                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0xE000);
740                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
741                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x011A);
742                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CTRL_M0, 0x0002);
743                 if (ssc)
744                         cdns_torrent_dp_enable_ssc_19_2mhz(cdns_phy, 0x04D7, 0x006A);
745                 break;
746         }
747
748         if (ssc) {
749                 cdns_torrent_phy_write(regmap, CMN_PLL0_VCOCAL_PLLCNT_START, 0x025E);
750                 cdns_torrent_phy_write(regmap, CMN_PLL0_LOCK_PLLCNT_THR, 0x0005);
751                 cdns_torrent_phy_write(regmap, CMN_PLL1_VCOCAL_PLLCNT_START, 0x025E);
752                 cdns_torrent_phy_write(regmap, CMN_PLL1_LOCK_PLLCNT_THR, 0x0005);
753         } else {
754                 cdns_torrent_phy_write(regmap, CMN_PLL0_VCOCAL_PLLCNT_START, 0x0260);
755                 cdns_torrent_phy_write(regmap, CMN_PLL1_VCOCAL_PLLCNT_START, 0x0260);
756                 /* Set reset register values to disable SSC */
757                 cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL1_M0, 0x0002);
758                 cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL2_M0, 0x0000);
759                 cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL3_M0, 0x0000);
760                 cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL4_M0, 0x0000);
761                 cdns_torrent_phy_write(regmap, CMN_PLL0_LOCK_PLLCNT_THR, 0x0003);
762                 cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL1_M0, 0x0002);
763                 cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL2_M0, 0x0000);
764                 cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL3_M0, 0x0000);
765                 cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL4_M0, 0x0000);
766                 cdns_torrent_phy_write(regmap, CMN_PLL1_LOCK_PLLCNT_THR, 0x0003);
767         }
768
769         cdns_torrent_phy_write(regmap, CMN_PLL0_LOCK_REFCNT_START, 0x0099);
770         cdns_torrent_phy_write(regmap, CMN_PLL0_LOCK_PLLCNT_START, 0x0099);
771         cdns_torrent_phy_write(regmap, CMN_PLL1_LOCK_REFCNT_START, 0x0099);
772         cdns_torrent_phy_write(regmap, CMN_PLL1_LOCK_PLLCNT_START, 0x0099);
773 }
774
775 /*
776  * Set registers responsible for enabling and configuring SSC, with second
777  * register value provided by a parameter.
778  */
779 static void cdns_torrent_dp_enable_ssc_25mhz(struct cdns_torrent_phy *cdns_phy,
780                                              u32 ctrl2_val)
781 {
782         struct regmap *regmap = cdns_phy->regmap_common_cdb;
783
784         cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL1_M0, 0x0001);
785         cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL1_M0, ctrl2_val);
786         cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL1_M0, 0x007F);
787         cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL4_M0, 0x0003);
788         cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL1_M0, 0x0001);
789         cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL1_M0, ctrl2_val);
790         cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL1_M0, 0x007F);
791         cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL4_M0, 0x0003);
792 }
793
794 static
795 void cdns_torrent_dp_pma_cmn_vco_cfg_25mhz(struct cdns_torrent_phy *cdns_phy,
796                                            u32 rate, bool ssc)
797 {
798         struct regmap *regmap = cdns_phy->regmap_common_cdb;
799
800         /* Assumes 25 MHz refclock */
801         switch (rate) {
802         /* Setting VCO for 10.8GHz */
803         case 2700:
804         case 5400:
805                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x01B0);
806                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0x0000);
807                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
808                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x0120);
809                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x01B0);
810                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0x0000);
811                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
812                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x0120);
813                 if (ssc)
814                         cdns_torrent_dp_enable_ssc_25mhz(cdns_phy, 0x0423);
815                 break;
816         /* Setting VCO for 9.72GHz */
817         case 1620:
818         case 2430:
819         case 3240:
820                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x0184);
821                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0xCCCD);
822                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
823                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x0104);
824                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x0184);
825                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0xCCCD);
826                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
827                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x0104);
828                 if (ssc)
829                         cdns_torrent_dp_enable_ssc_25mhz(cdns_phy, 0x03B9);
830                 break;
831         /* Setting VCO for 8.64GHz */
832         case 2160:
833         case 4320:
834                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x0159);
835                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0x999A);
836                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
837                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x00E7);
838                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x0159);
839                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0x999A);
840                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
841                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x00E7);
842                 if (ssc)
843                         cdns_torrent_dp_enable_ssc_25mhz(cdns_phy, 0x034F);
844                 break;
845         /* Setting VCO for 8.1GHz */
846         case 8100:
847                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x0144);
848                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0x0000);
849                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
850                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x00D8);
851                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x0144);
852                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0x0000);
853                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
854                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x00D8);
855                 if (ssc)
856                         cdns_torrent_dp_enable_ssc_25mhz(cdns_phy, 0x031A);
857                 break;
858         }
859
860         cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CTRL_M0, 0x0002);
861         cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CTRL_M0, 0x0002);
862
863         if (ssc) {
864                 cdns_torrent_phy_write(regmap,
865                                        CMN_PLL0_VCOCAL_PLLCNT_START, 0x0315);
866                 cdns_torrent_phy_write(regmap,
867                                        CMN_PLL0_LOCK_PLLCNT_THR, 0x0005);
868                 cdns_torrent_phy_write(regmap,
869                                        CMN_PLL1_VCOCAL_PLLCNT_START, 0x0315);
870                 cdns_torrent_phy_write(regmap,
871                                        CMN_PLL1_LOCK_PLLCNT_THR, 0x0005);
872         } else {
873                 cdns_torrent_phy_write(regmap,
874                                        CMN_PLL0_VCOCAL_PLLCNT_START, 0x0317);
875                 cdns_torrent_phy_write(regmap,
876                                        CMN_PLL1_VCOCAL_PLLCNT_START, 0x0317);
877                 /* Set reset register values to disable SSC */
878                 cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL1_M0, 0x0002);
879                 cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL2_M0, 0x0000);
880                 cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL3_M0, 0x0000);
881                 cdns_torrent_phy_write(regmap, CMN_PLL0_SS_CTRL4_M0, 0x0000);
882                 cdns_torrent_phy_write(regmap,
883                                        CMN_PLL0_LOCK_PLLCNT_THR, 0x0003);
884                 cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL1_M0, 0x0002);
885                 cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL2_M0, 0x0000);
886                 cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL3_M0, 0x0000);
887                 cdns_torrent_phy_write(regmap, CMN_PLL1_SS_CTRL4_M0, 0x0000);
888                 cdns_torrent_phy_write(regmap,
889                                        CMN_PLL1_LOCK_PLLCNT_THR, 0x0003);
890         }
891
892         cdns_torrent_phy_write(regmap, CMN_PLL0_LOCK_REFCNT_START, 0x00C7);
893         cdns_torrent_phy_write(regmap, CMN_PLL0_LOCK_PLLCNT_START, 0x00C7);
894         cdns_torrent_phy_write(regmap, CMN_PLL1_LOCK_REFCNT_START, 0x00C7);
895         cdns_torrent_phy_write(regmap, CMN_PLL1_LOCK_PLLCNT_START, 0x00C7);
896 }
897
898 static
899 void cdns_torrent_dp_pma_cmn_vco_cfg_100mhz(struct cdns_torrent_phy *cdns_phy,
900                                             u32 rate, bool ssc)
901 {
902         struct regmap *regmap = cdns_phy->regmap_common_cdb;
903
904         /* Assumes 100 MHz refclock */
905         switch (rate) {
906         /* Setting VCO for 10.8GHz */
907         case 2700:
908         case 5400:
909                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CP_PADJ_M0, 0x0028);
910                 cdns_torrent_phy_write(regmap, CMN_PLL0_DSM_FBH_OVRD_M0, 0x0022);
911                 cdns_torrent_phy_write(regmap, CMN_PLL1_DSM_FBH_OVRD_M0, 0x0022);
912                 cdns_torrent_phy_write(regmap, CMN_PLL1_DSM_FBL_OVRD_M0, 0x000C);
913                 break;
914         /* Setting VCO for 9.72GHz */
915         case 1620:
916         case 2430:
917         case 3240:
918                 cdns_torrent_phy_write(regmap, CMN_PLL0_DSM_DIAG_M0, 0x0004);
919                 cdns_torrent_phy_write(regmap, CMN_PLL1_DSM_DIAG_M0, 0x0004);
920                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CP_PADJ_M0, 0x0509);
921                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CP_PADJ_M0, 0x0509);
922                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CP_IADJ_M0, 0x0F00);
923                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CP_IADJ_M0, 0x0F00);
924                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_FILT_PADJ_M0, 0x0F08);
925                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_FILT_PADJ_M0, 0x0F08);
926                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x0061);
927                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x0061);
928                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0x3333);
929                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0x3333);
930                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
931                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
932                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x0042);
933                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x0042);
934                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CTRL_M0, 0x0002);
935                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CTRL_M0, 0x0002);
936                 break;
937         /* Setting VCO for 8.64GHz */
938         case 2160:
939         case 4320:
940                 cdns_torrent_phy_write(regmap, CMN_PLL0_DSM_DIAG_M0, 0x0004);
941                 cdns_torrent_phy_write(regmap, CMN_PLL1_DSM_DIAG_M0, 0x0004);
942                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CP_PADJ_M0, 0x0509);
943                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CP_PADJ_M0, 0x0509);
944                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CP_IADJ_M0, 0x0F00);
945                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CP_IADJ_M0, 0x0F00);
946                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_FILT_PADJ_M0, 0x0F08);
947                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_FILT_PADJ_M0, 0x0F08);
948                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x0056);
949                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x0056);
950                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVL_M0, 0x6666);
951                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVL_M0, 0x6666);
952                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
953                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
954                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x003A);
955                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x003A);
956                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CTRL_M0, 0x0002);
957                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CTRL_M0, 0x0002);
958                 break;
959         /* Setting VCO for 8.1GHz */
960         case 8100:
961                 cdns_torrent_phy_write(regmap, CMN_PLL0_DSM_DIAG_M0, 0x0004);
962                 cdns_torrent_phy_write(regmap, CMN_PLL1_DSM_DIAG_M0, 0x0004);
963                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CP_PADJ_M0, 0x0509);
964                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CP_PADJ_M0, 0x0509);
965                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CP_IADJ_M0, 0x0F00);
966                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CP_IADJ_M0, 0x0F00);
967                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_FILT_PADJ_M0, 0x0F08);
968                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_FILT_PADJ_M0, 0x0F08);
969                 cdns_torrent_phy_write(regmap, CMN_PLL0_INTDIV_M0, 0x0051);
970                 cdns_torrent_phy_write(regmap, CMN_PLL1_INTDIV_M0, 0x0051);
971                 cdns_torrent_phy_write(regmap, CMN_PLL0_FRACDIVH_M0, 0x0002);
972                 cdns_torrent_phy_write(regmap, CMN_PLL1_FRACDIVH_M0, 0x0002);
973                 cdns_torrent_phy_write(regmap, CMN_PLL0_HIGH_THR_M0, 0x0036);
974                 cdns_torrent_phy_write(regmap, CMN_PLL1_HIGH_THR_M0, 0x0036);
975                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL0_CTRL_M0, 0x0002);
976                 cdns_torrent_phy_write(regmap, CMN_PDIAG_PLL1_CTRL_M0, 0x0002);
977                 break;
978         }
979 }
980
981 /*
982  * Enable or disable PLL for selected lanes.
983  */
984 static int cdns_torrent_dp_set_pll_en(struct cdns_torrent_phy *cdns_phy,
985                                       struct phy_configure_opts_dp *dp,
986                                       bool enable)
987 {
988         u32 rd_val;
989         u32 ret;
990         struct regmap *regmap = cdns_phy->regmap_dptx_phy_reg;
991
992         /*
993          * Used to determine, which bits to check for or enable in
994          * PHY_PMA_XCVR_PLLCLK_EN register.
995          */
996         u32 pll_bits;
997         /* Used to enable or disable lanes. */
998         u32 pll_val;
999
1000         /* Select values of registers and mask, depending on enabled lane
1001          * count.
1002          */
1003         switch (dp->lanes) {
1004         /* lane 0 */
1005         case (1):
1006                 pll_bits = 0x00000001;
1007                 break;
1008         /* lanes 0-1 */
1009         case (2):
1010                 pll_bits = 0x00000003;
1011                 break;
1012         /* lanes 0-3, all */
1013         default:
1014                 pll_bits = 0x0000000F;
1015                 break;
1016         }
1017
1018         if (enable)
1019                 pll_val = pll_bits;
1020         else
1021                 pll_val = 0x00000000;
1022
1023         cdns_torrent_dp_write(regmap, PHY_PMA_XCVR_PLLCLK_EN, pll_val);
1024
1025         /* Wait for acknowledgment from PHY. */
1026         ret = regmap_read_poll_timeout(regmap,
1027                                        PHY_PMA_XCVR_PLLCLK_EN_ACK,
1028                                        rd_val,
1029                                        (rd_val & pll_bits) == pll_val,
1030                                        0, POLL_TIMEOUT_US);
1031         ndelay(100);
1032         return ret;
1033 }
1034
1035 static int cdns_torrent_dp_set_power_state(struct cdns_torrent_phy *cdns_phy,
1036                                            u32 num_lanes,
1037                                            enum phy_powerstate powerstate)
1038 {
1039         /* Register value for power state for a single byte. */
1040         u32 value_part;
1041         u32 value;
1042         u32 mask;
1043         u32 read_val;
1044         u32 ret;
1045         struct regmap *regmap = cdns_phy->regmap_dptx_phy_reg;
1046
1047         switch (powerstate) {
1048         case (POWERSTATE_A0):
1049                 value_part = 0x01U;
1050                 break;
1051         case (POWERSTATE_A2):
1052                 value_part = 0x04U;
1053                 break;
1054         default:
1055                 /* Powerstate A3 */
1056                 value_part = 0x08U;
1057                 break;
1058         }
1059
1060         /* Select values of registers and mask, depending on enabled
1061          * lane count.
1062          */
1063         switch (num_lanes) {
1064         /* lane 0 */
1065         case (1):
1066                 value = value_part;
1067                 mask = 0x0000003FU;
1068                 break;
1069         /* lanes 0-1 */
1070         case (2):
1071                 value = (value_part
1072                          | (value_part << 8));
1073                 mask = 0x00003F3FU;
1074                 break;
1075         /* lanes 0-3, all */
1076         default:
1077                 value = (value_part
1078                          | (value_part << 8)
1079                          | (value_part << 16)
1080                          | (value_part << 24));
1081                 mask = 0x3F3F3F3FU;
1082                 break;
1083         }
1084
1085         /* Set power state A<n>. */
1086         cdns_torrent_dp_write(regmap, PHY_PMA_XCVR_POWER_STATE_REQ, value);
1087         /* Wait, until PHY acknowledges power state completion. */
1088         ret = regmap_read_poll_timeout(regmap, PHY_PMA_XCVR_POWER_STATE_ACK,
1089                                        read_val, (read_val & mask) == value, 0,
1090                                        POLL_TIMEOUT_US);
1091         cdns_torrent_dp_write(regmap, PHY_PMA_XCVR_POWER_STATE_REQ, 0x00000000);
1092         ndelay(100);
1093
1094         return ret;
1095 }
1096
1097 static int cdns_torrent_dp_run(struct cdns_torrent_phy *cdns_phy, u32 num_lanes)
1098 {
1099         unsigned int read_val;
1100         int ret;
1101         struct regmap *regmap = cdns_phy->regmap_dptx_phy_reg;
1102
1103         /*
1104          * waiting for ACK of pma_xcvr_pllclk_en_ln_*, only for the
1105          * master lane
1106          */
1107         ret = regmap_read_poll_timeout(regmap, PHY_PMA_XCVR_PLLCLK_EN_ACK,
1108                                        read_val, read_val & 1,
1109                                        0, POLL_TIMEOUT_US);
1110         if (ret == -ETIMEDOUT) {
1111                 dev_err(cdns_phy->dev,
1112                         "timeout waiting for link PLL clock enable ack\n");
1113                 return ret;
1114         }
1115
1116         ndelay(100);
1117
1118         ret = cdns_torrent_dp_set_power_state(cdns_phy, num_lanes,
1119                                               POWERSTATE_A2);
1120         if (ret)
1121                 return ret;
1122
1123         ret = cdns_torrent_dp_set_power_state(cdns_phy, num_lanes,
1124                                               POWERSTATE_A0);
1125
1126         return ret;
1127 }
1128
1129 static int cdns_torrent_dp_wait_pma_cmn_ready(struct cdns_torrent_phy *cdns_phy)
1130 {
1131         unsigned int reg;
1132         int ret;
1133         struct regmap *regmap = cdns_phy->regmap_dptx_phy_reg;
1134
1135         ret = regmap_read_poll_timeout(regmap, PHY_PMA_CMN_READY, reg,
1136                                        reg & 1, 0, POLL_TIMEOUT_US);
1137         if (ret == -ETIMEDOUT) {
1138                 dev_err(cdns_phy->dev,
1139                         "timeout waiting for PMA common ready\n");
1140                 return -ETIMEDOUT;
1141         }
1142
1143         return 0;
1144 }
1145
1146 static void cdns_torrent_dp_pma_cmn_rate(struct cdns_torrent_phy *cdns_phy,
1147                                          u32 rate, u32 num_lanes)
1148 {
1149         unsigned int clk_sel_val = 0;
1150         unsigned int hsclk_div_val = 0;
1151         unsigned int i;
1152
1153         switch (rate) {
1154         case 1620:
1155                 clk_sel_val = 0x0f01;
1156                 hsclk_div_val = 2;
1157                 break;
1158         case 2160:
1159         case 2430:
1160         case 2700:
1161                 clk_sel_val = 0x0701;
1162                 hsclk_div_val = 1;
1163                 break;
1164         case 3240:
1165                 clk_sel_val = 0x0b00;
1166                 hsclk_div_val = 2;
1167                 break;
1168         case 4320:
1169         case 5400:
1170                 clk_sel_val = 0x0301;
1171                 hsclk_div_val = 0;
1172                 break;
1173         case 8100:
1174                 clk_sel_val = 0x0200;
1175                 hsclk_div_val = 0;
1176                 break;
1177         }
1178
1179         cdns_torrent_phy_write(cdns_phy->regmap_common_cdb,
1180                                CMN_PDIAG_PLL0_CLK_SEL_M0, clk_sel_val);
1181         cdns_torrent_phy_write(cdns_phy->regmap_common_cdb,
1182                                CMN_PDIAG_PLL1_CLK_SEL_M0, clk_sel_val);
1183
1184         /* PMA lane configuration to deal with multi-link operation */
1185         for (i = 0; i < num_lanes; i++)
1186                 cdns_torrent_phy_write(cdns_phy->regmap_tx_lane_cdb[i],
1187                                        XCVR_DIAG_HSCLK_DIV, hsclk_div_val);
1188 }
1189
1190 /*
1191  * Perform register operations related to setting link rate, once powerstate is
1192  * set and PLL disable request was processed.
1193  */
1194 static int cdns_torrent_dp_configure_rate(struct cdns_torrent_phy *cdns_phy,
1195                                           struct phy_configure_opts_dp *dp)
1196 {
1197         u32 read_val, ret;
1198
1199         /* Disable the cmn_pll0_en before re-programming the new data rate. */
1200         regmap_field_write(cdns_phy->phy_pma_pll_raw_ctrl, 0x0);
1201
1202         /*
1203          * Wait for PLL ready de-assertion.
1204          * For PLL0 - PHY_PMA_CMN_CTRL2[2] == 1
1205          */
1206         ret = regmap_field_read_poll_timeout(cdns_phy->phy_pma_cmn_ctrl_2,
1207                                              read_val,
1208                                              ((read_val >> 2) & 0x01) != 0,
1209                                              0, POLL_TIMEOUT_US);
1210         if (ret)
1211                 return ret;
1212         ndelay(200);
1213
1214         /* DP Rate Change - VCO Output settings. */
1215         if (cdns_phy->ref_clk_rate == CLK_19_2_MHZ)
1216                 /* PMA common configuration 19.2MHz */
1217                 cdns_torrent_dp_pma_cmn_vco_cfg_19_2mhz(cdns_phy, dp->link_rate, dp->ssc);
1218         else if (cdns_phy->ref_clk_rate == CLK_25_MHZ)
1219                 /* PMA common configuration 25MHz */
1220                 cdns_torrent_dp_pma_cmn_vco_cfg_25mhz(cdns_phy, dp->link_rate, dp->ssc);
1221         else if (cdns_phy->ref_clk_rate == CLK_100_MHZ)
1222                 /* PMA common configuration 100MHz */
1223                 cdns_torrent_dp_pma_cmn_vco_cfg_100mhz(cdns_phy, dp->link_rate, dp->ssc);
1224
1225         cdns_torrent_dp_pma_cmn_rate(cdns_phy, dp->link_rate, dp->lanes);
1226
1227         /* Enable the cmn_pll0_en. */
1228         regmap_field_write(cdns_phy->phy_pma_pll_raw_ctrl, 0x3);
1229
1230         /*
1231          * Wait for PLL ready assertion.
1232          * For PLL0 - PHY_PMA_CMN_CTRL2[0] == 1
1233          */
1234         ret = regmap_field_read_poll_timeout(cdns_phy->phy_pma_cmn_ctrl_2,
1235                                              read_val,
1236                                              (read_val & 0x01) != 0,
1237                                              0, POLL_TIMEOUT_US);
1238         return ret;
1239 }
1240
1241 /*
1242  * Verify, that parameters to configure PHY with are correct.
1243  */
1244 static int cdns_torrent_dp_verify_config(struct cdns_torrent_inst *inst,
1245                                          struct phy_configure_opts_dp *dp)
1246 {
1247         u8 i;
1248
1249         /* If changing link rate was required, verify it's supported. */
1250         if (dp->set_rate) {
1251                 switch (dp->link_rate) {
1252                 case 1620:
1253                 case 2160:
1254                 case 2430:
1255                 case 2700:
1256                 case 3240:
1257                 case 4320:
1258                 case 5400:
1259                 case 8100:
1260                         /* valid bit rate */
1261                         break;
1262                 default:
1263                         return -EINVAL;
1264                 }
1265         }
1266
1267         /* Verify lane count. */
1268         switch (dp->lanes) {
1269         case 1:
1270         case 2:
1271         case 4:
1272                 /* valid lane count. */
1273                 break;
1274         default:
1275                 return -EINVAL;
1276         }
1277
1278         /* Check against actual number of PHY's lanes. */
1279         if (dp->lanes > inst->num_lanes)
1280                 return -EINVAL;
1281
1282         /*
1283          * If changing voltages is required, check swing and pre-emphasis
1284          * levels, per-lane.
1285          */
1286         if (dp->set_voltages) {
1287                 /* Lane count verified previously. */
1288                 for (i = 0; i < dp->lanes; i++) {
1289                         if (dp->voltage[i] > 3 || dp->pre[i] > 3)
1290                                 return -EINVAL;
1291
1292                         /* Sum of voltage swing and pre-emphasis levels cannot
1293                          * exceed 3.
1294                          */
1295                         if (dp->voltage[i] + dp->pre[i] > 3)
1296                                 return -EINVAL;
1297                 }
1298         }
1299
1300         return 0;
1301 }
1302
1303 /* Set power state A0 and PLL clock enable to 0 on enabled lanes. */
1304 static void cdns_torrent_dp_set_a0_pll(struct cdns_torrent_phy *cdns_phy,
1305                                        u32 num_lanes)
1306 {
1307         struct regmap *regmap = cdns_phy->regmap_dptx_phy_reg;
1308         u32 pwr_state = cdns_torrent_dp_read(regmap,
1309                                              PHY_PMA_XCVR_POWER_STATE_REQ);
1310         u32 pll_clk_en = cdns_torrent_dp_read(regmap,
1311                                               PHY_PMA_XCVR_PLLCLK_EN);
1312
1313         /* Lane 0 is always enabled. */
1314         pwr_state &= ~(PMA_XCVR_POWER_STATE_REQ_LN_MASK <<
1315                        PHY_POWER_STATE_LN_0);
1316         pll_clk_en &= ~0x01U;
1317
1318         if (num_lanes > 1) {
1319                 /* lane 1 */
1320                 pwr_state &= ~(PMA_XCVR_POWER_STATE_REQ_LN_MASK <<
1321                                PHY_POWER_STATE_LN_1);
1322                 pll_clk_en &= ~(0x01U << 1);
1323         }
1324
1325         if (num_lanes > 2) {
1326                 /* lanes 2 and 3 */
1327                 pwr_state &= ~(PMA_XCVR_POWER_STATE_REQ_LN_MASK <<
1328                                PHY_POWER_STATE_LN_2);
1329                 pwr_state &= ~(PMA_XCVR_POWER_STATE_REQ_LN_MASK <<
1330                                PHY_POWER_STATE_LN_3);
1331                 pll_clk_en &= ~(0x01U << 2);
1332                 pll_clk_en &= ~(0x01U << 3);
1333         }
1334
1335         cdns_torrent_dp_write(regmap, PHY_PMA_XCVR_POWER_STATE_REQ, pwr_state);
1336         cdns_torrent_dp_write(regmap, PHY_PMA_XCVR_PLLCLK_EN, pll_clk_en);
1337 }
1338
1339 /* Configure lane count as required. */
1340 static int cdns_torrent_dp_set_lanes(struct cdns_torrent_phy *cdns_phy,
1341                                      struct phy_configure_opts_dp *dp)
1342 {
1343         u32 value;
1344         u32 ret;
1345         struct regmap *regmap = cdns_phy->regmap_dptx_phy_reg;
1346         u8 lane_mask = (1 << dp->lanes) - 1;
1347
1348         value = cdns_torrent_dp_read(regmap, PHY_RESET);
1349         /* clear pma_tx_elec_idle_ln_* bits. */
1350         value &= ~PMA_TX_ELEC_IDLE_MASK;
1351         /* Assert pma_tx_elec_idle_ln_* for disabled lanes. */
1352         value |= ((~lane_mask) << PMA_TX_ELEC_IDLE_SHIFT) &
1353                  PMA_TX_ELEC_IDLE_MASK;
1354         cdns_torrent_dp_write(regmap, PHY_RESET, value);
1355
1356         /* reset the link by asserting phy_l00_reset_n low */
1357         cdns_torrent_dp_write(regmap, PHY_RESET,
1358                               value & (~PHY_L00_RESET_N_MASK));
1359
1360         /*
1361          * Assert lane reset on unused lanes and lane 0 so they remain in reset
1362          * and powered down when re-enabling the link
1363          */
1364         value = (value & 0x0000FFF0) | (0x0000000E & lane_mask);
1365         cdns_torrent_dp_write(regmap, PHY_RESET, value);
1366
1367         cdns_torrent_dp_set_a0_pll(cdns_phy, dp->lanes);
1368
1369         /* release phy_l0*_reset_n based on used laneCount */
1370         value = (value & 0x0000FFF0) | (0x0000000F & lane_mask);
1371         cdns_torrent_dp_write(regmap, PHY_RESET, value);
1372
1373         /* Wait, until PHY gets ready after releasing PHY reset signal. */
1374         ret = cdns_torrent_dp_wait_pma_cmn_ready(cdns_phy);
1375         if (ret)
1376                 return ret;
1377
1378         ndelay(100);
1379
1380         /* release pma_xcvr_pllclk_en_ln_*, only for the master lane */
1381         cdns_torrent_dp_write(regmap, PHY_PMA_XCVR_PLLCLK_EN, 0x0001);
1382
1383         ret = cdns_torrent_dp_run(cdns_phy, dp->lanes);
1384
1385         return ret;
1386 }
1387
1388 /* Configure link rate as required. */
1389 static int cdns_torrent_dp_set_rate(struct cdns_torrent_phy *cdns_phy,
1390                                     struct phy_configure_opts_dp *dp)
1391 {
1392         u32 ret;
1393
1394         ret = cdns_torrent_dp_set_power_state(cdns_phy, dp->lanes,
1395                                               POWERSTATE_A3);
1396         if (ret)
1397                 return ret;
1398         ret = cdns_torrent_dp_set_pll_en(cdns_phy, dp, false);
1399         if (ret)
1400                 return ret;
1401         ndelay(200);
1402
1403         ret = cdns_torrent_dp_configure_rate(cdns_phy, dp);
1404         if (ret)
1405                 return ret;
1406         ndelay(200);
1407
1408         ret = cdns_torrent_dp_set_pll_en(cdns_phy, dp, true);
1409         if (ret)
1410                 return ret;
1411         ret = cdns_torrent_dp_set_power_state(cdns_phy, dp->lanes,
1412                                               POWERSTATE_A2);
1413         if (ret)
1414                 return ret;
1415         ret = cdns_torrent_dp_set_power_state(cdns_phy, dp->lanes,
1416                                               POWERSTATE_A0);
1417         if (ret)
1418                 return ret;
1419         ndelay(900);
1420
1421         return ret;
1422 }
1423
1424 /* Configure voltage swing and pre-emphasis for all enabled lanes. */
1425 static void cdns_torrent_dp_set_voltages(struct cdns_torrent_phy *cdns_phy,
1426                                          struct phy_configure_opts_dp *dp)
1427 {
1428         u8 lane;
1429         u16 val;
1430
1431         for (lane = 0; lane < dp->lanes; lane++) {
1432                 val = cdns_torrent_phy_read(cdns_phy->regmap_tx_lane_cdb[lane],
1433                                             TX_DIAG_ACYA);
1434                 /*
1435                  * Write 1 to register bit TX_DIAG_ACYA[0] to freeze the
1436                  * current state of the analog TX driver.
1437                  */
1438                 val |= TX_DIAG_ACYA_HBDC_MASK;
1439                 cdns_torrent_phy_write(cdns_phy->regmap_tx_lane_cdb[lane],
1440                                        TX_DIAG_ACYA, val);
1441
1442                 cdns_torrent_phy_write(cdns_phy->regmap_tx_lane_cdb[lane],
1443                                        TX_TXCC_CTRL, 0x08A4);
1444                 val = vltg_coeff[dp->voltage[lane]][dp->pre[lane]].diag_tx_drv;
1445                 cdns_torrent_phy_write(cdns_phy->regmap_tx_lane_cdb[lane],
1446                                        DRV_DIAG_TX_DRV, val);
1447                 val = vltg_coeff[dp->voltage[lane]][dp->pre[lane]].mgnfs_mult;
1448                 cdns_torrent_phy_write(cdns_phy->regmap_tx_lane_cdb[lane],
1449                                        TX_TXCC_MGNFS_MULT_000,
1450                                        val);
1451                 val = vltg_coeff[dp->voltage[lane]][dp->pre[lane]].cpost_mult;
1452                 cdns_torrent_phy_write(cdns_phy->regmap_tx_lane_cdb[lane],
1453                                        TX_TXCC_CPOST_MULT_00,
1454                                        val);
1455
1456                 val = cdns_torrent_phy_read(cdns_phy->regmap_tx_lane_cdb[lane],
1457                                             TX_DIAG_ACYA);
1458                 /*
1459                  * Write 0 to register bit TX_DIAG_ACYA[0] to allow the state of
1460                  * analog TX driver to reflect the new programmed one.
1461                  */
1462                 val &= ~TX_DIAG_ACYA_HBDC_MASK;
1463                 cdns_torrent_phy_write(cdns_phy->regmap_tx_lane_cdb[lane],
1464                                        TX_DIAG_ACYA, val);
1465         }
1466 };
1467
1468 static int cdns_torrent_dp_configure(struct phy *phy,
1469                                      union phy_configure_opts *opts)
1470 {
1471         struct cdns_torrent_inst *inst = phy_get_drvdata(phy);
1472         struct cdns_torrent_phy *cdns_phy = dev_get_drvdata(phy->dev.parent);
1473         int ret;
1474
1475         ret = cdns_torrent_dp_verify_config(inst, &opts->dp);
1476         if (ret) {
1477                 dev_err(&phy->dev, "invalid params for phy configure\n");
1478                 return ret;
1479         }
1480
1481         if (opts->dp.set_lanes) {
1482                 ret = cdns_torrent_dp_set_lanes(cdns_phy, &opts->dp);
1483                 if (ret) {
1484                         dev_err(&phy->dev, "cdns_torrent_dp_set_lanes failed\n");
1485                         return ret;
1486                 }
1487         }
1488
1489         if (opts->dp.set_rate) {
1490                 ret = cdns_torrent_dp_set_rate(cdns_phy, &opts->dp);
1491                 if (ret) {
1492                         dev_err(&phy->dev, "cdns_torrent_dp_set_rate failed\n");
1493                         return ret;
1494                 }
1495         }
1496
1497         if (opts->dp.set_voltages)
1498                 cdns_torrent_dp_set_voltages(cdns_phy, &opts->dp);
1499
1500         return ret;
1501 }
1502
1503 static int cdns_torrent_phy_on(struct phy *phy)
1504 {
1505         struct cdns_torrent_inst *inst = phy_get_drvdata(phy);
1506         struct cdns_torrent_phy *cdns_phy = dev_get_drvdata(phy->dev.parent);
1507         u32 read_val;
1508         int ret;
1509
1510         if (cdns_phy->nsubnodes == 1) {
1511                 /* Take the PHY lane group out of reset */
1512                 reset_control_deassert(inst->lnk_rst);
1513
1514                 /* Take the PHY out of reset */
1515                 ret = reset_control_deassert(cdns_phy->phy_rst);
1516                 if (ret)
1517                         return ret;
1518         }
1519
1520         /*
1521          * Wait for cmn_ready assertion
1522          * PHY_PMA_CMN_CTRL1[0] == 1
1523          */
1524         ret = regmap_field_read_poll_timeout(cdns_phy->phy_pma_cmn_ctrl_1,
1525                                              read_val, read_val, 1000,
1526                                              PLL_LOCK_TIMEOUT);
1527         if (ret) {
1528                 dev_err(cdns_phy->dev, "Timeout waiting for CMN ready\n");
1529                 return ret;
1530         }
1531
1532         if (inst->phy_type == TYPE_PCIE || inst->phy_type == TYPE_USB) {
1533                 ret = regmap_field_read_poll_timeout(cdns_phy->phy_pcs_iso_link_ctrl_1[inst->mlane],
1534                                                      read_val, !read_val, 1000,
1535                                                      PLL_LOCK_TIMEOUT);
1536                 if (ret == -ETIMEDOUT) {
1537                         dev_err(cdns_phy->dev, "Timeout waiting for PHY status ready\n");
1538                         return ret;
1539                 }
1540         }
1541
1542         return 0;
1543 }
1544
1545 static int cdns_torrent_phy_off(struct phy *phy)
1546 {
1547         struct cdns_torrent_inst *inst = phy_get_drvdata(phy);
1548         struct cdns_torrent_phy *cdns_phy = dev_get_drvdata(phy->dev.parent);
1549         int ret;
1550
1551         if (cdns_phy->nsubnodes != 1)
1552                 return 0;
1553
1554         ret = reset_control_assert(cdns_phy->phy_rst);
1555         if (ret)
1556                 return ret;
1557
1558         return reset_control_assert(inst->lnk_rst);
1559 }
1560
1561 static void cdns_torrent_dp_common_init(struct cdns_torrent_phy *cdns_phy,
1562                                         struct cdns_torrent_inst *inst)
1563 {
1564         struct regmap *regmap = cdns_phy->regmap_dptx_phy_reg;
1565         unsigned char lane_bits;
1566
1567         cdns_torrent_dp_write(regmap, PHY_AUX_CTRL, 0x0003); /* enable AUX */
1568
1569         /*
1570          * Set lines power state to A0
1571          * Set lines pll clk enable to 0
1572          */
1573         cdns_torrent_dp_set_a0_pll(cdns_phy, inst->num_lanes);
1574
1575         /*
1576          * release phy_l0*_reset_n and pma_tx_elec_idle_ln_* based on
1577          * used lanes
1578          */
1579         lane_bits = (1 << inst->num_lanes) - 1;
1580         cdns_torrent_dp_write(regmap, PHY_RESET,
1581                               ((0xF & ~lane_bits) << 4) | (0xF & lane_bits));
1582
1583         /* release pma_xcvr_pllclk_en_ln_*, only for the master lane */
1584         cdns_torrent_dp_write(regmap, PHY_PMA_XCVR_PLLCLK_EN, 0x0001);
1585
1586         /*
1587          * PHY PMA registers configuration functions
1588          * Initialize PHY with max supported link rate, without SSC.
1589          */
1590         if (cdns_phy->ref_clk_rate == CLK_19_2_MHZ)
1591                 cdns_torrent_dp_pma_cmn_vco_cfg_19_2mhz(cdns_phy,
1592                                                         cdns_phy->max_bit_rate,
1593                                                         false);
1594         else if (cdns_phy->ref_clk_rate == CLK_25_MHZ)
1595                 cdns_torrent_dp_pma_cmn_vco_cfg_25mhz(cdns_phy,
1596                                                       cdns_phy->max_bit_rate,
1597                                                       false);
1598         else if (cdns_phy->ref_clk_rate == CLK_100_MHZ)
1599                 cdns_torrent_dp_pma_cmn_vco_cfg_100mhz(cdns_phy,
1600                                                        cdns_phy->max_bit_rate,
1601                                                        false);
1602
1603         cdns_torrent_dp_pma_cmn_rate(cdns_phy, cdns_phy->max_bit_rate,
1604                                      inst->num_lanes);
1605
1606         /* take out of reset */
1607         regmap_field_write(cdns_phy->phy_reset_ctrl, 0x1);
1608 }
1609
1610 static int cdns_torrent_dp_start(struct cdns_torrent_phy *cdns_phy,
1611                                  struct cdns_torrent_inst *inst,
1612                                  struct phy *phy)
1613 {
1614         int ret;
1615
1616         cdns_torrent_phy_on(phy);
1617
1618         ret = cdns_torrent_dp_wait_pma_cmn_ready(cdns_phy);
1619         if (ret)
1620                 return ret;
1621
1622         ret = cdns_torrent_dp_run(cdns_phy, inst->num_lanes);
1623
1624         return ret;
1625 }
1626
1627 static int cdns_torrent_dp_init(struct phy *phy)
1628 {
1629         struct cdns_torrent_inst *inst = phy_get_drvdata(phy);
1630         struct cdns_torrent_phy *cdns_phy = dev_get_drvdata(phy->dev.parent);
1631
1632         switch (cdns_phy->ref_clk_rate) {
1633         case CLK_19_2_MHZ:
1634         case CLK_25_MHZ:
1635         case CLK_100_MHZ:
1636                 /* Valid Ref Clock Rate */
1637                 break;
1638         default:
1639                 dev_err(cdns_phy->dev, "Unsupported Ref Clock Rate\n");
1640                 return -EINVAL;
1641         }
1642
1643         cdns_torrent_dp_common_init(cdns_phy, inst);
1644
1645         return cdns_torrent_dp_start(cdns_phy, inst, phy);
1646 }
1647
1648 static int cdns_torrent_derived_refclk_enable(struct clk_hw *hw)
1649 {
1650         struct cdns_torrent_derived_refclk *derived_refclk = to_cdns_torrent_derived_refclk(hw);
1651
1652         regmap_field_write(derived_refclk->cmn_cdiag_refclk_ovrd_4, 1);
1653         regmap_field_write(derived_refclk->phy_pipe_cmn_ctrl1_0, 1);
1654
1655         return 0;
1656 }
1657
1658 static void cdns_torrent_derived_refclk_disable(struct clk_hw *hw)
1659 {
1660         struct cdns_torrent_derived_refclk *derived_refclk = to_cdns_torrent_derived_refclk(hw);
1661
1662         regmap_field_write(derived_refclk->phy_pipe_cmn_ctrl1_0, 0);
1663         regmap_field_write(derived_refclk->cmn_cdiag_refclk_ovrd_4, 0);
1664 }
1665
1666 static int cdns_torrent_derived_refclk_is_enabled(struct clk_hw *hw)
1667 {
1668         struct cdns_torrent_derived_refclk *derived_refclk = to_cdns_torrent_derived_refclk(hw);
1669         int val;
1670
1671         regmap_field_read(derived_refclk->cmn_cdiag_refclk_ovrd_4, &val);
1672
1673         return !!val;
1674 }
1675
1676 static const struct clk_ops cdns_torrent_derived_refclk_ops = {
1677         .enable = cdns_torrent_derived_refclk_enable,
1678         .disable = cdns_torrent_derived_refclk_disable,
1679         .is_enabled = cdns_torrent_derived_refclk_is_enabled,
1680 };
1681
1682 static int cdns_torrent_derived_refclk_register(struct cdns_torrent_phy *cdns_phy)
1683 {
1684         struct cdns_torrent_derived_refclk *derived_refclk;
1685         struct device *dev = cdns_phy->dev;
1686         struct clk_init_data *init;
1687         const char *parent_name;
1688         char clk_name[100];
1689         struct clk_hw *hw;
1690         struct clk *clk;
1691         int ret;
1692
1693         derived_refclk = devm_kzalloc(dev, sizeof(*derived_refclk), GFP_KERNEL);
1694         if (!derived_refclk)
1695                 return -ENOMEM;
1696
1697         snprintf(clk_name, sizeof(clk_name), "%s_%s", dev_name(dev),
1698                  clk_names[CDNS_TORRENT_DERIVED_REFCLK]);
1699
1700         clk = devm_clk_get_optional(dev, "phy_en_refclk");
1701         if (IS_ERR(clk)) {
1702                 dev_err(dev, "No parent clock for derived_refclk\n");
1703                 return PTR_ERR(clk);
1704         }
1705
1706         init = &derived_refclk->clk_data;
1707
1708         if (clk) {
1709                 parent_name = __clk_get_name(clk);
1710                 init->parent_names = &parent_name;
1711                 init->num_parents = 1;
1712         }
1713         init->ops = &cdns_torrent_derived_refclk_ops;
1714         init->flags = 0;
1715         init->name = clk_name;
1716
1717         derived_refclk->phy_pipe_cmn_ctrl1_0 = cdns_phy->phy_pipe_cmn_ctrl1_0;
1718         derived_refclk->cmn_cdiag_refclk_ovrd_4 = cdns_phy->cmn_cdiag_refclk_ovrd_4;
1719
1720         derived_refclk->hw.init = init;
1721
1722         hw = &derived_refclk->hw;
1723         ret = devm_clk_hw_register(dev, hw);
1724         if (ret)
1725                 return ret;
1726
1727         cdns_phy->clk_hw_data->hws[CDNS_TORRENT_DERIVED_REFCLK] = hw;
1728
1729         return 0;
1730 }
1731
1732 static int cdns_torrent_received_refclk_enable(struct clk_hw *hw)
1733 {
1734         struct cdns_torrent_received_refclk *received_refclk = to_cdns_torrent_received_refclk(hw);
1735
1736         regmap_field_write(received_refclk->phy_pipe_cmn_ctrl1_0, 1);
1737
1738         return 0;
1739 }
1740
1741 static void cdns_torrent_received_refclk_disable(struct clk_hw *hw)
1742 {
1743         struct cdns_torrent_received_refclk *received_refclk = to_cdns_torrent_received_refclk(hw);
1744
1745         regmap_field_write(received_refclk->phy_pipe_cmn_ctrl1_0, 0);
1746 }
1747
1748 static int cdns_torrent_received_refclk_is_enabled(struct clk_hw *hw)
1749 {
1750         struct cdns_torrent_received_refclk *received_refclk = to_cdns_torrent_received_refclk(hw);
1751         int val, cmn_val;
1752
1753         regmap_field_read(received_refclk->phy_pipe_cmn_ctrl1_0, &val);
1754         regmap_field_read(received_refclk->cmn_cdiag_refclk_ovrd_4, &cmn_val);
1755
1756         return val && !cmn_val;
1757 }
1758
1759 static const struct clk_ops cdns_torrent_received_refclk_ops = {
1760         .enable = cdns_torrent_received_refclk_enable,
1761         .disable = cdns_torrent_received_refclk_disable,
1762         .is_enabled = cdns_torrent_received_refclk_is_enabled,
1763 };
1764
1765 static int cdns_torrent_received_refclk_register(struct cdns_torrent_phy *cdns_phy)
1766 {
1767         struct cdns_torrent_received_refclk *received_refclk;
1768         struct device *dev = cdns_phy->dev;
1769         struct clk_init_data *init;
1770         const char *parent_name;
1771         char clk_name[100];
1772         struct clk_hw *hw;
1773         struct clk *clk;
1774         int ret;
1775
1776         received_refclk = devm_kzalloc(dev, sizeof(*received_refclk), GFP_KERNEL);
1777         if (!received_refclk)
1778                 return -ENOMEM;
1779
1780         snprintf(clk_name, sizeof(clk_name), "%s_%s", dev_name(dev),
1781                  clk_names[CDNS_TORRENT_RECEIVED_REFCLK]);
1782
1783         clk = devm_clk_get_optional(dev, "phy_en_refclk");
1784         if (IS_ERR(clk)) {
1785                 dev_err(dev, "No parent clock for received_refclk\n");
1786                 return PTR_ERR(clk);
1787         }
1788
1789         init = &received_refclk->clk_data;
1790
1791         if (clk) {
1792                 parent_name = __clk_get_name(clk);
1793                 init->parent_names = &parent_name;
1794                 init->num_parents = 1;
1795         }
1796         init->ops = &cdns_torrent_received_refclk_ops;
1797         init->flags = 0;
1798         init->name = clk_name;
1799
1800         received_refclk->phy_pipe_cmn_ctrl1_0 = cdns_phy->phy_pipe_cmn_ctrl1_0;
1801         received_refclk->cmn_cdiag_refclk_ovrd_4 = cdns_phy->cmn_cdiag_refclk_ovrd_4;
1802
1803         received_refclk->hw.init = init;
1804
1805         hw = &received_refclk->hw;
1806         ret = devm_clk_hw_register(dev, hw);
1807         if (ret)
1808                 return ret;
1809
1810         cdns_phy->clk_hw_data->hws[CDNS_TORRENT_RECEIVED_REFCLK] = hw;
1811
1812         return 0;
1813 }
1814
1815 static int cdns_torrent_refclk_driver_enable(struct clk_hw *hw)
1816 {
1817         struct cdns_torrent_refclk_driver *refclk_driver = to_cdns_torrent_refclk_driver(hw);
1818
1819         regmap_field_write(refclk_driver->cmn_fields[CMN_CDIAG_REFCLK_DRV0_CTRL_6], 0);
1820         regmap_field_write(refclk_driver->cmn_fields[CMN_CDIAG_REFCLK_DRV0_CTRL_5], 1);
1821         regmap_field_write(refclk_driver->cmn_fields[CMN_CDIAG_REFCLK_DRV0_CTRL_1], 0);
1822
1823         return 0;
1824 }
1825
1826 static void cdns_torrent_refclk_driver_disable(struct clk_hw *hw)
1827 {
1828         struct cdns_torrent_refclk_driver *refclk_driver = to_cdns_torrent_refclk_driver(hw);
1829
1830         regmap_field_write(refclk_driver->cmn_fields[CMN_CDIAG_REFCLK_DRV0_CTRL_1], 1);
1831 }
1832
1833 static int cdns_torrent_refclk_driver_is_enabled(struct clk_hw *hw)
1834 {
1835         struct cdns_torrent_refclk_driver *refclk_driver = to_cdns_torrent_refclk_driver(hw);
1836         int val;
1837
1838         regmap_field_read(refclk_driver->cmn_fields[CMN_CDIAG_REFCLK_DRV0_CTRL_1], &val);
1839
1840         return !val;
1841 }
1842
1843 static u8 cdns_torrent_refclk_driver_get_parent(struct clk_hw *hw)
1844 {
1845         struct cdns_torrent_refclk_driver *refclk_driver = to_cdns_torrent_refclk_driver(hw);
1846         unsigned int val;
1847
1848         regmap_field_read(refclk_driver->cmn_fields[CMN_CDIAG_REFCLK_DRV0_CTRL_4], &val);
1849         return clk_mux_val_to_index(hw, cdns_torrent_refclk_driver_mux_table, 0, val);
1850 }
1851
1852 static int cdns_torrent_refclk_driver_set_parent(struct clk_hw *hw, u8 index)
1853 {
1854         struct cdns_torrent_refclk_driver *refclk_driver = to_cdns_torrent_refclk_driver(hw);
1855         unsigned int val;
1856
1857         val = cdns_torrent_refclk_driver_mux_table[index];
1858         return regmap_field_write(refclk_driver->cmn_fields[CMN_CDIAG_REFCLK_DRV0_CTRL_4], val);
1859 }
1860
1861 static const struct clk_ops cdns_torrent_refclk_driver_ops = {
1862         .enable = cdns_torrent_refclk_driver_enable,
1863         .disable = cdns_torrent_refclk_driver_disable,
1864         .is_enabled = cdns_torrent_refclk_driver_is_enabled,
1865         .set_parent = cdns_torrent_refclk_driver_set_parent,
1866         .get_parent = cdns_torrent_refclk_driver_get_parent,
1867 };
1868
1869 static int cdns_torrent_refclk_driver_register(struct cdns_torrent_phy *cdns_phy)
1870 {
1871         struct cdns_torrent_refclk_driver *refclk_driver;
1872         struct device *dev = cdns_phy->dev;
1873         struct regmap_field *field;
1874         struct clk_init_data *init;
1875         const char **parent_names;
1876         unsigned int num_parents;
1877         struct regmap *regmap;
1878         char clk_name[100];
1879         struct clk_hw *hw;
1880         int i, ret;
1881
1882         refclk_driver = devm_kzalloc(dev, sizeof(*refclk_driver), GFP_KERNEL);
1883         if (!refclk_driver)
1884                 return -ENOMEM;
1885
1886         num_parents = ARRAY_SIZE(refclk_driver_parent_index);
1887         parent_names = devm_kzalloc(dev, (sizeof(char *) * num_parents), GFP_KERNEL);
1888         if (!parent_names)
1889                 return -ENOMEM;
1890
1891         for (i = 0; i < num_parents; i++) {
1892                 hw = cdns_phy->clk_hw_data->hws[refclk_driver_parent_index[i]];
1893                 if (IS_ERR_OR_NULL(hw)) {
1894                         dev_err(dev, "No parent clock for refclk driver clock\n");
1895                         return IS_ERR(hw) ? PTR_ERR(hw) : -ENOENT;
1896                 }
1897                 parent_names[i] = clk_hw_get_name(hw);
1898         }
1899
1900         snprintf(clk_name, sizeof(clk_name), "%s_%s", dev_name(dev),
1901                  clk_names[CDNS_TORRENT_REFCLK_DRIVER]);
1902
1903         init = &refclk_driver->clk_data;
1904
1905         init->ops = &cdns_torrent_refclk_driver_ops;
1906         init->flags = CLK_SET_RATE_NO_REPARENT;
1907         init->parent_names = parent_names;
1908         init->num_parents = num_parents;
1909         init->name = clk_name;
1910
1911         regmap = cdns_phy->regmap_common_cdb;
1912
1913         for (i = 0; i < REFCLK_OUT_NUM_CMN_CONFIG; i++) {
1914                 field = devm_regmap_field_alloc(dev, regmap, refclk_out_cmn_cfg[i]);
1915                 if (IS_ERR(field)) {
1916                         dev_err(dev, "Refclk driver CMN reg field init failed\n");
1917                         return PTR_ERR(field);
1918                 }
1919                 refclk_driver->cmn_fields[i] = field;
1920         }
1921
1922         /* Enable Derived reference clock as default */
1923         regmap_field_write(refclk_driver->cmn_fields[CMN_CDIAG_REFCLK_DRV0_CTRL_4], 1);
1924
1925         refclk_driver->hw.init = init;
1926
1927         hw = &refclk_driver->hw;
1928         ret = devm_clk_hw_register(dev, hw);
1929         if (ret)
1930                 return ret;
1931
1932         cdns_phy->clk_hw_data->hws[CDNS_TORRENT_REFCLK_DRIVER] = hw;
1933
1934         return 0;
1935 }
1936
1937 static struct regmap *cdns_regmap_init(struct device *dev, void __iomem *base,
1938                                        u32 block_offset,
1939                                        u8 reg_offset_shift,
1940                                        const struct regmap_config *config)
1941 {
1942         struct cdns_regmap_cdb_context *ctx;
1943
1944         ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
1945         if (!ctx)
1946                 return ERR_PTR(-ENOMEM);
1947
1948         ctx->dev = dev;
1949         ctx->base = base + block_offset;
1950         ctx->reg_offset_shift = reg_offset_shift;
1951
1952         return devm_regmap_init(dev, NULL, ctx, config);
1953 }
1954
1955 static int cdns_torrent_dp_regfield_init(struct cdns_torrent_phy *cdns_phy)
1956 {
1957         struct device *dev = cdns_phy->dev;
1958         struct regmap_field *field;
1959         struct regmap *regmap;
1960
1961         regmap = cdns_phy->regmap_dptx_phy_reg;
1962         field = devm_regmap_field_alloc(dev, regmap, phy_reset_ctrl);
1963         if (IS_ERR(field)) {
1964                 dev_err(dev, "PHY_RESET reg field init failed\n");
1965                 return PTR_ERR(field);
1966         }
1967         cdns_phy->phy_reset_ctrl = field;
1968
1969         return 0;
1970 }
1971
1972 static int cdns_torrent_regfield_init(struct cdns_torrent_phy *cdns_phy)
1973 {
1974         struct device *dev = cdns_phy->dev;
1975         struct regmap_field *field;
1976         struct regmap *regmap;
1977         int i;
1978
1979         regmap = cdns_phy->regmap_phy_pcs_common_cdb;
1980         field = devm_regmap_field_alloc(dev, regmap, phy_pll_cfg);
1981         if (IS_ERR(field)) {
1982                 dev_err(dev, "PHY_PLL_CFG reg field init failed\n");
1983                 return PTR_ERR(field);
1984         }
1985         cdns_phy->phy_pll_cfg = field;
1986
1987         regmap = cdns_phy->regmap_phy_pcs_common_cdb;
1988         field = devm_regmap_field_alloc(dev, regmap, phy_pipe_cmn_ctrl1_0);
1989         if (IS_ERR(field)) {
1990                 dev_err(dev, "phy_pipe_cmn_ctrl1_0 reg field init failed\n");
1991                 return PTR_ERR(field);
1992         }
1993         cdns_phy->phy_pipe_cmn_ctrl1_0 = field;
1994
1995         regmap = cdns_phy->regmap_common_cdb;
1996         field = devm_regmap_field_alloc(dev, regmap, cmn_cdiag_refclk_ovrd_4);
1997         if (IS_ERR(field)) {
1998                 dev_err(dev, "cmn_cdiag_refclk_ovrd_4 reg field init failed\n");
1999                 return PTR_ERR(field);
2000         }
2001         cdns_phy->cmn_cdiag_refclk_ovrd_4 = field;
2002
2003         regmap = cdns_phy->regmap_phy_pma_common_cdb;
2004         field = devm_regmap_field_alloc(dev, regmap, phy_pma_cmn_ctrl_1);
2005         if (IS_ERR(field)) {
2006                 dev_err(dev, "PHY_PMA_CMN_CTRL1 reg field init failed\n");
2007                 return PTR_ERR(field);
2008         }
2009         cdns_phy->phy_pma_cmn_ctrl_1 = field;
2010
2011         regmap = cdns_phy->regmap_phy_pma_common_cdb;
2012         field = devm_regmap_field_alloc(dev, regmap, phy_pma_cmn_ctrl_2);
2013         if (IS_ERR(field)) {
2014                 dev_err(dev, "PHY_PMA_CMN_CTRL2 reg field init failed\n");
2015                 return PTR_ERR(field);
2016         }
2017         cdns_phy->phy_pma_cmn_ctrl_2 = field;
2018
2019         regmap = cdns_phy->regmap_phy_pma_common_cdb;
2020         field = devm_regmap_field_alloc(dev, regmap, phy_pma_pll_raw_ctrl);
2021         if (IS_ERR(field)) {
2022                 dev_err(dev, "PHY_PMA_PLL_RAW_CTRL reg field init failed\n");
2023                 return PTR_ERR(field);
2024         }
2025         cdns_phy->phy_pma_pll_raw_ctrl = field;
2026
2027         for (i = 0; i < MAX_NUM_LANES; i++) {
2028                 regmap = cdns_phy->regmap_phy_pcs_lane_cdb[i];
2029                 field = devm_regmap_field_alloc(dev, regmap, phy_pcs_iso_link_ctrl_1);
2030                 if (IS_ERR(field)) {
2031                         dev_err(dev, "PHY_PCS_ISO_LINK_CTRL reg field init for ln %d failed\n", i);
2032                         return PTR_ERR(field);
2033                 }
2034                 cdns_phy->phy_pcs_iso_link_ctrl_1[i] = field;
2035         }
2036
2037         return 0;
2038 }
2039
2040 static int cdns_torrent_dp_regmap_init(struct cdns_torrent_phy *cdns_phy)
2041 {
2042         void __iomem *base = cdns_phy->base;
2043         struct device *dev = cdns_phy->dev;
2044         struct regmap *regmap;
2045         u8 reg_offset_shift;
2046         u32 block_offset;
2047
2048         reg_offset_shift = cdns_phy->init_data->reg_offset_shift;
2049
2050         block_offset = TORRENT_DPTX_PHY_OFFSET;
2051         regmap = cdns_regmap_init(dev, base, block_offset,
2052                                   reg_offset_shift,
2053                                   &cdns_torrent_dptx_phy_config);
2054         if (IS_ERR(regmap)) {
2055                 dev_err(dev, "Failed to init DPTX PHY regmap\n");
2056                 return PTR_ERR(regmap);
2057         }
2058         cdns_phy->regmap_dptx_phy_reg = regmap;
2059
2060         return 0;
2061 }
2062
2063 static int cdns_torrent_regmap_init(struct cdns_torrent_phy *cdns_phy)
2064 {
2065         void __iomem *sd_base = cdns_phy->sd_base;
2066         u8 block_offset_shift, reg_offset_shift;
2067         struct device *dev = cdns_phy->dev;
2068         struct regmap *regmap;
2069         u32 block_offset;
2070         int i;
2071
2072         block_offset_shift = cdns_phy->init_data->block_offset_shift;
2073         reg_offset_shift = cdns_phy->init_data->reg_offset_shift;
2074
2075         for (i = 0; i < MAX_NUM_LANES; i++) {
2076                 block_offset = TORRENT_TX_LANE_CDB_OFFSET(i, block_offset_shift,
2077                                                           reg_offset_shift);
2078                 regmap = cdns_regmap_init(dev, sd_base, block_offset,
2079                                           reg_offset_shift,
2080                                           &cdns_torrent_tx_lane_cdb_config[i]);
2081                 if (IS_ERR(regmap)) {
2082                         dev_err(dev, "Failed to init tx lane CDB regmap\n");
2083                         return PTR_ERR(regmap);
2084                 }
2085                 cdns_phy->regmap_tx_lane_cdb[i] = regmap;
2086
2087                 block_offset = TORRENT_RX_LANE_CDB_OFFSET(i, block_offset_shift,
2088                                                           reg_offset_shift);
2089                 regmap = cdns_regmap_init(dev, sd_base, block_offset,
2090                                           reg_offset_shift,
2091                                           &cdns_torrent_rx_lane_cdb_config[i]);
2092                 if (IS_ERR(regmap)) {
2093                         dev_err(dev, "Failed to init rx lane CDB regmap\n");
2094                         return PTR_ERR(regmap);
2095                 }
2096                 cdns_phy->regmap_rx_lane_cdb[i] = regmap;
2097
2098                 block_offset = TORRENT_PHY_PCS_LANE_CDB_OFFSET(i, block_offset_shift,
2099                                                                reg_offset_shift);
2100                 regmap = cdns_regmap_init(dev, sd_base, block_offset,
2101                                           reg_offset_shift,
2102                                           &cdns_torrent_phy_pcs_lane_cdb_config[i]);
2103                 if (IS_ERR(regmap)) {
2104                         dev_err(dev, "Failed to init PHY PCS lane CDB regmap\n");
2105                         return PTR_ERR(regmap);
2106                 }
2107                 cdns_phy->regmap_phy_pcs_lane_cdb[i] = regmap;
2108         }
2109
2110         block_offset = TORRENT_COMMON_CDB_OFFSET;
2111         regmap = cdns_regmap_init(dev, sd_base, block_offset,
2112                                   reg_offset_shift,
2113                                   &cdns_torrent_common_cdb_config);
2114         if (IS_ERR(regmap)) {
2115                 dev_err(dev, "Failed to init common CDB regmap\n");
2116                 return PTR_ERR(regmap);
2117         }
2118         cdns_phy->regmap_common_cdb = regmap;
2119
2120         block_offset = TORRENT_PHY_PCS_COMMON_OFFSET(block_offset_shift);
2121         regmap = cdns_regmap_init(dev, sd_base, block_offset,
2122                                   reg_offset_shift,
2123                                   &cdns_torrent_phy_pcs_cmn_cdb_config);
2124         if (IS_ERR(regmap)) {
2125                 dev_err(dev, "Failed to init PHY PCS common CDB regmap\n");
2126                 return PTR_ERR(regmap);
2127         }
2128         cdns_phy->regmap_phy_pcs_common_cdb = regmap;
2129
2130         block_offset = TORRENT_PHY_PMA_COMMON_OFFSET(block_offset_shift);
2131         regmap = cdns_regmap_init(dev, sd_base, block_offset,
2132                                   reg_offset_shift,
2133                                   &cdns_torrent_phy_pma_cmn_cdb_config);
2134         if (IS_ERR(regmap)) {
2135                 dev_err(dev, "Failed to init PHY PMA common CDB regmap\n");
2136                 return PTR_ERR(regmap);
2137         }
2138         cdns_phy->regmap_phy_pma_common_cdb = regmap;
2139
2140         return 0;
2141 }
2142
2143 static int cdns_torrent_phy_init(struct phy *phy)
2144 {
2145         struct cdns_torrent_phy *cdns_phy = dev_get_drvdata(phy->dev.parent);
2146         const struct cdns_torrent_data *init_data = cdns_phy->init_data;
2147         struct cdns_torrent_vals *cmn_vals, *tx_ln_vals, *rx_ln_vals;
2148         enum cdns_torrent_ref_clk ref_clk = cdns_phy->ref_clk_rate;
2149         struct cdns_torrent_vals *link_cmn_vals, *xcvr_diag_vals;
2150         struct cdns_torrent_inst *inst = phy_get_drvdata(phy);
2151         enum cdns_torrent_phy_type phy_type = inst->phy_type;
2152         enum cdns_torrent_ssc_mode ssc = inst->ssc_mode;
2153         struct cdns_torrent_vals *pcs_cmn_vals;
2154         struct cdns_reg_pairs *reg_pairs;
2155         struct regmap *regmap;
2156         u32 num_regs;
2157         int i, j;
2158
2159         if (cdns_phy->nsubnodes > 1)
2160                 return 0;
2161
2162         /**
2163          * Spread spectrum generation is not required or supported
2164          * for SGMII/QSGMII
2165          */
2166         if (phy_type == TYPE_SGMII || phy_type == TYPE_QSGMII)
2167                 ssc = NO_SSC;
2168
2169         /* PHY configuration specific registers for single link */
2170         link_cmn_vals = init_data->link_cmn_vals[phy_type][TYPE_NONE][ssc];
2171         if (link_cmn_vals) {
2172                 reg_pairs = link_cmn_vals->reg_pairs;
2173                 num_regs = link_cmn_vals->num_regs;
2174                 regmap = cdns_phy->regmap_common_cdb;
2175
2176                 /**
2177                  * First array value in link_cmn_vals must be of
2178                  * PHY_PLL_CFG register
2179                  */
2180                 regmap_field_write(cdns_phy->phy_pll_cfg, reg_pairs[0].val);
2181
2182                 for (i = 1; i < num_regs; i++)
2183                         regmap_write(regmap, reg_pairs[i].off,
2184                                      reg_pairs[i].val);
2185         }
2186
2187         xcvr_diag_vals = init_data->xcvr_diag_vals[phy_type][TYPE_NONE][ssc];
2188         if (xcvr_diag_vals) {
2189                 reg_pairs = xcvr_diag_vals->reg_pairs;
2190                 num_regs = xcvr_diag_vals->num_regs;
2191                 for (i = 0; i < inst->num_lanes; i++) {
2192                         regmap = cdns_phy->regmap_tx_lane_cdb[i + inst->mlane];
2193                         for (j = 0; j < num_regs; j++)
2194                                 regmap_write(regmap, reg_pairs[j].off,
2195                                              reg_pairs[j].val);
2196                 }
2197         }
2198
2199         /* PHY PCS common registers configurations */
2200         pcs_cmn_vals = init_data->pcs_cmn_vals[phy_type][TYPE_NONE][ssc];
2201         if (pcs_cmn_vals) {
2202                 reg_pairs = pcs_cmn_vals->reg_pairs;
2203                 num_regs = pcs_cmn_vals->num_regs;
2204                 regmap = cdns_phy->regmap_phy_pcs_common_cdb;
2205                 for (i = 0; i < num_regs; i++)
2206                         regmap_write(regmap, reg_pairs[i].off,
2207                                      reg_pairs[i].val);
2208         }
2209
2210         /* PMA common registers configurations */
2211         cmn_vals = init_data->cmn_vals[ref_clk][phy_type][TYPE_NONE][ssc];
2212         if (cmn_vals) {
2213                 reg_pairs = cmn_vals->reg_pairs;
2214                 num_regs = cmn_vals->num_regs;
2215                 regmap = cdns_phy->regmap_common_cdb;
2216                 for (i = 0; i < num_regs; i++)
2217                         regmap_write(regmap, reg_pairs[i].off,
2218                                      reg_pairs[i].val);
2219         }
2220
2221         /* PMA TX lane registers configurations */
2222         tx_ln_vals = init_data->tx_ln_vals[ref_clk][phy_type][TYPE_NONE][ssc];
2223         if (tx_ln_vals) {
2224                 reg_pairs = tx_ln_vals->reg_pairs;
2225                 num_regs = tx_ln_vals->num_regs;
2226                 for (i = 0; i < inst->num_lanes; i++) {
2227                         regmap = cdns_phy->regmap_tx_lane_cdb[i + inst->mlane];
2228                         for (j = 0; j < num_regs; j++)
2229                                 regmap_write(regmap, reg_pairs[j].off,
2230                                              reg_pairs[j].val);
2231                 }
2232         }
2233
2234         /* PMA RX lane registers configurations */
2235         rx_ln_vals = init_data->rx_ln_vals[ref_clk][phy_type][TYPE_NONE][ssc];
2236         if (rx_ln_vals) {
2237                 reg_pairs = rx_ln_vals->reg_pairs;
2238                 num_regs = rx_ln_vals->num_regs;
2239                 for (i = 0; i < inst->num_lanes; i++) {
2240                         regmap = cdns_phy->regmap_rx_lane_cdb[i + inst->mlane];
2241                         for (j = 0; j < num_regs; j++)
2242                                 regmap_write(regmap, reg_pairs[j].off,
2243                                              reg_pairs[j].val);
2244                 }
2245         }
2246
2247         if (phy_type == TYPE_DP)
2248                 return cdns_torrent_dp_init(phy);
2249
2250         return 0;
2251 }
2252
2253 static const struct phy_ops cdns_torrent_phy_ops = {
2254         .init           = cdns_torrent_phy_init,
2255         .configure      = cdns_torrent_dp_configure,
2256         .power_on       = cdns_torrent_phy_on,
2257         .power_off      = cdns_torrent_phy_off,
2258         .owner          = THIS_MODULE,
2259 };
2260
2261 static int cdns_torrent_noop_phy_on(struct phy *phy)
2262 {
2263         /* Give 5ms to 10ms delay for the PIPE clock to be stable */
2264         usleep_range(5000, 10000);
2265
2266         return 0;
2267 }
2268
2269 static const struct phy_ops noop_ops = {
2270         .power_on       = cdns_torrent_noop_phy_on,
2271         .owner          = THIS_MODULE,
2272 };
2273
2274 static
2275 int cdns_torrent_phy_configure_multilink(struct cdns_torrent_phy *cdns_phy)
2276 {
2277         const struct cdns_torrent_data *init_data = cdns_phy->init_data;
2278         struct cdns_torrent_vals *cmn_vals, *tx_ln_vals, *rx_ln_vals;
2279         enum cdns_torrent_ref_clk ref_clk = cdns_phy->ref_clk_rate;
2280         struct cdns_torrent_vals *link_cmn_vals, *xcvr_diag_vals;
2281         enum cdns_torrent_phy_type phy_t1, phy_t2, tmp_phy_type;
2282         struct cdns_torrent_vals *pcs_cmn_vals;
2283         int i, j, node, mlane, num_lanes, ret;
2284         struct cdns_reg_pairs *reg_pairs;
2285         enum cdns_torrent_ssc_mode ssc;
2286         struct regmap *regmap;
2287         u32 num_regs;
2288
2289         /* Maximum 2 links (subnodes) are supported */
2290         if (cdns_phy->nsubnodes != 2)
2291                 return -EINVAL;
2292
2293         phy_t1 = cdns_phy->phys[0].phy_type;
2294         phy_t2 = cdns_phy->phys[1].phy_type;
2295
2296         /**
2297          * First configure the PHY for first link with phy_t1. Get the array
2298          * values as [phy_t1][phy_t2][ssc].
2299          */
2300         for (node = 0; node < cdns_phy->nsubnodes; node++) {
2301                 if (node == 1) {
2302                         /**
2303                          * If first link with phy_t1 is configured, then
2304                          * configure the PHY for second link with phy_t2.
2305                          * Get the array values as [phy_t2][phy_t1][ssc].
2306                          */
2307                         tmp_phy_type = phy_t1;
2308                         phy_t1 = phy_t2;
2309                         phy_t2 = tmp_phy_type;
2310                 }
2311
2312                 mlane = cdns_phy->phys[node].mlane;
2313                 ssc = cdns_phy->phys[node].ssc_mode;
2314                 num_lanes = cdns_phy->phys[node].num_lanes;
2315
2316                 /**
2317                  * PHY configuration specific registers:
2318                  * link_cmn_vals depend on combination of PHY types being
2319                  * configured and are common for both PHY types, so array
2320                  * values should be same for [phy_t1][phy_t2][ssc] and
2321                  * [phy_t2][phy_t1][ssc].
2322                  * xcvr_diag_vals also depend on combination of PHY types
2323                  * being configured, but these can be different for particular
2324                  * PHY type and are per lane.
2325                  */
2326                 link_cmn_vals = init_data->link_cmn_vals[phy_t1][phy_t2][ssc];
2327                 if (link_cmn_vals) {
2328                         reg_pairs = link_cmn_vals->reg_pairs;
2329                         num_regs = link_cmn_vals->num_regs;
2330                         regmap = cdns_phy->regmap_common_cdb;
2331
2332                         /**
2333                          * First array value in link_cmn_vals must be of
2334                          * PHY_PLL_CFG register
2335                          */
2336                         regmap_field_write(cdns_phy->phy_pll_cfg,
2337                                            reg_pairs[0].val);
2338
2339                         for (i = 1; i < num_regs; i++)
2340                                 regmap_write(regmap, reg_pairs[i].off,
2341                                              reg_pairs[i].val);
2342                 }
2343
2344                 xcvr_diag_vals = init_data->xcvr_diag_vals[phy_t1][phy_t2][ssc];
2345                 if (xcvr_diag_vals) {
2346                         reg_pairs = xcvr_diag_vals->reg_pairs;
2347                         num_regs = xcvr_diag_vals->num_regs;
2348                         for (i = 0; i < num_lanes; i++) {
2349                                 regmap = cdns_phy->regmap_tx_lane_cdb[i + mlane];
2350                                 for (j = 0; j < num_regs; j++)
2351                                         regmap_write(regmap, reg_pairs[j].off,
2352                                                      reg_pairs[j].val);
2353                         }
2354                 }
2355
2356                 /* PHY PCS common registers configurations */
2357                 pcs_cmn_vals = init_data->pcs_cmn_vals[phy_t1][phy_t2][ssc];
2358                 if (pcs_cmn_vals) {
2359                         reg_pairs = pcs_cmn_vals->reg_pairs;
2360                         num_regs = pcs_cmn_vals->num_regs;
2361                         regmap = cdns_phy->regmap_phy_pcs_common_cdb;
2362                         for (i = 0; i < num_regs; i++)
2363                                 regmap_write(regmap, reg_pairs[i].off,
2364                                              reg_pairs[i].val);
2365                 }
2366
2367                 /* PMA common registers configurations */
2368                 cmn_vals = init_data->cmn_vals[ref_clk][phy_t1][phy_t2][ssc];
2369                 if (cmn_vals) {
2370                         reg_pairs = cmn_vals->reg_pairs;
2371                         num_regs = cmn_vals->num_regs;
2372                         regmap = cdns_phy->regmap_common_cdb;
2373                         for (i = 0; i < num_regs; i++)
2374                                 regmap_write(regmap, reg_pairs[i].off,
2375                                              reg_pairs[i].val);
2376                 }
2377
2378                 /* PMA TX lane registers configurations */
2379                 tx_ln_vals = init_data->tx_ln_vals[ref_clk][phy_t1][phy_t2][ssc];
2380                 if (tx_ln_vals) {
2381                         reg_pairs = tx_ln_vals->reg_pairs;
2382                         num_regs = tx_ln_vals->num_regs;
2383                         for (i = 0; i < num_lanes; i++) {
2384                                 regmap = cdns_phy->regmap_tx_lane_cdb[i + mlane];
2385                                 for (j = 0; j < num_regs; j++)
2386                                         regmap_write(regmap, reg_pairs[j].off,
2387                                                      reg_pairs[j].val);
2388                         }
2389                 }
2390
2391                 /* PMA RX lane registers configurations */
2392                 rx_ln_vals = init_data->rx_ln_vals[ref_clk][phy_t1][phy_t2][ssc];
2393                 if (rx_ln_vals) {
2394                         reg_pairs = rx_ln_vals->reg_pairs;
2395                         num_regs = rx_ln_vals->num_regs;
2396                         for (i = 0; i < num_lanes; i++) {
2397                                 regmap = cdns_phy->regmap_rx_lane_cdb[i + mlane];
2398                                 for (j = 0; j < num_regs; j++)
2399                                         regmap_write(regmap, reg_pairs[j].off,
2400                                                      reg_pairs[j].val);
2401                         }
2402                 }
2403
2404                 reset_control_deassert(cdns_phy->phys[node].lnk_rst);
2405         }
2406
2407         /* Take the PHY out of reset */
2408         ret = reset_control_deassert(cdns_phy->phy_rst);
2409         if (ret)
2410                 return ret;
2411
2412         return 0;
2413 }
2414
2415 static void cdns_torrent_clk_cleanup(struct cdns_torrent_phy *cdns_phy)
2416 {
2417         struct device *dev = cdns_phy->dev;
2418
2419         of_clk_del_provider(dev->of_node);
2420 }
2421
2422 static int cdns_torrent_clk_register(struct cdns_torrent_phy *cdns_phy)
2423 {
2424         struct device *dev = cdns_phy->dev;
2425         struct device_node *node = dev->of_node;
2426         struct clk_hw_onecell_data *data;
2427         int ret;
2428
2429         data = devm_kzalloc(dev, struct_size(data, hws, CDNS_TORRENT_OUTPUT_CLOCKS), GFP_KERNEL);
2430         if (!data)
2431                 return -ENOMEM;
2432
2433         data->num = CDNS_TORRENT_OUTPUT_CLOCKS;
2434         cdns_phy->clk_hw_data = data;
2435
2436         ret = cdns_torrent_derived_refclk_register(cdns_phy);
2437         if (ret) {
2438                 dev_err(dev, "failed to register derived refclk\n");
2439                 return ret;
2440         }
2441
2442         ret = cdns_torrent_received_refclk_register(cdns_phy);
2443         if (ret) {
2444                 dev_err(dev, "failed to register received refclk\n");
2445                 return ret;
2446         }
2447
2448         ret = cdns_torrent_refclk_driver_register(cdns_phy);
2449         if (ret) {
2450                 dev_err(dev, "failed to register refclk driver\n");
2451                 return ret;
2452         }
2453
2454         ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, data);
2455         if (ret) {
2456                 dev_err(dev, "Failed to add clock provider: %s\n", node->name);
2457                 return ret;
2458         }
2459
2460         return 0;
2461 }
2462
2463 static int cdns_torrent_reset(struct cdns_torrent_phy *cdns_phy)
2464 {
2465         struct device *dev = cdns_phy->dev;
2466
2467         cdns_phy->phy_rst = devm_reset_control_get_exclusive_by_index(dev, 0);
2468         if (IS_ERR(cdns_phy->phy_rst)) {
2469                 dev_err(dev, "%s: failed to get reset\n",
2470                         dev->of_node->full_name);
2471                 return PTR_ERR(cdns_phy->phy_rst);
2472         }
2473
2474         cdns_phy->apb_rst = devm_reset_control_get_optional_exclusive(dev, "torrent_apb");
2475         if (IS_ERR(cdns_phy->apb_rst)) {
2476                 dev_err(dev, "%s: failed to get apb reset\n",
2477                         dev->of_node->full_name);
2478                 return PTR_ERR(cdns_phy->apb_rst);
2479         }
2480
2481         return 0;
2482 }
2483
2484 static int cdns_torrent_clk(struct cdns_torrent_phy *cdns_phy)
2485 {
2486         struct device *dev = cdns_phy->dev;
2487         unsigned long ref_clk_rate;
2488         int ret;
2489
2490         cdns_phy->clk = devm_clk_get(dev, "refclk");
2491         if (IS_ERR(cdns_phy->clk)) {
2492                 dev_err(dev, "phy ref clock not found\n");
2493                 return PTR_ERR(cdns_phy->clk);
2494         }
2495
2496         ret = clk_prepare_enable(cdns_phy->clk);
2497         if (ret) {
2498                 dev_err(cdns_phy->dev, "Failed to prepare ref clock\n");
2499                 return ret;
2500         }
2501
2502         ref_clk_rate = clk_get_rate(cdns_phy->clk);
2503         if (!ref_clk_rate) {
2504                 dev_err(cdns_phy->dev, "Failed to get ref clock rate\n");
2505                 clk_disable_unprepare(cdns_phy->clk);
2506                 return -EINVAL;
2507         }
2508
2509         switch (ref_clk_rate) {
2510         case REF_CLK_19_2MHZ:
2511                 cdns_phy->ref_clk_rate = CLK_19_2_MHZ;
2512                 break;
2513         case REF_CLK_25MHZ:
2514                 cdns_phy->ref_clk_rate = CLK_25_MHZ;
2515                 break;
2516         case REF_CLK_100MHZ:
2517                 cdns_phy->ref_clk_rate = CLK_100_MHZ;
2518                 break;
2519         default:
2520                 dev_err(cdns_phy->dev, "Invalid Ref Clock Rate\n");
2521                 clk_disable_unprepare(cdns_phy->clk);
2522                 return -EINVAL;
2523         }
2524
2525         return 0;
2526 }
2527
2528 static int cdns_torrent_phy_probe(struct platform_device *pdev)
2529 {
2530         struct cdns_torrent_phy *cdns_phy;
2531         struct device *dev = &pdev->dev;
2532         struct phy_provider *phy_provider;
2533         const struct cdns_torrent_data *data;
2534         struct device_node *child;
2535         int ret, subnodes, node = 0, i;
2536         u32 total_num_lanes = 0;
2537         int already_configured;
2538         u8 init_dp_regmap = 0;
2539         u32 phy_type;
2540
2541         /* Get init data for this PHY */
2542         data = of_device_get_match_data(dev);
2543         if (!data)
2544                 return -EINVAL;
2545
2546         cdns_phy = devm_kzalloc(dev, sizeof(*cdns_phy), GFP_KERNEL);
2547         if (!cdns_phy)
2548                 return -ENOMEM;
2549
2550         dev_set_drvdata(dev, cdns_phy);
2551         cdns_phy->dev = dev;
2552         cdns_phy->init_data = data;
2553
2554         cdns_phy->sd_base = devm_platform_ioremap_resource(pdev, 0);
2555         if (IS_ERR(cdns_phy->sd_base))
2556                 return PTR_ERR(cdns_phy->sd_base);
2557
2558         subnodes = of_get_available_child_count(dev->of_node);
2559         if (subnodes == 0) {
2560                 dev_err(dev, "No available link subnodes found\n");
2561                 return -EINVAL;
2562         }
2563
2564         ret = cdns_torrent_regmap_init(cdns_phy);
2565         if (ret)
2566                 return ret;
2567
2568         ret = cdns_torrent_regfield_init(cdns_phy);
2569         if (ret)
2570                 return ret;
2571
2572         ret = cdns_torrent_clk_register(cdns_phy);
2573         if (ret)
2574                 return ret;
2575
2576         regmap_field_read(cdns_phy->phy_pma_cmn_ctrl_1, &already_configured);
2577
2578         if (!already_configured) {
2579                 ret = cdns_torrent_reset(cdns_phy);
2580                 if (ret)
2581                         goto clk_cleanup;
2582
2583                 ret = cdns_torrent_clk(cdns_phy);
2584                 if (ret)
2585                         goto clk_cleanup;
2586
2587                 /* Enable APB */
2588                 reset_control_deassert(cdns_phy->apb_rst);
2589         }
2590
2591         for_each_available_child_of_node(dev->of_node, child) {
2592                 struct phy *gphy;
2593
2594                 /* PHY subnode name must be 'phy'. */
2595                 if (!(of_node_name_eq(child, "phy")))
2596                         continue;
2597
2598                 cdns_phy->phys[node].lnk_rst =
2599                                 of_reset_control_array_get_exclusive(child);
2600                 if (IS_ERR(cdns_phy->phys[node].lnk_rst)) {
2601                         dev_err(dev, "%s: failed to get reset\n",
2602                                 child->full_name);
2603                         ret = PTR_ERR(cdns_phy->phys[node].lnk_rst);
2604                         goto put_lnk_rst;
2605                 }
2606
2607                 if (of_property_read_u32(child, "reg",
2608                                          &cdns_phy->phys[node].mlane)) {
2609                         dev_err(dev, "%s: No \"reg\"-property.\n",
2610                                 child->full_name);
2611                         ret = -EINVAL;
2612                         goto put_child;
2613                 }
2614
2615                 if (of_property_read_u32(child, "cdns,phy-type", &phy_type)) {
2616                         dev_err(dev, "%s: No \"cdns,phy-type\"-property.\n",
2617                                 child->full_name);
2618                         ret = -EINVAL;
2619                         goto put_child;
2620                 }
2621
2622                 switch (phy_type) {
2623                 case PHY_TYPE_PCIE:
2624                         cdns_phy->phys[node].phy_type = TYPE_PCIE;
2625                         break;
2626                 case PHY_TYPE_DP:
2627                         cdns_phy->phys[node].phy_type = TYPE_DP;
2628                         break;
2629                 case PHY_TYPE_SGMII:
2630                         cdns_phy->phys[node].phy_type = TYPE_SGMII;
2631                         break;
2632                 case PHY_TYPE_QSGMII:
2633                         cdns_phy->phys[node].phy_type = TYPE_QSGMII;
2634                         break;
2635                 case PHY_TYPE_USB3:
2636                         cdns_phy->phys[node].phy_type = TYPE_USB;
2637                         break;
2638                 default:
2639                         dev_err(dev, "Unsupported protocol\n");
2640                         ret = -EINVAL;
2641                         goto put_child;
2642                 }
2643
2644                 if (of_property_read_u32(child, "cdns,num-lanes",
2645                                          &cdns_phy->phys[node].num_lanes)) {
2646                         dev_err(dev, "%s: No \"cdns,num-lanes\"-property.\n",
2647                                 child->full_name);
2648                         ret = -EINVAL;
2649                         goto put_child;
2650                 }
2651
2652                 total_num_lanes += cdns_phy->phys[node].num_lanes;
2653
2654                 /* Get SSC mode */
2655                 cdns_phy->phys[node].ssc_mode = NO_SSC;
2656                 of_property_read_u32(child, "cdns,ssc-mode",
2657                                      &cdns_phy->phys[node].ssc_mode);
2658
2659                 if (!already_configured)
2660                         gphy = devm_phy_create(dev, child, &cdns_torrent_phy_ops);
2661                 else
2662                         gphy = devm_phy_create(dev, child, &noop_ops);
2663                 if (IS_ERR(gphy)) {
2664                         ret = PTR_ERR(gphy);
2665                         goto put_child;
2666                 }
2667
2668                 if (cdns_phy->phys[node].phy_type == TYPE_DP) {
2669                         switch (cdns_phy->phys[node].num_lanes) {
2670                         case 1:
2671                         case 2:
2672                         case 4:
2673                         /* valid number of lanes */
2674                                 break;
2675                         default:
2676                                 dev_err(dev, "unsupported number of lanes: %d\n",
2677                                         cdns_phy->phys[node].num_lanes);
2678                                 ret = -EINVAL;
2679                                 goto put_child;
2680                         }
2681
2682                         cdns_phy->max_bit_rate = DEFAULT_MAX_BIT_RATE;
2683                         of_property_read_u32(child, "cdns,max-bit-rate",
2684                                              &cdns_phy->max_bit_rate);
2685
2686                         switch (cdns_phy->max_bit_rate) {
2687                         case 1620:
2688                         case 2160:
2689                         case 2430:
2690                         case 2700:
2691                         case 3240:
2692                         case 4320:
2693                         case 5400:
2694                         case 8100:
2695                         /* valid bit rate */
2696                                 break;
2697                         default:
2698                                 dev_err(dev, "unsupported max bit rate: %dMbps\n",
2699                                         cdns_phy->max_bit_rate);
2700                                 ret = -EINVAL;
2701                                 goto put_child;
2702                         }
2703
2704                         /* DPTX registers */
2705                         cdns_phy->base = devm_platform_ioremap_resource(pdev, 1);
2706                         if (IS_ERR(cdns_phy->base)) {
2707                                 ret = PTR_ERR(cdns_phy->base);
2708                                 goto put_child;
2709                         }
2710
2711                         if (!init_dp_regmap) {
2712                                 ret = cdns_torrent_dp_regmap_init(cdns_phy);
2713                                 if (ret)
2714                                         goto put_child;
2715
2716                                 ret = cdns_torrent_dp_regfield_init(cdns_phy);
2717                                 if (ret)
2718                                         goto put_child;
2719
2720                                 init_dp_regmap++;
2721                         }
2722
2723                         dev_dbg(dev, "DP max bit rate %d.%03d Gbps\n",
2724                                 cdns_phy->max_bit_rate / 1000,
2725                                 cdns_phy->max_bit_rate % 1000);
2726
2727                         gphy->attrs.bus_width = cdns_phy->phys[node].num_lanes;
2728                         gphy->attrs.max_link_rate = cdns_phy->max_bit_rate;
2729                         gphy->attrs.mode = PHY_MODE_DP;
2730                 }
2731
2732                 cdns_phy->phys[node].phy = gphy;
2733                 phy_set_drvdata(gphy, &cdns_phy->phys[node]);
2734
2735                 node++;
2736         }
2737         cdns_phy->nsubnodes = node;
2738
2739         if (total_num_lanes > MAX_NUM_LANES) {
2740                 dev_err(dev, "Invalid lane configuration\n");
2741                 ret = -EINVAL;
2742                 goto put_lnk_rst;
2743         }
2744
2745         if (cdns_phy->nsubnodes > 1 && !already_configured) {
2746                 ret = cdns_torrent_phy_configure_multilink(cdns_phy);
2747                 if (ret)
2748                         goto put_lnk_rst;
2749         }
2750
2751         phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
2752         if (IS_ERR(phy_provider)) {
2753                 ret = PTR_ERR(phy_provider);
2754                 goto put_lnk_rst;
2755         }
2756
2757         if (cdns_phy->nsubnodes > 1)
2758                 dev_dbg(dev, "Multi-link: %s (%d lanes) & %s (%d lanes)",
2759                         cdns_torrent_get_phy_type(cdns_phy->phys[0].phy_type),
2760                         cdns_phy->phys[0].num_lanes,
2761                         cdns_torrent_get_phy_type(cdns_phy->phys[1].phy_type),
2762                         cdns_phy->phys[1].num_lanes);
2763         else
2764                 dev_dbg(dev, "Single link: %s (%d lanes)",
2765                         cdns_torrent_get_phy_type(cdns_phy->phys[0].phy_type),
2766                         cdns_phy->phys[0].num_lanes);
2767
2768         return 0;
2769
2770 put_child:
2771         node++;
2772 put_lnk_rst:
2773         for (i = 0; i < node; i++)
2774                 reset_control_put(cdns_phy->phys[i].lnk_rst);
2775         of_node_put(child);
2776         reset_control_assert(cdns_phy->apb_rst);
2777         clk_disable_unprepare(cdns_phy->clk);
2778 clk_cleanup:
2779         cdns_torrent_clk_cleanup(cdns_phy);
2780         return ret;
2781 }
2782
2783 static int cdns_torrent_phy_remove(struct platform_device *pdev)
2784 {
2785         struct cdns_torrent_phy *cdns_phy = platform_get_drvdata(pdev);
2786         int i;
2787
2788         reset_control_assert(cdns_phy->phy_rst);
2789         reset_control_assert(cdns_phy->apb_rst);
2790         for (i = 0; i < cdns_phy->nsubnodes; i++) {
2791                 reset_control_assert(cdns_phy->phys[i].lnk_rst);
2792                 reset_control_put(cdns_phy->phys[i].lnk_rst);
2793         }
2794
2795         clk_disable_unprepare(cdns_phy->clk);
2796         cdns_torrent_clk_cleanup(cdns_phy);
2797
2798         return 0;
2799 }
2800
2801 /* Single DisplayPort(DP) link configuration */
2802 static struct cdns_reg_pairs sl_dp_link_cmn_regs[] = {
2803         {0x0000, PHY_PLL_CFG},
2804 };
2805
2806 static struct cdns_reg_pairs sl_dp_xcvr_diag_ln_regs[] = {
2807         {0x0000, XCVR_DIAG_HSCLK_SEL},
2808         {0x0001, XCVR_DIAG_PLLDRC_CTRL}
2809 };
2810
2811 static struct cdns_torrent_vals sl_dp_link_cmn_vals = {
2812         .reg_pairs = sl_dp_link_cmn_regs,
2813         .num_regs = ARRAY_SIZE(sl_dp_link_cmn_regs),
2814 };
2815
2816 static struct cdns_torrent_vals sl_dp_xcvr_diag_ln_vals = {
2817         .reg_pairs = sl_dp_xcvr_diag_ln_regs,
2818         .num_regs = ARRAY_SIZE(sl_dp_xcvr_diag_ln_regs),
2819 };
2820
2821 /* Single DP, 19.2 MHz Ref clk, no SSC */
2822 static struct cdns_reg_pairs sl_dp_19_2_no_ssc_cmn_regs[] = {
2823         {0x0014, CMN_SSM_BIAS_TMR},
2824         {0x0027, CMN_PLLSM0_PLLPRE_TMR},
2825         {0x00A1, CMN_PLLSM0_PLLLOCK_TMR},
2826         {0x0027, CMN_PLLSM1_PLLPRE_TMR},
2827         {0x00A1, CMN_PLLSM1_PLLLOCK_TMR},
2828         {0x0060, CMN_BGCAL_INIT_TMR},
2829         {0x0060, CMN_BGCAL_ITER_TMR},
2830         {0x0014, CMN_IBCAL_INIT_TMR},
2831         {0x0018, CMN_TXPUCAL_INIT_TMR},
2832         {0x0005, CMN_TXPUCAL_ITER_TMR},
2833         {0x0018, CMN_TXPDCAL_INIT_TMR},
2834         {0x0005, CMN_TXPDCAL_ITER_TMR},
2835         {0x0240, CMN_RXCAL_INIT_TMR},
2836         {0x0005, CMN_RXCAL_ITER_TMR},
2837         {0x0002, CMN_SD_CAL_INIT_TMR},
2838         {0x0002, CMN_SD_CAL_ITER_TMR},
2839         {0x000B, CMN_SD_CAL_REFTIM_START},
2840         {0x0137, CMN_SD_CAL_PLLCNT_START},
2841         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
2842         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
2843         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
2844         {0x0004, CMN_PLL0_DSM_DIAG_M0},
2845         {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
2846         {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
2847         {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
2848         {0x0004, CMN_PLL1_DSM_DIAG_M0},
2849         {0x00C0, CMN_PLL0_VCOCAL_INIT_TMR},
2850         {0x0004, CMN_PLL0_VCOCAL_ITER_TMR},
2851         {0x00C0, CMN_PLL1_VCOCAL_INIT_TMR},
2852         {0x0004, CMN_PLL1_VCOCAL_ITER_TMR},
2853         {0x0260, CMN_PLL0_VCOCAL_REFTIM_START},
2854         {0x0003, CMN_PLL0_VCOCAL_TCTRL},
2855         {0x0260, CMN_PLL1_VCOCAL_REFTIM_START},
2856         {0x0003, CMN_PLL1_VCOCAL_TCTRL}
2857 };
2858
2859 static struct cdns_reg_pairs sl_dp_19_2_no_ssc_tx_ln_regs[] = {
2860         {0x0780, TX_RCVDET_ST_TMR},
2861         {0x00FB, TX_PSC_A0},
2862         {0x04AA, TX_PSC_A2},
2863         {0x04AA, TX_PSC_A3},
2864         {0x000F, XCVR_DIAG_BIDI_CTRL}
2865 };
2866
2867 static struct cdns_reg_pairs sl_dp_19_2_no_ssc_rx_ln_regs[] = {
2868         {0x0000, RX_PSC_A0},
2869         {0x0000, RX_PSC_A2},
2870         {0x0000, RX_PSC_A3},
2871         {0x0000, RX_PSC_CAL},
2872         {0x0000, RX_REE_GCSM1_CTRL},
2873         {0x0000, RX_REE_GCSM2_CTRL},
2874         {0x0000, RX_REE_PERGCSM_CTRL}
2875 };
2876
2877 static struct cdns_torrent_vals sl_dp_19_2_no_ssc_cmn_vals = {
2878         .reg_pairs = sl_dp_19_2_no_ssc_cmn_regs,
2879         .num_regs = ARRAY_SIZE(sl_dp_19_2_no_ssc_cmn_regs),
2880 };
2881
2882 static struct cdns_torrent_vals sl_dp_19_2_no_ssc_tx_ln_vals = {
2883         .reg_pairs = sl_dp_19_2_no_ssc_tx_ln_regs,
2884         .num_regs = ARRAY_SIZE(sl_dp_19_2_no_ssc_tx_ln_regs),
2885 };
2886
2887 static struct cdns_torrent_vals sl_dp_19_2_no_ssc_rx_ln_vals = {
2888         .reg_pairs = sl_dp_19_2_no_ssc_rx_ln_regs,
2889         .num_regs = ARRAY_SIZE(sl_dp_19_2_no_ssc_rx_ln_regs),
2890 };
2891
2892 /* Single DP, 25 MHz Ref clk, no SSC */
2893 static struct cdns_reg_pairs sl_dp_25_no_ssc_cmn_regs[] = {
2894         {0x0019, CMN_SSM_BIAS_TMR},
2895         {0x0032, CMN_PLLSM0_PLLPRE_TMR},
2896         {0x00D1, CMN_PLLSM0_PLLLOCK_TMR},
2897         {0x0032, CMN_PLLSM1_PLLPRE_TMR},
2898         {0x00D1, CMN_PLLSM1_PLLLOCK_TMR},
2899         {0x007D, CMN_BGCAL_INIT_TMR},
2900         {0x007D, CMN_BGCAL_ITER_TMR},
2901         {0x0019, CMN_IBCAL_INIT_TMR},
2902         {0x001E, CMN_TXPUCAL_INIT_TMR},
2903         {0x0006, CMN_TXPUCAL_ITER_TMR},
2904         {0x001E, CMN_TXPDCAL_INIT_TMR},
2905         {0x0006, CMN_TXPDCAL_ITER_TMR},
2906         {0x02EE, CMN_RXCAL_INIT_TMR},
2907         {0x0006, CMN_RXCAL_ITER_TMR},
2908         {0x0002, CMN_SD_CAL_INIT_TMR},
2909         {0x0002, CMN_SD_CAL_ITER_TMR},
2910         {0x000E, CMN_SD_CAL_REFTIM_START},
2911         {0x012B, CMN_SD_CAL_PLLCNT_START},
2912         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
2913         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
2914         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
2915         {0x0004, CMN_PLL0_DSM_DIAG_M0},
2916         {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
2917         {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
2918         {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
2919         {0x0004, CMN_PLL1_DSM_DIAG_M0},
2920         {0x00FA, CMN_PLL0_VCOCAL_INIT_TMR},
2921         {0x0004, CMN_PLL0_VCOCAL_ITER_TMR},
2922         {0x00FA, CMN_PLL1_VCOCAL_INIT_TMR},
2923         {0x0004, CMN_PLL1_VCOCAL_ITER_TMR},
2924         {0x0317, CMN_PLL0_VCOCAL_REFTIM_START},
2925         {0x0003, CMN_PLL0_VCOCAL_TCTRL},
2926         {0x0317, CMN_PLL1_VCOCAL_REFTIM_START},
2927         {0x0003, CMN_PLL1_VCOCAL_TCTRL}
2928 };
2929
2930 static struct cdns_reg_pairs sl_dp_25_no_ssc_tx_ln_regs[] = {
2931         {0x09C4, TX_RCVDET_ST_TMR},
2932         {0x00FB, TX_PSC_A0},
2933         {0x04AA, TX_PSC_A2},
2934         {0x04AA, TX_PSC_A3},
2935         {0x000F, XCVR_DIAG_BIDI_CTRL}
2936 };
2937
2938 static struct cdns_reg_pairs sl_dp_25_no_ssc_rx_ln_regs[] = {
2939         {0x0000, RX_PSC_A0},
2940         {0x0000, RX_PSC_A2},
2941         {0x0000, RX_PSC_A3},
2942         {0x0000, RX_PSC_CAL},
2943         {0x0000, RX_REE_GCSM1_CTRL},
2944         {0x0000, RX_REE_GCSM2_CTRL},
2945         {0x0000, RX_REE_PERGCSM_CTRL}
2946 };
2947
2948 static struct cdns_torrent_vals sl_dp_25_no_ssc_cmn_vals = {
2949         .reg_pairs = sl_dp_25_no_ssc_cmn_regs,
2950         .num_regs = ARRAY_SIZE(sl_dp_25_no_ssc_cmn_regs),
2951 };
2952
2953 static struct cdns_torrent_vals sl_dp_25_no_ssc_tx_ln_vals = {
2954         .reg_pairs = sl_dp_25_no_ssc_tx_ln_regs,
2955         .num_regs = ARRAY_SIZE(sl_dp_25_no_ssc_tx_ln_regs),
2956 };
2957
2958 static struct cdns_torrent_vals sl_dp_25_no_ssc_rx_ln_vals = {
2959         .reg_pairs = sl_dp_25_no_ssc_rx_ln_regs,
2960         .num_regs = ARRAY_SIZE(sl_dp_25_no_ssc_rx_ln_regs),
2961 };
2962
2963 /* Single DP, 100 MHz Ref clk, no SSC */
2964 static struct cdns_reg_pairs sl_dp_100_no_ssc_cmn_regs[] = {
2965         {0x0003, CMN_PLL0_VCOCAL_TCTRL},
2966         {0x0003, CMN_PLL1_VCOCAL_TCTRL}
2967 };
2968
2969 static struct cdns_reg_pairs sl_dp_100_no_ssc_tx_ln_regs[] = {
2970         {0x00FB, TX_PSC_A0},
2971         {0x04AA, TX_PSC_A2},
2972         {0x04AA, TX_PSC_A3},
2973         {0x000F, XCVR_DIAG_BIDI_CTRL}
2974 };
2975
2976 static struct cdns_reg_pairs sl_dp_100_no_ssc_rx_ln_regs[] = {
2977         {0x0000, RX_PSC_A0},
2978         {0x0000, RX_PSC_A2},
2979         {0x0000, RX_PSC_A3},
2980         {0x0000, RX_PSC_CAL},
2981         {0x0000, RX_REE_GCSM1_CTRL},
2982         {0x0000, RX_REE_GCSM2_CTRL},
2983         {0x0000, RX_REE_PERGCSM_CTRL}
2984 };
2985
2986 static struct cdns_torrent_vals sl_dp_100_no_ssc_cmn_vals = {
2987         .reg_pairs = sl_dp_100_no_ssc_cmn_regs,
2988         .num_regs = ARRAY_SIZE(sl_dp_100_no_ssc_cmn_regs),
2989 };
2990
2991 static struct cdns_torrent_vals sl_dp_100_no_ssc_tx_ln_vals = {
2992         .reg_pairs = sl_dp_100_no_ssc_tx_ln_regs,
2993         .num_regs = ARRAY_SIZE(sl_dp_100_no_ssc_tx_ln_regs),
2994 };
2995
2996 static struct cdns_torrent_vals sl_dp_100_no_ssc_rx_ln_vals = {
2997         .reg_pairs = sl_dp_100_no_ssc_rx_ln_regs,
2998         .num_regs = ARRAY_SIZE(sl_dp_100_no_ssc_rx_ln_regs),
2999 };
3000
3001 /* USB and SGMII/QSGMII link configuration */
3002 static struct cdns_reg_pairs usb_sgmii_link_cmn_regs[] = {
3003         {0x0002, PHY_PLL_CFG},
3004         {0x8600, CMN_PDIAG_PLL0_CLK_SEL_M0},
3005         {0x0601, CMN_PDIAG_PLL1_CLK_SEL_M0}
3006 };
3007
3008 static struct cdns_reg_pairs usb_sgmii_xcvr_diag_ln_regs[] = {
3009         {0x0000, XCVR_DIAG_HSCLK_SEL},
3010         {0x0001, XCVR_DIAG_HSCLK_DIV},
3011         {0x0041, XCVR_DIAG_PLLDRC_CTRL}
3012 };
3013
3014 static struct cdns_reg_pairs sgmii_usb_xcvr_diag_ln_regs[] = {
3015         {0x0011, XCVR_DIAG_HSCLK_SEL},
3016         {0x0003, XCVR_DIAG_HSCLK_DIV},
3017         {0x009B, XCVR_DIAG_PLLDRC_CTRL}
3018 };
3019
3020 static struct cdns_torrent_vals usb_sgmii_link_cmn_vals = {
3021         .reg_pairs = usb_sgmii_link_cmn_regs,
3022         .num_regs = ARRAY_SIZE(usb_sgmii_link_cmn_regs),
3023 };
3024
3025 static struct cdns_torrent_vals usb_sgmii_xcvr_diag_ln_vals = {
3026         .reg_pairs = usb_sgmii_xcvr_diag_ln_regs,
3027         .num_regs = ARRAY_SIZE(usb_sgmii_xcvr_diag_ln_regs),
3028 };
3029
3030 static struct cdns_torrent_vals sgmii_usb_xcvr_diag_ln_vals = {
3031         .reg_pairs = sgmii_usb_xcvr_diag_ln_regs,
3032         .num_regs = ARRAY_SIZE(sgmii_usb_xcvr_diag_ln_regs),
3033 };
3034
3035 /* PCIe and USB Unique SSC link configuration */
3036 static struct cdns_reg_pairs pcie_usb_link_cmn_regs[] = {
3037         {0x0003, PHY_PLL_CFG},
3038         {0x0601, CMN_PDIAG_PLL0_CLK_SEL_M0},
3039         {0x0400, CMN_PDIAG_PLL0_CLK_SEL_M1},
3040         {0x8600, CMN_PDIAG_PLL1_CLK_SEL_M0}
3041 };
3042
3043 static struct cdns_reg_pairs pcie_usb_xcvr_diag_ln_regs[] = {
3044         {0x0000, XCVR_DIAG_HSCLK_SEL},
3045         {0x0001, XCVR_DIAG_HSCLK_DIV},
3046         {0x0012, XCVR_DIAG_PLLDRC_CTRL}
3047 };
3048
3049 static struct cdns_reg_pairs usb_pcie_xcvr_diag_ln_regs[] = {
3050         {0x0011, XCVR_DIAG_HSCLK_SEL},
3051         {0x0001, XCVR_DIAG_HSCLK_DIV},
3052         {0x00C9, XCVR_DIAG_PLLDRC_CTRL}
3053 };
3054
3055 static struct cdns_torrent_vals pcie_usb_link_cmn_vals = {
3056         .reg_pairs = pcie_usb_link_cmn_regs,
3057         .num_regs = ARRAY_SIZE(pcie_usb_link_cmn_regs),
3058 };
3059
3060 static struct cdns_torrent_vals pcie_usb_xcvr_diag_ln_vals = {
3061         .reg_pairs = pcie_usb_xcvr_diag_ln_regs,
3062         .num_regs = ARRAY_SIZE(pcie_usb_xcvr_diag_ln_regs),
3063 };
3064
3065 static struct cdns_torrent_vals usb_pcie_xcvr_diag_ln_vals = {
3066         .reg_pairs = usb_pcie_xcvr_diag_ln_regs,
3067         .num_regs = ARRAY_SIZE(usb_pcie_xcvr_diag_ln_regs),
3068 };
3069
3070 /* USB 100 MHz Ref clk, internal SSC */
3071 static struct cdns_reg_pairs usb_100_int_ssc_cmn_regs[] = {
3072         {0x0004, CMN_PLL0_DSM_DIAG_M0},
3073         {0x0004, CMN_PLL0_DSM_DIAG_M1},
3074         {0x0004, CMN_PLL1_DSM_DIAG_M0},
3075         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
3076         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
3077         {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
3078         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
3079         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
3080         {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
3081         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
3082         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
3083         {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
3084         {0x0064, CMN_PLL0_INTDIV_M0},
3085         {0x0050, CMN_PLL0_INTDIV_M1},
3086         {0x0064, CMN_PLL1_INTDIV_M0},
3087         {0x0002, CMN_PLL0_FRACDIVH_M0},
3088         {0x0002, CMN_PLL0_FRACDIVH_M1},
3089         {0x0002, CMN_PLL1_FRACDIVH_M0},
3090         {0x0044, CMN_PLL0_HIGH_THR_M0},
3091         {0x0036, CMN_PLL0_HIGH_THR_M1},
3092         {0x0044, CMN_PLL1_HIGH_THR_M0},
3093         {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
3094         {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
3095         {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
3096         {0x0001, CMN_PLL0_SS_CTRL1_M0},
3097         {0x0001, CMN_PLL0_SS_CTRL1_M1},
3098         {0x0001, CMN_PLL1_SS_CTRL1_M0},
3099         {0x011B, CMN_PLL0_SS_CTRL2_M0},
3100         {0x011B, CMN_PLL0_SS_CTRL2_M1},
3101         {0x011B, CMN_PLL1_SS_CTRL2_M0},
3102         {0x006E, CMN_PLL0_SS_CTRL3_M0},
3103         {0x0058, CMN_PLL0_SS_CTRL3_M1},
3104         {0x006E, CMN_PLL1_SS_CTRL3_M0},
3105         {0x000E, CMN_PLL0_SS_CTRL4_M0},
3106         {0x0012, CMN_PLL0_SS_CTRL4_M1},
3107         {0x000E, CMN_PLL1_SS_CTRL4_M0},
3108         {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
3109         {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
3110         {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
3111         {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
3112         {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
3113         {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
3114         {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
3115         {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
3116         {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
3117         {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
3118         {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
3119         {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD},
3120         {0x007F, CMN_TXPUCAL_TUNE},
3121         {0x007F, CMN_TXPDCAL_TUNE}
3122 };
3123
3124 static struct cdns_torrent_vals usb_100_int_ssc_cmn_vals = {
3125         .reg_pairs = usb_100_int_ssc_cmn_regs,
3126         .num_regs = ARRAY_SIZE(usb_100_int_ssc_cmn_regs),
3127 };
3128
3129 /* Single USB link configuration */
3130 static struct cdns_reg_pairs sl_usb_link_cmn_regs[] = {
3131         {0x0000, PHY_PLL_CFG},
3132         {0x8600, CMN_PDIAG_PLL0_CLK_SEL_M0}
3133 };
3134
3135 static struct cdns_reg_pairs sl_usb_xcvr_diag_ln_regs[] = {
3136         {0x0000, XCVR_DIAG_HSCLK_SEL},
3137         {0x0001, XCVR_DIAG_HSCLK_DIV},
3138         {0x0041, XCVR_DIAG_PLLDRC_CTRL}
3139 };
3140
3141 static struct cdns_torrent_vals sl_usb_link_cmn_vals = {
3142         .reg_pairs = sl_usb_link_cmn_regs,
3143         .num_regs = ARRAY_SIZE(sl_usb_link_cmn_regs),
3144 };
3145
3146 static struct cdns_torrent_vals sl_usb_xcvr_diag_ln_vals = {
3147         .reg_pairs = sl_usb_xcvr_diag_ln_regs,
3148         .num_regs = ARRAY_SIZE(sl_usb_xcvr_diag_ln_regs),
3149 };
3150
3151 /* USB PHY PCS common configuration */
3152 static struct cdns_reg_pairs usb_phy_pcs_cmn_regs[] = {
3153         {0x0A0A, PHY_PIPE_USB3_GEN2_PRE_CFG0},
3154         {0x1000, PHY_PIPE_USB3_GEN2_POST_CFG0},
3155         {0x0010, PHY_PIPE_USB3_GEN2_POST_CFG1}
3156 };
3157
3158 static struct cdns_torrent_vals usb_phy_pcs_cmn_vals = {
3159         .reg_pairs = usb_phy_pcs_cmn_regs,
3160         .num_regs = ARRAY_SIZE(usb_phy_pcs_cmn_regs),
3161 };
3162
3163 /* USB 100 MHz Ref clk, no SSC */
3164 static struct cdns_reg_pairs sl_usb_100_no_ssc_cmn_regs[] = {
3165         {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
3166         {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
3167         {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0},
3168         {0x0003, CMN_PLL0_VCOCAL_TCTRL},
3169         {0x0003, CMN_PLL1_VCOCAL_TCTRL},
3170         {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
3171         {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD}
3172 };
3173
3174 static struct cdns_torrent_vals sl_usb_100_no_ssc_cmn_vals = {
3175         .reg_pairs = sl_usb_100_no_ssc_cmn_regs,
3176         .num_regs = ARRAY_SIZE(sl_usb_100_no_ssc_cmn_regs),
3177 };
3178
3179 static struct cdns_reg_pairs usb_100_no_ssc_cmn_regs[] = {
3180         {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
3181         {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD},
3182         {0x007F, CMN_TXPUCAL_TUNE},
3183         {0x007F, CMN_TXPDCAL_TUNE}
3184 };
3185
3186 static struct cdns_reg_pairs usb_100_no_ssc_tx_ln_regs[] = {
3187         {0x02FF, TX_PSC_A0},
3188         {0x06AF, TX_PSC_A1},
3189         {0x06AE, TX_PSC_A2},
3190         {0x06AE, TX_PSC_A3},
3191         {0x2A82, TX_TXCC_CTRL},
3192         {0x0014, TX_TXCC_CPOST_MULT_01},
3193         {0x0003, XCVR_DIAG_PSC_OVRD}
3194 };
3195
3196 static struct cdns_reg_pairs usb_100_no_ssc_rx_ln_regs[] = {
3197         {0x0D1D, RX_PSC_A0},
3198         {0x0D1D, RX_PSC_A1},
3199         {0x0D00, RX_PSC_A2},
3200         {0x0500, RX_PSC_A3},
3201         {0x0013, RX_SIGDET_HL_FILT_TMR},
3202         {0x0000, RX_REE_GCSM1_CTRL},
3203         {0x0C02, RX_REE_ATTEN_THR},
3204         {0x0330, RX_REE_SMGM_CTRL1},
3205         {0x0300, RX_REE_SMGM_CTRL2},
3206         {0x0019, RX_REE_TAP1_CLIP},
3207         {0x0019, RX_REE_TAP2TON_CLIP},
3208         {0x1004, RX_DIAG_SIGDET_TUNE},
3209         {0x00F9, RX_DIAG_NQST_CTRL},
3210         {0x0C01, RX_DIAG_DFE_AMP_TUNE_2},
3211         {0x0002, RX_DIAG_DFE_AMP_TUNE_3},
3212         {0x0000, RX_DIAG_PI_CAP},
3213         {0x0031, RX_DIAG_PI_RATE},
3214         {0x0001, RX_DIAG_ACYA},
3215         {0x018C, RX_CDRLF_CNFG},
3216         {0x0003, RX_CDRLF_CNFG3}
3217 };
3218
3219 static struct cdns_torrent_vals usb_100_no_ssc_cmn_vals = {
3220         .reg_pairs = usb_100_no_ssc_cmn_regs,
3221         .num_regs = ARRAY_SIZE(usb_100_no_ssc_cmn_regs),
3222 };
3223
3224 static struct cdns_torrent_vals usb_100_no_ssc_tx_ln_vals = {
3225         .reg_pairs = usb_100_no_ssc_tx_ln_regs,
3226         .num_regs = ARRAY_SIZE(usb_100_no_ssc_tx_ln_regs),
3227 };
3228
3229 static struct cdns_torrent_vals usb_100_no_ssc_rx_ln_vals = {
3230         .reg_pairs = usb_100_no_ssc_rx_ln_regs,
3231         .num_regs = ARRAY_SIZE(usb_100_no_ssc_rx_ln_regs),
3232 };
3233
3234 /* Single link USB, 100 MHz Ref clk, internal SSC */
3235 static struct cdns_reg_pairs sl_usb_100_int_ssc_cmn_regs[] = {
3236         {0x0004, CMN_PLL0_DSM_DIAG_M0},
3237         {0x0004, CMN_PLL1_DSM_DIAG_M0},
3238         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
3239         {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
3240         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
3241         {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
3242         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
3243         {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
3244         {0x0064, CMN_PLL0_INTDIV_M0},
3245         {0x0064, CMN_PLL1_INTDIV_M0},
3246         {0x0002, CMN_PLL0_FRACDIVH_M0},
3247         {0x0002, CMN_PLL1_FRACDIVH_M0},
3248         {0x0044, CMN_PLL0_HIGH_THR_M0},
3249         {0x0044, CMN_PLL1_HIGH_THR_M0},
3250         {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
3251         {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
3252         {0x0001, CMN_PLL0_SS_CTRL1_M0},
3253         {0x0001, CMN_PLL1_SS_CTRL1_M0},
3254         {0x011B, CMN_PLL0_SS_CTRL2_M0},
3255         {0x011B, CMN_PLL1_SS_CTRL2_M0},
3256         {0x006E, CMN_PLL0_SS_CTRL3_M0},
3257         {0x006E, CMN_PLL1_SS_CTRL3_M0},
3258         {0x000E, CMN_PLL0_SS_CTRL4_M0},
3259         {0x000E, CMN_PLL1_SS_CTRL4_M0},
3260         {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
3261         {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
3262         {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
3263         {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
3264         {0x0003, CMN_PLL0_VCOCAL_TCTRL},
3265         {0x0003, CMN_PLL1_VCOCAL_TCTRL},
3266         {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
3267         {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
3268         {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
3269         {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
3270         {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
3271         {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
3272         {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
3273         {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD}
3274 };
3275
3276 static struct cdns_torrent_vals sl_usb_100_int_ssc_cmn_vals = {
3277         .reg_pairs = sl_usb_100_int_ssc_cmn_regs,
3278         .num_regs = ARRAY_SIZE(sl_usb_100_int_ssc_cmn_regs),
3279 };
3280
3281 /* PCIe and SGMII/QSGMII Unique SSC link configuration */
3282 static struct cdns_reg_pairs pcie_sgmii_link_cmn_regs[] = {
3283         {0x0003, PHY_PLL_CFG},
3284         {0x0601, CMN_PDIAG_PLL0_CLK_SEL_M0},
3285         {0x0400, CMN_PDIAG_PLL0_CLK_SEL_M1},
3286         {0x0601, CMN_PDIAG_PLL1_CLK_SEL_M0}
3287 };
3288
3289 static struct cdns_reg_pairs pcie_sgmii_xcvr_diag_ln_regs[] = {
3290         {0x0000, XCVR_DIAG_HSCLK_SEL},
3291         {0x0001, XCVR_DIAG_HSCLK_DIV},
3292         {0x0012, XCVR_DIAG_PLLDRC_CTRL}
3293 };
3294
3295 static struct cdns_reg_pairs sgmii_pcie_xcvr_diag_ln_regs[] = {
3296         {0x0011, XCVR_DIAG_HSCLK_SEL},
3297         {0x0003, XCVR_DIAG_HSCLK_DIV},
3298         {0x009B, XCVR_DIAG_PLLDRC_CTRL}
3299 };
3300
3301 static struct cdns_torrent_vals pcie_sgmii_link_cmn_vals = {
3302         .reg_pairs = pcie_sgmii_link_cmn_regs,
3303         .num_regs = ARRAY_SIZE(pcie_sgmii_link_cmn_regs),
3304 };
3305
3306 static struct cdns_torrent_vals pcie_sgmii_xcvr_diag_ln_vals = {
3307         .reg_pairs = pcie_sgmii_xcvr_diag_ln_regs,
3308         .num_regs = ARRAY_SIZE(pcie_sgmii_xcvr_diag_ln_regs),
3309 };
3310
3311 static struct cdns_torrent_vals sgmii_pcie_xcvr_diag_ln_vals = {
3312         .reg_pairs = sgmii_pcie_xcvr_diag_ln_regs,
3313         .num_regs = ARRAY_SIZE(sgmii_pcie_xcvr_diag_ln_regs),
3314 };
3315
3316 /* SGMII 100 MHz Ref clk, no SSC */
3317 static struct cdns_reg_pairs sl_sgmii_100_no_ssc_cmn_regs[] = {
3318         {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
3319         {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
3320         {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0},
3321         {0x0003, CMN_PLL0_VCOCAL_TCTRL},
3322         {0x0003, CMN_PLL1_VCOCAL_TCTRL}
3323 };
3324
3325 static struct cdns_torrent_vals sl_sgmii_100_no_ssc_cmn_vals = {
3326         .reg_pairs = sl_sgmii_100_no_ssc_cmn_regs,
3327         .num_regs = ARRAY_SIZE(sl_sgmii_100_no_ssc_cmn_regs),
3328 };
3329
3330 static struct cdns_reg_pairs sgmii_100_no_ssc_cmn_regs[] = {
3331         {0x007F, CMN_TXPUCAL_TUNE},
3332         {0x007F, CMN_TXPDCAL_TUNE}
3333 };
3334
3335 static struct cdns_reg_pairs sgmii_100_no_ssc_tx_ln_regs[] = {
3336         {0x00F3, TX_PSC_A0},
3337         {0x04A2, TX_PSC_A2},
3338         {0x04A2, TX_PSC_A3},
3339         {0x0000, TX_TXCC_CPOST_MULT_00},
3340         {0x00B3, DRV_DIAG_TX_DRV}
3341 };
3342
3343 static struct cdns_reg_pairs ti_sgmii_100_no_ssc_tx_ln_regs[] = {
3344         {0x00F3, TX_PSC_A0},
3345         {0x04A2, TX_PSC_A2},
3346         {0x04A2, TX_PSC_A3},
3347         {0x0000, TX_TXCC_CPOST_MULT_00},
3348         {0x00B3, DRV_DIAG_TX_DRV},
3349         {0x4000, XCVR_DIAG_RXCLK_CTRL},
3350 };
3351
3352 static struct cdns_reg_pairs sgmii_100_no_ssc_rx_ln_regs[] = {
3353         {0x091D, RX_PSC_A0},
3354         {0x0900, RX_PSC_A2},
3355         {0x0100, RX_PSC_A3},
3356         {0x03C7, RX_REE_GCSM1_EQENM_PH1},
3357         {0x01C7, RX_REE_GCSM1_EQENM_PH2},
3358         {0x0000, RX_DIAG_DFE_CTRL},
3359         {0x0019, RX_REE_TAP1_CLIP},
3360         {0x0019, RX_REE_TAP2TON_CLIP},
3361         {0x0098, RX_DIAG_NQST_CTRL},
3362         {0x0C01, RX_DIAG_DFE_AMP_TUNE_2},
3363         {0x0000, RX_DIAG_DFE_AMP_TUNE_3},
3364         {0x0000, RX_DIAG_PI_CAP},
3365         {0x0010, RX_DIAG_PI_RATE},
3366         {0x0001, RX_DIAG_ACYA},
3367         {0x018C, RX_CDRLF_CNFG},
3368 };
3369
3370 static struct cdns_torrent_vals sgmii_100_no_ssc_cmn_vals = {
3371         .reg_pairs = sgmii_100_no_ssc_cmn_regs,
3372         .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_cmn_regs),
3373 };
3374
3375 static struct cdns_torrent_vals sgmii_100_no_ssc_tx_ln_vals = {
3376         .reg_pairs = sgmii_100_no_ssc_tx_ln_regs,
3377         .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_tx_ln_regs),
3378 };
3379
3380 static struct cdns_torrent_vals ti_sgmii_100_no_ssc_tx_ln_vals = {
3381         .reg_pairs = ti_sgmii_100_no_ssc_tx_ln_regs,
3382         .num_regs = ARRAY_SIZE(ti_sgmii_100_no_ssc_tx_ln_regs),
3383 };
3384
3385 static struct cdns_torrent_vals sgmii_100_no_ssc_rx_ln_vals = {
3386         .reg_pairs = sgmii_100_no_ssc_rx_ln_regs,
3387         .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_rx_ln_regs),
3388 };
3389
3390 /* SGMII 100 MHz Ref clk, internal SSC */
3391 static struct cdns_reg_pairs sgmii_100_int_ssc_cmn_regs[] = {
3392         {0x0004, CMN_PLL0_DSM_DIAG_M0},
3393         {0x0004, CMN_PLL0_DSM_DIAG_M1},
3394         {0x0004, CMN_PLL1_DSM_DIAG_M0},
3395         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
3396         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
3397         {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
3398         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
3399         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
3400         {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
3401         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
3402         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
3403         {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
3404         {0x0064, CMN_PLL0_INTDIV_M0},
3405         {0x0050, CMN_PLL0_INTDIV_M1},
3406         {0x0064, CMN_PLL1_INTDIV_M0},
3407         {0x0002, CMN_PLL0_FRACDIVH_M0},
3408         {0x0002, CMN_PLL0_FRACDIVH_M1},
3409         {0x0002, CMN_PLL1_FRACDIVH_M0},
3410         {0x0044, CMN_PLL0_HIGH_THR_M0},
3411         {0x0036, CMN_PLL0_HIGH_THR_M1},
3412         {0x0044, CMN_PLL1_HIGH_THR_M0},
3413         {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
3414         {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
3415         {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
3416         {0x0001, CMN_PLL0_SS_CTRL1_M0},
3417         {0x0001, CMN_PLL0_SS_CTRL1_M1},
3418         {0x0001, CMN_PLL1_SS_CTRL1_M0},
3419         {0x011B, CMN_PLL0_SS_CTRL2_M0},
3420         {0x011B, CMN_PLL0_SS_CTRL2_M1},
3421         {0x011B, CMN_PLL1_SS_CTRL2_M0},
3422         {0x006E, CMN_PLL0_SS_CTRL3_M0},
3423         {0x0058, CMN_PLL0_SS_CTRL3_M1},
3424         {0x006E, CMN_PLL1_SS_CTRL3_M0},
3425         {0x000E, CMN_PLL0_SS_CTRL4_M0},
3426         {0x0012, CMN_PLL0_SS_CTRL4_M1},
3427         {0x000E, CMN_PLL1_SS_CTRL4_M0},
3428         {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
3429         {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
3430         {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
3431         {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
3432         {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
3433         {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
3434         {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
3435         {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
3436         {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
3437         {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
3438         {0x007F, CMN_TXPUCAL_TUNE},
3439         {0x007F, CMN_TXPDCAL_TUNE}
3440 };
3441
3442 static struct cdns_torrent_vals sgmii_100_int_ssc_cmn_vals = {
3443         .reg_pairs = sgmii_100_int_ssc_cmn_regs,
3444         .num_regs = ARRAY_SIZE(sgmii_100_int_ssc_cmn_regs),
3445 };
3446
3447 /* QSGMII 100 MHz Ref clk, no SSC */
3448 static struct cdns_reg_pairs sl_qsgmii_100_no_ssc_cmn_regs[] = {
3449         {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
3450         {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
3451         {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0},
3452         {0x0003, CMN_PLL0_VCOCAL_TCTRL},
3453         {0x0003, CMN_PLL1_VCOCAL_TCTRL}
3454 };
3455
3456 static struct cdns_torrent_vals sl_qsgmii_100_no_ssc_cmn_vals = {
3457         .reg_pairs = sl_qsgmii_100_no_ssc_cmn_regs,
3458         .num_regs = ARRAY_SIZE(sl_qsgmii_100_no_ssc_cmn_regs),
3459 };
3460
3461 static struct cdns_reg_pairs qsgmii_100_no_ssc_cmn_regs[] = {
3462         {0x007F, CMN_TXPUCAL_TUNE},
3463         {0x007F, CMN_TXPDCAL_TUNE}
3464 };
3465
3466 static struct cdns_reg_pairs qsgmii_100_no_ssc_tx_ln_regs[] = {
3467         {0x00F3, TX_PSC_A0},
3468         {0x04A2, TX_PSC_A2},
3469         {0x04A2, TX_PSC_A3},
3470         {0x0000, TX_TXCC_CPOST_MULT_00},
3471         {0x0011, TX_TXCC_MGNFS_MULT_100},
3472         {0x0003, DRV_DIAG_TX_DRV}
3473 };
3474
3475 static struct cdns_reg_pairs ti_qsgmii_100_no_ssc_tx_ln_regs[] = {
3476         {0x00F3, TX_PSC_A0},
3477         {0x04A2, TX_PSC_A2},
3478         {0x04A2, TX_PSC_A3},
3479         {0x0000, TX_TXCC_CPOST_MULT_00},
3480         {0x0011, TX_TXCC_MGNFS_MULT_100},
3481         {0x0003, DRV_DIAG_TX_DRV},
3482         {0x4000, XCVR_DIAG_RXCLK_CTRL},
3483 };
3484
3485 static struct cdns_reg_pairs qsgmii_100_no_ssc_rx_ln_regs[] = {
3486         {0x091D, RX_PSC_A0},
3487         {0x0900, RX_PSC_A2},
3488         {0x0100, RX_PSC_A3},
3489         {0x03C7, RX_REE_GCSM1_EQENM_PH1},
3490         {0x01C7, RX_REE_GCSM1_EQENM_PH2},
3491         {0x0000, RX_DIAG_DFE_CTRL},
3492         {0x0019, RX_REE_TAP1_CLIP},
3493         {0x0019, RX_REE_TAP2TON_CLIP},
3494         {0x0098, RX_DIAG_NQST_CTRL},
3495         {0x0C01, RX_DIAG_DFE_AMP_TUNE_2},
3496         {0x0000, RX_DIAG_DFE_AMP_TUNE_3},
3497         {0x0000, RX_DIAG_PI_CAP},
3498         {0x0010, RX_DIAG_PI_RATE},
3499         {0x0001, RX_DIAG_ACYA},
3500         {0x018C, RX_CDRLF_CNFG},
3501 };
3502
3503 static struct cdns_torrent_vals qsgmii_100_no_ssc_cmn_vals = {
3504         .reg_pairs = qsgmii_100_no_ssc_cmn_regs,
3505         .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_cmn_regs),
3506 };
3507
3508 static struct cdns_torrent_vals qsgmii_100_no_ssc_tx_ln_vals = {
3509         .reg_pairs = qsgmii_100_no_ssc_tx_ln_regs,
3510         .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_tx_ln_regs),
3511 };
3512
3513 static struct cdns_torrent_vals ti_qsgmii_100_no_ssc_tx_ln_vals = {
3514         .reg_pairs = ti_qsgmii_100_no_ssc_tx_ln_regs,
3515         .num_regs = ARRAY_SIZE(ti_qsgmii_100_no_ssc_tx_ln_regs),
3516 };
3517
3518 static struct cdns_torrent_vals qsgmii_100_no_ssc_rx_ln_vals = {
3519         .reg_pairs = qsgmii_100_no_ssc_rx_ln_regs,
3520         .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_rx_ln_regs),
3521 };
3522
3523 /* QSGMII 100 MHz Ref clk, internal SSC */
3524 static struct cdns_reg_pairs qsgmii_100_int_ssc_cmn_regs[] = {
3525         {0x0004, CMN_PLL0_DSM_DIAG_M0},
3526         {0x0004, CMN_PLL0_DSM_DIAG_M1},
3527         {0x0004, CMN_PLL1_DSM_DIAG_M0},
3528         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
3529         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
3530         {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
3531         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
3532         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
3533         {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
3534         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
3535         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
3536         {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
3537         {0x0064, CMN_PLL0_INTDIV_M0},
3538         {0x0050, CMN_PLL0_INTDIV_M1},
3539         {0x0064, CMN_PLL1_INTDIV_M0},
3540         {0x0002, CMN_PLL0_FRACDIVH_M0},
3541         {0x0002, CMN_PLL0_FRACDIVH_M1},
3542         {0x0002, CMN_PLL1_FRACDIVH_M0},
3543         {0x0044, CMN_PLL0_HIGH_THR_M0},
3544         {0x0036, CMN_PLL0_HIGH_THR_M1},
3545         {0x0044, CMN_PLL1_HIGH_THR_M0},
3546         {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
3547         {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
3548         {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
3549         {0x0001, CMN_PLL0_SS_CTRL1_M0},
3550         {0x0001, CMN_PLL0_SS_CTRL1_M1},
3551         {0x0001, CMN_PLL1_SS_CTRL1_M0},
3552         {0x011B, CMN_PLL0_SS_CTRL2_M0},
3553         {0x011B, CMN_PLL0_SS_CTRL2_M1},
3554         {0x011B, CMN_PLL1_SS_CTRL2_M0},
3555         {0x006E, CMN_PLL0_SS_CTRL3_M0},
3556         {0x0058, CMN_PLL0_SS_CTRL3_M1},
3557         {0x006E, CMN_PLL1_SS_CTRL3_M0},
3558         {0x000E, CMN_PLL0_SS_CTRL4_M0},
3559         {0x0012, CMN_PLL0_SS_CTRL4_M1},
3560         {0x000E, CMN_PLL1_SS_CTRL4_M0},
3561         {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
3562         {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
3563         {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
3564         {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
3565         {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
3566         {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
3567         {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
3568         {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
3569         {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
3570         {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
3571         {0x007F, CMN_TXPUCAL_TUNE},
3572         {0x007F, CMN_TXPDCAL_TUNE}
3573 };
3574
3575 static struct cdns_torrent_vals qsgmii_100_int_ssc_cmn_vals = {
3576         .reg_pairs = qsgmii_100_int_ssc_cmn_regs,
3577         .num_regs = ARRAY_SIZE(qsgmii_100_int_ssc_cmn_regs),
3578 };
3579
3580 /* Single SGMII/QSGMII link configuration */
3581 static struct cdns_reg_pairs sl_sgmii_link_cmn_regs[] = {
3582         {0x0000, PHY_PLL_CFG},
3583         {0x0601, CMN_PDIAG_PLL0_CLK_SEL_M0}
3584 };
3585
3586 static struct cdns_reg_pairs sl_sgmii_xcvr_diag_ln_regs[] = {
3587         {0x0000, XCVR_DIAG_HSCLK_SEL},
3588         {0x0003, XCVR_DIAG_HSCLK_DIV},
3589         {0x0013, XCVR_DIAG_PLLDRC_CTRL}
3590 };
3591
3592 static struct cdns_torrent_vals sl_sgmii_link_cmn_vals = {
3593         .reg_pairs = sl_sgmii_link_cmn_regs,
3594         .num_regs = ARRAY_SIZE(sl_sgmii_link_cmn_regs),
3595 };
3596
3597 static struct cdns_torrent_vals sl_sgmii_xcvr_diag_ln_vals = {
3598         .reg_pairs = sl_sgmii_xcvr_diag_ln_regs,
3599         .num_regs = ARRAY_SIZE(sl_sgmii_xcvr_diag_ln_regs),
3600 };
3601
3602 /* Multi link PCIe, 100 MHz Ref clk, internal SSC */
3603 static struct cdns_reg_pairs pcie_100_int_ssc_cmn_regs[] = {
3604         {0x0004, CMN_PLL0_DSM_DIAG_M0},
3605         {0x0004, CMN_PLL0_DSM_DIAG_M1},
3606         {0x0004, CMN_PLL1_DSM_DIAG_M0},
3607         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
3608         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
3609         {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
3610         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
3611         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
3612         {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
3613         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
3614         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
3615         {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
3616         {0x0064, CMN_PLL0_INTDIV_M0},
3617         {0x0050, CMN_PLL0_INTDIV_M1},
3618         {0x0064, CMN_PLL1_INTDIV_M0},
3619         {0x0002, CMN_PLL0_FRACDIVH_M0},
3620         {0x0002, CMN_PLL0_FRACDIVH_M1},
3621         {0x0002, CMN_PLL1_FRACDIVH_M0},
3622         {0x0044, CMN_PLL0_HIGH_THR_M0},
3623         {0x0036, CMN_PLL0_HIGH_THR_M1},
3624         {0x0044, CMN_PLL1_HIGH_THR_M0},
3625         {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
3626         {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
3627         {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
3628         {0x0001, CMN_PLL0_SS_CTRL1_M0},
3629         {0x0001, CMN_PLL0_SS_CTRL1_M1},
3630         {0x0001, CMN_PLL1_SS_CTRL1_M0},
3631         {0x011B, CMN_PLL0_SS_CTRL2_M0},
3632         {0x011B, CMN_PLL0_SS_CTRL2_M1},
3633         {0x011B, CMN_PLL1_SS_CTRL2_M0},
3634         {0x006E, CMN_PLL0_SS_CTRL3_M0},
3635         {0x0058, CMN_PLL0_SS_CTRL3_M1},
3636         {0x006E, CMN_PLL1_SS_CTRL3_M0},
3637         {0x000E, CMN_PLL0_SS_CTRL4_M0},
3638         {0x0012, CMN_PLL0_SS_CTRL4_M1},
3639         {0x000E, CMN_PLL1_SS_CTRL4_M0},
3640         {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
3641         {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
3642         {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
3643         {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
3644         {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
3645         {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
3646         {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
3647         {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
3648         {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
3649         {0x0005, CMN_PLL1_LOCK_PLLCNT_THR}
3650 };
3651
3652 static struct cdns_torrent_vals pcie_100_int_ssc_cmn_vals = {
3653         .reg_pairs = pcie_100_int_ssc_cmn_regs,
3654         .num_regs = ARRAY_SIZE(pcie_100_int_ssc_cmn_regs),
3655 };
3656
3657 /* Single link PCIe, 100 MHz Ref clk, internal SSC */
3658 static struct cdns_reg_pairs sl_pcie_100_int_ssc_cmn_regs[] = {
3659         {0x0004, CMN_PLL0_DSM_DIAG_M0},
3660         {0x0004, CMN_PLL0_DSM_DIAG_M1},
3661         {0x0004, CMN_PLL1_DSM_DIAG_M0},
3662         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
3663         {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
3664         {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
3665         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
3666         {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
3667         {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
3668         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
3669         {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
3670         {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
3671         {0x0064, CMN_PLL0_INTDIV_M0},
3672         {0x0050, CMN_PLL0_INTDIV_M1},
3673         {0x0050, CMN_PLL1_INTDIV_M0},
3674         {0x0002, CMN_PLL0_FRACDIVH_M0},
3675         {0x0002, CMN_PLL0_FRACDIVH_M1},
3676         {0x0002, CMN_PLL1_FRACDIVH_M0},
3677         {0x0044, CMN_PLL0_HIGH_THR_M0},
3678         {0x0036, CMN_PLL0_HIGH_THR_M1},
3679         {0x0036, CMN_PLL1_HIGH_THR_M0},
3680         {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
3681         {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
3682         {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
3683         {0x0001, CMN_PLL0_SS_CTRL1_M0},
3684         {0x0001, CMN_PLL0_SS_CTRL1_M1},
3685         {0x0001, CMN_PLL1_SS_CTRL1_M0},
3686         {0x011B, CMN_PLL0_SS_CTRL2_M0},
3687         {0x011B, CMN_PLL0_SS_CTRL2_M1},
3688         {0x011B, CMN_PLL1_SS_CTRL2_M0},
3689         {0x006E, CMN_PLL0_SS_CTRL3_M0},
3690         {0x0058, CMN_PLL0_SS_CTRL3_M1},
3691         {0x0058, CMN_PLL1_SS_CTRL3_M0},
3692         {0x000E, CMN_PLL0_SS_CTRL4_M0},
3693         {0x0012, CMN_PLL0_SS_CTRL4_M1},
3694         {0x0012, CMN_PLL1_SS_CTRL4_M0},
3695         {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
3696         {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
3697         {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
3698         {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
3699         {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
3700         {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
3701         {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
3702         {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
3703         {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
3704         {0x0005, CMN_PLL1_LOCK_PLLCNT_THR}
3705 };
3706
3707 static struct cdns_torrent_vals sl_pcie_100_int_ssc_cmn_vals = {
3708         .reg_pairs = sl_pcie_100_int_ssc_cmn_regs,
3709         .num_regs = ARRAY_SIZE(sl_pcie_100_int_ssc_cmn_regs),
3710 };
3711
3712 /* PCIe, 100 MHz Ref clk, no SSC & external SSC */
3713 static struct cdns_reg_pairs pcie_100_ext_no_ssc_cmn_regs[] = {
3714         {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
3715         {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
3716         {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0}
3717 };
3718
3719 static struct cdns_reg_pairs pcie_100_ext_no_ssc_rx_ln_regs[] = {
3720         {0x0019, RX_REE_TAP1_CLIP},
3721         {0x0019, RX_REE_TAP2TON_CLIP},
3722         {0x0001, RX_DIAG_ACYA}
3723 };
3724
3725 static struct cdns_torrent_vals pcie_100_no_ssc_cmn_vals = {
3726         .reg_pairs = pcie_100_ext_no_ssc_cmn_regs,
3727         .num_regs = ARRAY_SIZE(pcie_100_ext_no_ssc_cmn_regs),
3728 };
3729
3730 static struct cdns_torrent_vals pcie_100_no_ssc_rx_ln_vals = {
3731         .reg_pairs = pcie_100_ext_no_ssc_rx_ln_regs,
3732         .num_regs = ARRAY_SIZE(pcie_100_ext_no_ssc_rx_ln_regs),
3733 };
3734
3735 static const struct cdns_torrent_data cdns_map_torrent = {
3736         .block_offset_shift = 0x2,
3737         .reg_offset_shift = 0x2,
3738         .link_cmn_vals = {
3739                 [TYPE_DP] = {
3740                         [TYPE_NONE] = {
3741                                 [NO_SSC] = &sl_dp_link_cmn_vals,
3742                         },
3743                 },
3744                 [TYPE_PCIE] = {
3745                         [TYPE_NONE] = {
3746                                 [NO_SSC] = NULL,
3747                                 [EXTERNAL_SSC] = NULL,
3748                                 [INTERNAL_SSC] = NULL,
3749                         },
3750                         [TYPE_SGMII] = {
3751                                 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
3752                                 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
3753                                 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
3754                         },
3755                         [TYPE_QSGMII] = {
3756                                 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
3757                                 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
3758                                 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
3759                         },
3760                         [TYPE_USB] = {
3761                                 [NO_SSC] = &pcie_usb_link_cmn_vals,
3762                                 [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
3763                                 [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
3764                         },
3765                 },
3766                 [TYPE_SGMII] = {
3767                         [TYPE_NONE] = {
3768                                 [NO_SSC] = &sl_sgmii_link_cmn_vals,
3769                         },
3770                         [TYPE_PCIE] = {
3771                                 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
3772                                 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
3773                                 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
3774                         },
3775                         [TYPE_USB] = {
3776                                 [NO_SSC] = &usb_sgmii_link_cmn_vals,
3777                                 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
3778                                 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
3779                         },
3780                 },
3781                 [TYPE_QSGMII] = {
3782                         [TYPE_NONE] = {
3783                                 [NO_SSC] = &sl_sgmii_link_cmn_vals,
3784                         },
3785                         [TYPE_PCIE] = {
3786                                 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
3787                                 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
3788                                 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
3789                         },
3790                         [TYPE_USB] = {
3791                                 [NO_SSC] = &usb_sgmii_link_cmn_vals,
3792                                 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
3793                                 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
3794                         },
3795                 },
3796                 [TYPE_USB] = {
3797                         [TYPE_NONE] = {
3798                                 [NO_SSC] = &sl_usb_link_cmn_vals,
3799                                 [EXTERNAL_SSC] = &sl_usb_link_cmn_vals,
3800                                 [INTERNAL_SSC] = &sl_usb_link_cmn_vals,
3801                         },
3802                         [TYPE_PCIE] = {
3803                                 [NO_SSC] = &pcie_usb_link_cmn_vals,
3804                                 [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
3805                                 [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
3806                         },
3807                         [TYPE_SGMII] = {
3808                                 [NO_SSC] = &usb_sgmii_link_cmn_vals,
3809                                 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
3810                                 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
3811                         },
3812                         [TYPE_QSGMII] = {
3813                                 [NO_SSC] = &usb_sgmii_link_cmn_vals,
3814                                 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
3815                                 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
3816                         },
3817                 },
3818         },
3819         .xcvr_diag_vals = {
3820                 [TYPE_DP] = {
3821                         [TYPE_NONE] = {
3822                                 [NO_SSC] = &sl_dp_xcvr_diag_ln_vals,
3823                         },
3824                 },
3825                 [TYPE_PCIE] = {
3826                         [TYPE_NONE] = {
3827                                 [NO_SSC] = NULL,
3828                                 [EXTERNAL_SSC] = NULL,
3829                                 [INTERNAL_SSC] = NULL,
3830                         },
3831                         [TYPE_SGMII] = {
3832                                 [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
3833                                 [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
3834                                 [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
3835                         },
3836                         [TYPE_QSGMII] = {
3837                                 [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
3838                                 [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
3839                                 [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
3840                         },
3841                         [TYPE_USB] = {
3842                                 [NO_SSC] = &pcie_usb_xcvr_diag_ln_vals,
3843                                 [EXTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
3844                                 [INTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
3845                         },
3846                 },
3847                 [TYPE_SGMII] = {
3848                         [TYPE_NONE] = {
3849                                 [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
3850                         },
3851                         [TYPE_PCIE] = {
3852                                 [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
3853                                 [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
3854                                 [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
3855                         },
3856                         [TYPE_USB] = {
3857                                 [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
3858                                 [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
3859                                 [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
3860                         },
3861                 },
3862                 [TYPE_QSGMII] = {
3863                         [TYPE_NONE] = {
3864                                 [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
3865                         },
3866                         [TYPE_PCIE] = {
3867                                 [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
3868                                 [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
3869                                 [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
3870                         },
3871                         [TYPE_USB] = {
3872                                 [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
3873                                 [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
3874                                 [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
3875                         },
3876                 },
3877                 [TYPE_USB] = {
3878                         [TYPE_NONE] = {
3879                                 [NO_SSC] = &sl_usb_xcvr_diag_ln_vals,
3880                                 [EXTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
3881                                 [INTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
3882                         },
3883                         [TYPE_PCIE] = {
3884                                 [NO_SSC] = &usb_pcie_xcvr_diag_ln_vals,
3885                                 [EXTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
3886                                 [INTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
3887                         },
3888                         [TYPE_SGMII] = {
3889                                 [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
3890                                 [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
3891                                 [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
3892                         },
3893                         [TYPE_QSGMII] = {
3894                                 [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
3895                                 [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
3896                                 [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
3897                         },
3898                 },
3899         },
3900         .pcs_cmn_vals = {
3901                 [TYPE_USB] = {
3902                         [TYPE_NONE] = {
3903                                 [NO_SSC] = &usb_phy_pcs_cmn_vals,
3904                                 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
3905                                 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
3906                         },
3907                         [TYPE_PCIE] = {
3908                                 [NO_SSC] = &usb_phy_pcs_cmn_vals,
3909                                 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
3910                                 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
3911                         },
3912                         [TYPE_SGMII] = {
3913                                 [NO_SSC] = &usb_phy_pcs_cmn_vals,
3914                                 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
3915                                 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
3916                         },
3917                         [TYPE_QSGMII] = {
3918                                 [NO_SSC] = &usb_phy_pcs_cmn_vals,
3919                                 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
3920                                 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
3921                         },
3922                 },
3923         },
3924         .cmn_vals = {
3925                 [CLK_19_2_MHZ] = {
3926                         [TYPE_DP] = {
3927                                 [TYPE_NONE] = {
3928                                         [NO_SSC] = &sl_dp_19_2_no_ssc_cmn_vals,
3929                                 },
3930                         },
3931                 },
3932                 [CLK_25_MHZ] = {
3933                         [TYPE_DP] = {
3934                                 [TYPE_NONE] = {
3935                                         [NO_SSC] = &sl_dp_25_no_ssc_cmn_vals,
3936                                 },
3937                         },
3938                 },
3939                 [CLK_100_MHZ] = {
3940                         [TYPE_DP] = {
3941                                 [TYPE_NONE] = {
3942                                         [NO_SSC] = &sl_dp_100_no_ssc_cmn_vals,
3943                                 },
3944                         },
3945                         [TYPE_PCIE] = {
3946                                 [TYPE_NONE] = {
3947                                         [NO_SSC] = NULL,
3948                                         [EXTERNAL_SSC] = NULL,
3949                                         [INTERNAL_SSC] = &sl_pcie_100_int_ssc_cmn_vals,
3950                                 },
3951                                 [TYPE_SGMII] = {
3952                                         [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
3953                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
3954                                         [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
3955                                 },
3956                                 [TYPE_QSGMII] = {
3957                                         [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
3958                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
3959                                         [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
3960                                 },
3961                                 [TYPE_USB] = {
3962                                         [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
3963                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
3964                                         [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
3965                                 },
3966                         },
3967                         [TYPE_SGMII] = {
3968                                 [TYPE_NONE] = {
3969                                         [NO_SSC] = &sl_sgmii_100_no_ssc_cmn_vals,
3970                                 },
3971                                 [TYPE_PCIE] = {
3972                                         [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
3973                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
3974                                         [INTERNAL_SSC] = &sgmii_100_int_ssc_cmn_vals,
3975                                 },
3976                                 [TYPE_USB] = {
3977                                         [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
3978                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
3979                                         [INTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
3980                                 },
3981                         },
3982                         [TYPE_QSGMII] = {
3983                                 [TYPE_NONE] = {
3984                                         [NO_SSC] = &sl_qsgmii_100_no_ssc_cmn_vals,
3985                                 },
3986                                 [TYPE_PCIE] = {
3987                                         [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
3988                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
3989                                         [INTERNAL_SSC] = &qsgmii_100_int_ssc_cmn_vals,
3990                                 },
3991                                 [TYPE_USB] = {
3992                                         [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
3993                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
3994                                         [INTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
3995                                 },
3996                         },
3997                         [TYPE_USB] = {
3998                                 [TYPE_NONE] = {
3999                                         [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4000                                         [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4001                                         [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
4002                                 },
4003                                 [TYPE_PCIE] = {
4004                                         [NO_SSC] = &usb_100_no_ssc_cmn_vals,
4005                                         [EXTERNAL_SSC] = &usb_100_no_ssc_cmn_vals,
4006                                         [INTERNAL_SSC] = &usb_100_int_ssc_cmn_vals,
4007                                 },
4008                                 [TYPE_SGMII] = {
4009                                         [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4010                                         [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4011                                         [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
4012                                 },
4013                                 [TYPE_QSGMII] = {
4014                                         [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4015                                         [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4016                                         [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
4017                                 },
4018                         },
4019                 },
4020         },
4021         .tx_ln_vals = {
4022                 [CLK_19_2_MHZ] = {
4023                         [TYPE_DP] = {
4024                                 [TYPE_NONE] = {
4025                                         [NO_SSC] = &sl_dp_19_2_no_ssc_tx_ln_vals,
4026                                 },
4027                         },
4028                 },
4029                 [CLK_25_MHZ] = {
4030                         [TYPE_DP] = {
4031                                 [TYPE_NONE] = {
4032                                         [NO_SSC] = &sl_dp_25_no_ssc_tx_ln_vals,
4033                                 },
4034                         },
4035                 },
4036                 [CLK_100_MHZ] = {
4037                         [TYPE_DP] = {
4038                                 [TYPE_NONE] = {
4039                                         [NO_SSC] = &sl_dp_100_no_ssc_tx_ln_vals,
4040                                 },
4041                         },
4042                         [TYPE_PCIE] = {
4043                                 [TYPE_NONE] = {
4044                                         [NO_SSC] = NULL,
4045                                         [EXTERNAL_SSC] = NULL,
4046                                         [INTERNAL_SSC] = NULL,
4047                                 },
4048                                 [TYPE_SGMII] = {
4049                                         [NO_SSC] = NULL,
4050                                         [EXTERNAL_SSC] = NULL,
4051                                         [INTERNAL_SSC] = NULL,
4052                                 },
4053                                 [TYPE_QSGMII] = {
4054                                         [NO_SSC] = NULL,
4055                                         [EXTERNAL_SSC] = NULL,
4056                                         [INTERNAL_SSC] = NULL,
4057                                 },
4058                                 [TYPE_USB] = {
4059                                         [NO_SSC] = NULL,
4060                                         [EXTERNAL_SSC] = NULL,
4061                                         [INTERNAL_SSC] = NULL,
4062                                 },
4063                         },
4064                         [TYPE_SGMII] = {
4065                                 [TYPE_NONE] = {
4066                                         [NO_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
4067                                 },
4068                                 [TYPE_PCIE] = {
4069                                         [NO_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
4070                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
4071                                         [INTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
4072                                 },
4073                                 [TYPE_USB] = {
4074                                         [NO_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
4075                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
4076                                         [INTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
4077                                 },
4078                         },
4079                         [TYPE_QSGMII] = {
4080                                 [TYPE_NONE] = {
4081                                         [NO_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
4082                                 },
4083                                 [TYPE_PCIE] = {
4084                                         [NO_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
4085                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
4086                                         [INTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
4087                                 },
4088                                 [TYPE_USB] = {
4089                                         [NO_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
4090                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
4091                                         [INTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
4092                                 },
4093                         },
4094                         [TYPE_USB] = {
4095                                 [TYPE_NONE] = {
4096                                         [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
4097                                         [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4098                                         [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4099                                 },
4100                                 [TYPE_PCIE] = {
4101                                         [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
4102                                         [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4103                                         [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4104                                 },
4105                                 [TYPE_SGMII] = {
4106                                         [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
4107                                         [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4108                                         [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4109                                 },
4110                                 [TYPE_QSGMII] = {
4111                                         [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
4112                                         [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4113                                         [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4114                                 },
4115                         },
4116                 },
4117         },
4118         .rx_ln_vals = {
4119                 [CLK_19_2_MHZ] = {
4120                         [TYPE_DP] = {
4121                                 [TYPE_NONE] = {
4122                                         [NO_SSC] = &sl_dp_19_2_no_ssc_rx_ln_vals,
4123                                 },
4124                         },
4125                 },
4126                 [CLK_25_MHZ] = {
4127                         [TYPE_DP] = {
4128                                 [TYPE_NONE] = {
4129                                         [NO_SSC] = &sl_dp_25_no_ssc_rx_ln_vals,
4130                                 },
4131                         },
4132                 },
4133                 [CLK_100_MHZ] = {
4134                         [TYPE_DP] = {
4135                                 [TYPE_NONE] = {
4136                                         [NO_SSC] = &sl_dp_100_no_ssc_rx_ln_vals,
4137                                 },
4138                         },
4139                         [TYPE_PCIE] = {
4140                                 [TYPE_NONE] = {
4141                                         [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4142                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4143                                         [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4144                                 },
4145                                 [TYPE_SGMII] = {
4146                                         [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4147                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4148                                         [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4149                                 },
4150                                 [TYPE_QSGMII] = {
4151                                         [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4152                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4153                                         [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4154                                 },
4155                                 [TYPE_USB] = {
4156                                         [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4157                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4158                                         [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4159                                 },
4160                         },
4161                         [TYPE_SGMII] = {
4162                                 [TYPE_NONE] = {
4163                                         [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4164                                 },
4165                                 [TYPE_PCIE] = {
4166                                         [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4167                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4168                                         [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4169                                 },
4170                                 [TYPE_USB] = {
4171                                         [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4172                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4173                                         [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4174                                 },
4175                         },
4176                         [TYPE_QSGMII] = {
4177                                 [TYPE_NONE] = {
4178                                         [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4179                                 },
4180                                 [TYPE_PCIE] = {
4181                                         [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4182                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4183                                         [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4184                                 },
4185                                 [TYPE_USB] = {
4186                                         [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4187                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4188                                         [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4189                                 },
4190                         },
4191                         [TYPE_USB] = {
4192                                 [TYPE_NONE] = {
4193                                         [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
4194                                         [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4195                                         [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4196                                 },
4197                                 [TYPE_PCIE] = {
4198                                         [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
4199                                         [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4200                                         [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4201                                 },
4202                                 [TYPE_SGMII] = {
4203                                         [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
4204                                         [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4205                                         [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4206                                 },
4207                                 [TYPE_QSGMII] = {
4208                                         [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
4209                                         [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4210                                         [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4211                                 },
4212                         },
4213                 },
4214         },
4215 };
4216
4217 static const struct cdns_torrent_data ti_j721e_map_torrent = {
4218         .block_offset_shift = 0x0,
4219         .reg_offset_shift = 0x1,
4220         .link_cmn_vals = {
4221                 [TYPE_DP] = {
4222                         [TYPE_NONE] = {
4223                                 [NO_SSC] = &sl_dp_link_cmn_vals,
4224                         },
4225                 },
4226                 [TYPE_PCIE] = {
4227                         [TYPE_NONE] = {
4228                                 [NO_SSC] = NULL,
4229                                 [EXTERNAL_SSC] = NULL,
4230                                 [INTERNAL_SSC] = NULL,
4231                         },
4232                         [TYPE_SGMII] = {
4233                                 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
4234                                 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
4235                                 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
4236                         },
4237                         [TYPE_QSGMII] = {
4238                                 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
4239                                 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
4240                                 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
4241                         },
4242                         [TYPE_USB] = {
4243                                 [NO_SSC] = &pcie_usb_link_cmn_vals,
4244                                 [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
4245                                 [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
4246                         },
4247                 },
4248                 [TYPE_SGMII] = {
4249                         [TYPE_NONE] = {
4250                                 [NO_SSC] = &sl_sgmii_link_cmn_vals,
4251                         },
4252                         [TYPE_PCIE] = {
4253                                 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
4254                                 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
4255                                 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
4256                         },
4257                         [TYPE_USB] = {
4258                                 [NO_SSC] = &usb_sgmii_link_cmn_vals,
4259                                 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
4260                                 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
4261                         },
4262                 },
4263                 [TYPE_QSGMII] = {
4264                         [TYPE_NONE] = {
4265                                 [NO_SSC] = &sl_sgmii_link_cmn_vals,
4266                         },
4267                         [TYPE_PCIE] = {
4268                                 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
4269                                 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
4270                                 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
4271                         },
4272                         [TYPE_USB] = {
4273                                 [NO_SSC] = &usb_sgmii_link_cmn_vals,
4274                                 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
4275                                 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
4276                         },
4277                 },
4278                 [TYPE_USB] = {
4279                         [TYPE_NONE] = {
4280                                 [NO_SSC] = &sl_usb_link_cmn_vals,
4281                                 [EXTERNAL_SSC] = &sl_usb_link_cmn_vals,
4282                                 [INTERNAL_SSC] = &sl_usb_link_cmn_vals,
4283                         },
4284                         [TYPE_PCIE] = {
4285                                 [NO_SSC] = &pcie_usb_link_cmn_vals,
4286                                 [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
4287                                 [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
4288                         },
4289                         [TYPE_SGMII] = {
4290                                 [NO_SSC] = &usb_sgmii_link_cmn_vals,
4291                                 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
4292                                 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
4293                         },
4294                         [TYPE_QSGMII] = {
4295                                 [NO_SSC] = &usb_sgmii_link_cmn_vals,
4296                                 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
4297                                 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
4298                         },
4299                 },
4300         },
4301         .xcvr_diag_vals = {
4302                 [TYPE_DP] = {
4303                         [TYPE_NONE] = {
4304                                 [NO_SSC] = &sl_dp_xcvr_diag_ln_vals,
4305                         },
4306                 },
4307                 [TYPE_PCIE] = {
4308                         [TYPE_NONE] = {
4309                                 [NO_SSC] = NULL,
4310                                 [EXTERNAL_SSC] = NULL,
4311                                 [INTERNAL_SSC] = NULL,
4312                         },
4313                         [TYPE_SGMII] = {
4314                                 [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
4315                                 [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
4316                                 [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
4317                         },
4318                         [TYPE_QSGMII] = {
4319                                 [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
4320                                 [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
4321                                 [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
4322                         },
4323                         [TYPE_USB] = {
4324                                 [NO_SSC] = &pcie_usb_xcvr_diag_ln_vals,
4325                                 [EXTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
4326                                 [INTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
4327                         },
4328                 },
4329                 [TYPE_SGMII] = {
4330                         [TYPE_NONE] = {
4331                                 [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
4332                         },
4333                         [TYPE_PCIE] = {
4334                                 [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
4335                                 [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
4336                                 [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
4337                         },
4338                         [TYPE_USB] = {
4339                                 [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
4340                                 [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
4341                                 [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
4342                         },
4343                 },
4344                 [TYPE_QSGMII] = {
4345                         [TYPE_NONE] = {
4346                                 [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
4347                         },
4348                         [TYPE_PCIE] = {
4349                                 [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
4350                                 [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
4351                                 [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
4352                         },
4353                         [TYPE_USB] = {
4354                                 [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
4355                                 [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
4356                                 [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
4357                         },
4358                 },
4359                 [TYPE_USB] = {
4360                         [TYPE_NONE] = {
4361                                 [NO_SSC] = &sl_usb_xcvr_diag_ln_vals,
4362                                 [EXTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
4363                                 [INTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
4364                         },
4365                         [TYPE_PCIE] = {
4366                                 [NO_SSC] = &usb_pcie_xcvr_diag_ln_vals,
4367                                 [EXTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
4368                                 [INTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
4369                         },
4370                         [TYPE_SGMII] = {
4371                                 [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
4372                                 [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
4373                                 [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
4374                         },
4375                         [TYPE_QSGMII] = {
4376                                 [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
4377                                 [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
4378                                 [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
4379                         },
4380                 },
4381         },
4382         .pcs_cmn_vals = {
4383                 [TYPE_USB] = {
4384                         [TYPE_NONE] = {
4385                                 [NO_SSC] = &usb_phy_pcs_cmn_vals,
4386                                 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
4387                                 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
4388                         },
4389                         [TYPE_PCIE] = {
4390                                 [NO_SSC] = &usb_phy_pcs_cmn_vals,
4391                                 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
4392                                 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
4393                         },
4394                         [TYPE_SGMII] = {
4395                                 [NO_SSC] = &usb_phy_pcs_cmn_vals,
4396                                 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
4397                                 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
4398                         },
4399                         [TYPE_QSGMII] = {
4400                                 [NO_SSC] = &usb_phy_pcs_cmn_vals,
4401                                 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
4402                                 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
4403                         },
4404                 },
4405         },
4406         .cmn_vals = {
4407                 [CLK_19_2_MHZ] = {
4408                         [TYPE_DP] = {
4409                                 [TYPE_NONE] = {
4410                                         [NO_SSC] = &sl_dp_19_2_no_ssc_cmn_vals,
4411                                 },
4412                         },
4413                 },
4414                 [CLK_25_MHZ] = {
4415                         [TYPE_DP] = {
4416                                 [TYPE_NONE] = {
4417                                         [NO_SSC] = &sl_dp_25_no_ssc_cmn_vals,
4418                                 },
4419                         },
4420                 },
4421                 [CLK_100_MHZ] = {
4422                         [TYPE_DP] = {
4423                                 [TYPE_NONE] = {
4424                                         [NO_SSC] = &sl_dp_100_no_ssc_cmn_vals,
4425                                 },
4426                         },
4427                         [TYPE_PCIE] = {
4428                                 [TYPE_NONE] = {
4429                                         [NO_SSC] = NULL,
4430                                         [EXTERNAL_SSC] = NULL,
4431                                         [INTERNAL_SSC] = &sl_pcie_100_int_ssc_cmn_vals,
4432                                 },
4433                                 [TYPE_SGMII] = {
4434                                         [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
4435                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
4436                                         [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
4437                                 },
4438                                 [TYPE_QSGMII] = {
4439                                         [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
4440                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
4441                                         [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
4442                                 },
4443                                 [TYPE_USB] = {
4444                                         [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
4445                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
4446                                         [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
4447                                 },
4448                         },
4449                         [TYPE_SGMII] = {
4450                                 [TYPE_NONE] = {
4451                                         [NO_SSC] = &sl_sgmii_100_no_ssc_cmn_vals,
4452                                 },
4453                                 [TYPE_PCIE] = {
4454                                         [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
4455                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
4456                                         [INTERNAL_SSC] = &sgmii_100_int_ssc_cmn_vals,
4457                                 },
4458                                 [TYPE_USB] = {
4459                                         [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
4460                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
4461                                         [INTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
4462                                 },
4463                         },
4464                         [TYPE_QSGMII] = {
4465                                 [TYPE_NONE] = {
4466                                         [NO_SSC] = &sl_qsgmii_100_no_ssc_cmn_vals,
4467                                 },
4468                                 [TYPE_PCIE] = {
4469                                         [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
4470                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
4471                                         [INTERNAL_SSC] = &qsgmii_100_int_ssc_cmn_vals,
4472                                 },
4473                                 [TYPE_USB] = {
4474                                         [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
4475                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
4476                                         [INTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
4477                                 },
4478                         },
4479                         [TYPE_USB] = {
4480                                 [TYPE_NONE] = {
4481                                         [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4482                                         [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4483                                         [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
4484                                 },
4485                                 [TYPE_PCIE] = {
4486                                         [NO_SSC] = &usb_100_no_ssc_cmn_vals,
4487                                         [EXTERNAL_SSC] = &usb_100_no_ssc_cmn_vals,
4488                                         [INTERNAL_SSC] = &usb_100_int_ssc_cmn_vals,
4489                                 },
4490                                 [TYPE_SGMII] = {
4491                                         [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4492                                         [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4493                                         [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
4494                                 },
4495                                 [TYPE_QSGMII] = {
4496                                         [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4497                                         [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
4498                                         [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
4499                                 },
4500                         },
4501                 },
4502         },
4503         .tx_ln_vals = {
4504                 [CLK_19_2_MHZ] = {
4505                         [TYPE_DP] = {
4506                                 [TYPE_NONE] = {
4507                                         [NO_SSC] = &sl_dp_19_2_no_ssc_tx_ln_vals,
4508                                 },
4509                         },
4510                 },
4511                 [CLK_25_MHZ] = {
4512                         [TYPE_DP] = {
4513                                 [TYPE_NONE] = {
4514                                         [NO_SSC] = &sl_dp_25_no_ssc_tx_ln_vals,
4515                                 },
4516                         },
4517                 },
4518                 [CLK_100_MHZ] = {
4519                         [TYPE_DP] = {
4520                                 [TYPE_NONE] = {
4521                                         [NO_SSC] = &sl_dp_100_no_ssc_tx_ln_vals,
4522                                 },
4523                         },
4524                         [TYPE_PCIE] = {
4525                                 [TYPE_NONE] = {
4526                                         [NO_SSC] = NULL,
4527                                         [EXTERNAL_SSC] = NULL,
4528                                         [INTERNAL_SSC] = NULL,
4529                                 },
4530                                 [TYPE_SGMII] = {
4531                                         [NO_SSC] = NULL,
4532                                         [EXTERNAL_SSC] = NULL,
4533                                         [INTERNAL_SSC] = NULL,
4534                                 },
4535                                 [TYPE_QSGMII] = {
4536                                         [NO_SSC] = NULL,
4537                                         [EXTERNAL_SSC] = NULL,
4538                                         [INTERNAL_SSC] = NULL,
4539                                 },
4540                                 [TYPE_USB] = {
4541                                         [NO_SSC] = NULL,
4542                                         [EXTERNAL_SSC] = NULL,
4543                                         [INTERNAL_SSC] = NULL,
4544                                 },
4545                         },
4546                         [TYPE_SGMII] = {
4547                                 [TYPE_NONE] = {
4548                                         [NO_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
4549                                 },
4550                                 [TYPE_PCIE] = {
4551                                         [NO_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
4552                                         [EXTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
4553                                         [INTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
4554                                 },
4555                                 [TYPE_USB] = {
4556                                         [NO_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
4557                                         [EXTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
4558                                         [INTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
4559                                 },
4560                         },
4561                         [TYPE_QSGMII] = {
4562                                 [TYPE_NONE] = {
4563                                         [NO_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
4564                                 },
4565                                 [TYPE_PCIE] = {
4566                                         [NO_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
4567                                         [EXTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
4568                                         [INTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
4569                                 },
4570                                 [TYPE_USB] = {
4571                                         [NO_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
4572                                         [EXTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
4573                                         [INTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
4574                                 },
4575                         },
4576                         [TYPE_USB] = {
4577                                 [TYPE_NONE] = {
4578                                         [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
4579                                         [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4580                                         [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4581                                 },
4582                                 [TYPE_PCIE] = {
4583                                         [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
4584                                         [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4585                                         [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4586                                 },
4587                                 [TYPE_SGMII] = {
4588                                         [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
4589                                         [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4590                                         [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4591                                 },
4592                                 [TYPE_QSGMII] = {
4593                                         [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
4594                                         [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4595                                         [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
4596                                 },
4597                         },
4598                 },
4599         },
4600         .rx_ln_vals = {
4601                 [CLK_19_2_MHZ] = {
4602                         [TYPE_DP] = {
4603                                 [TYPE_NONE] = {
4604                                         [NO_SSC] = &sl_dp_19_2_no_ssc_rx_ln_vals,
4605                                 },
4606                         },
4607                 },
4608                 [CLK_25_MHZ] = {
4609                         [TYPE_DP] = {
4610                                 [TYPE_NONE] = {
4611                                         [NO_SSC] = &sl_dp_25_no_ssc_rx_ln_vals,
4612                                 },
4613                         },
4614                 },
4615                 [CLK_100_MHZ] = {
4616                         [TYPE_DP] = {
4617                                 [TYPE_NONE] = {
4618                                         [NO_SSC] = &sl_dp_100_no_ssc_rx_ln_vals,
4619                                 },
4620                         },
4621                         [TYPE_PCIE] = {
4622                                 [TYPE_NONE] = {
4623                                         [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4624                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4625                                         [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4626                                 },
4627                                 [TYPE_SGMII] = {
4628                                         [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4629                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4630                                         [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4631                                 },
4632                                 [TYPE_QSGMII] = {
4633                                         [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4634                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4635                                         [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4636                                 },
4637                                 [TYPE_USB] = {
4638                                         [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4639                                         [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4640                                         [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
4641                                 },
4642                         },
4643                         [TYPE_SGMII] = {
4644                                 [TYPE_NONE] = {
4645                                         [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4646                                 },
4647                                 [TYPE_PCIE] = {
4648                                         [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4649                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4650                                         [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4651                                 },
4652                                 [TYPE_USB] = {
4653                                         [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4654                                         [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4655                                         [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
4656                                 },
4657                         },
4658                         [TYPE_QSGMII] = {
4659                                 [TYPE_NONE] = {
4660                                         [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4661                                 },
4662                                 [TYPE_PCIE] = {
4663                                         [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4664                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4665                                         [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4666                                 },
4667                                 [TYPE_USB] = {
4668                                         [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4669                                         [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4670                                         [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
4671                                 },
4672                         },
4673                         [TYPE_USB] = {
4674                                 [TYPE_NONE] = {
4675                                         [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
4676                                         [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4677                                         [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4678                                 },
4679                                 [TYPE_PCIE] = {
4680                                         [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
4681                                         [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4682                                         [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4683                                 },
4684                                 [TYPE_SGMII] = {
4685                                         [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
4686                                         [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4687                                         [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4688                                 },
4689                                 [TYPE_QSGMII] = {
4690                                         [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
4691                                         [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4692                                         [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
4693                                 },
4694                         },
4695                 },
4696         },
4697 };
4698
4699 static const struct of_device_id cdns_torrent_phy_of_match[] = {
4700         {
4701                 .compatible = "cdns,torrent-phy",
4702                 .data = &cdns_map_torrent,
4703         },
4704         {
4705                 .compatible = "ti,j721e-serdes-10g",
4706                 .data = &ti_j721e_map_torrent,
4707         },
4708         {}
4709 };
4710 MODULE_DEVICE_TABLE(of, cdns_torrent_phy_of_match);
4711
4712 static struct platform_driver cdns_torrent_phy_driver = {
4713         .probe  = cdns_torrent_phy_probe,
4714         .remove = cdns_torrent_phy_remove,
4715         .driver = {
4716                 .name   = "cdns-torrent-phy",
4717                 .of_match_table = cdns_torrent_phy_of_match,
4718         }
4719 };
4720 module_platform_driver(cdns_torrent_phy_driver);
4721
4722 MODULE_AUTHOR("Cadence Design Systems, Inc.");
4723 MODULE_DESCRIPTION("Cadence Torrent PHY driver");
4724 MODULE_LICENSE("GPL v2");