1 // SPDX-License-Identifier: GPL-2.0
3 * Cadence Torrent SD0801 PHY driver.
5 * Based on the linux driver provided by Cadence
7 * Copyright (c) 2018 Cadence Design Systems
9 * Copyright (C) 2020 Texas Instruments Incorporated - https://www.ti.com/
15 #include <generic-phy.h>
17 #include <dm/device.h>
18 #include <dm/device_compat.h>
19 #include <dm/device-internal.h>
22 #include <dm/uclass.h>
24 #include <dt-bindings/phy/phy.h>
26 #include <linux/delay.h>
27 #include <linux/string.h>
29 #define REF_CLK_19_2MHz 19200000
30 #define REF_CLK_25MHz 25000000
32 #define MAX_NUM_LANES 4
33 #define DEFAULT_MAX_BIT_RATE 8100 /* in Mbps*/
35 #define NUM_SSC_MODE 3
36 #define NUM_PHY_TYPE 6
38 #define POLL_TIMEOUT_US 5000
39 #define PLL_LOCK_TIMEOUT 100000
41 #define TORRENT_COMMON_CDB_OFFSET 0x0
43 #define TORRENT_TX_LANE_CDB_OFFSET(ln, block_offset, reg_offset) \
44 ((0x4000 << (block_offset)) + \
45 (((ln) << 9) << (reg_offset)))
46 #define TORRENT_RX_LANE_CDB_OFFSET(ln, block_offset, reg_offset) \
47 ((0x8000 << (block_offset)) + \
48 (((ln) << 9) << (reg_offset)))
50 #define TORRENT_PHY_PCS_COMMON_OFFSET(block_offset) \
51 (0xC000 << (block_offset))
53 #define TORRENT_PHY_PMA_COMMON_OFFSET(block_offset) \
54 (0xE000 << (block_offset))
57 * register offsets from SD0801 PHY register block base (i.e MHDP
58 * register base + 0x500000)
60 #define CMN_SSM_BANDGAP_TMR 0x0021U
61 #define CMN_SSM_BIAS_TMR 0x0022U
62 #define CMN_PLLSM0_PLLPRE_TMR 0x002AU
63 #define CMN_PLLSM0_PLLLOCK_TMR 0x002CU
64 #define CMN_PLLSM1_PLLPRE_TMR 0x0032U
65 #define CMN_PLLSM1_PLLLOCK_TMR 0x0034U
66 #define CMN_CDIAG_CDB_PWRI_OVRD 0x0041U
67 #define CMN_CDIAG_XCVRC_PWRI_OVRD 0x0047U
68 #define CMN_BGCAL_INIT_TMR 0x0064U
69 #define CMN_BGCAL_ITER_TMR 0x0065U
70 #define CMN_IBCAL_INIT_TMR 0x0074U
71 #define CMN_PLL0_VCOCAL_TCTRL 0x0082U
72 #define CMN_PLL0_VCOCAL_INIT_TMR 0x0084U
73 #define CMN_PLL0_VCOCAL_ITER_TMR 0x0085U
74 #define CMN_PLL0_VCOCAL_REFTIM_START 0x0086U
75 #define CMN_PLL0_VCOCAL_PLLCNT_START 0x0088U
76 #define CMN_PLL0_INTDIV_M0 0x0090U
77 #define CMN_PLL0_FRACDIVL_M0 0x0091U
78 #define CMN_PLL0_FRACDIVH_M0 0x0092U
79 #define CMN_PLL0_HIGH_THR_M0 0x0093U
80 #define CMN_PLL0_DSM_DIAG_M0 0x0094U
81 #define CMN_PLL0_SS_CTRL1_M0 0x0098U
82 #define CMN_PLL0_SS_CTRL2_M0 0x0099U
83 #define CMN_PLL0_SS_CTRL3_M0 0x009AU
84 #define CMN_PLL0_SS_CTRL4_M0 0x009BU
85 #define CMN_PLL0_LOCK_REFCNT_START 0x009CU
86 #define CMN_PLL0_LOCK_PLLCNT_START 0x009EU
87 #define CMN_PLL0_LOCK_PLLCNT_THR 0x009FU
88 #define CMN_PLL0_INTDIV_M1 0x00A0U
89 #define CMN_PLL0_FRACDIVH_M1 0x00A2U
90 #define CMN_PLL0_HIGH_THR_M1 0x00A3U
91 #define CMN_PLL0_DSM_DIAG_M1 0x00A4U
92 #define CMN_PLL0_SS_CTRL1_M1 0x00A8U
93 #define CMN_PLL0_SS_CTRL2_M1 0x00A9U
94 #define CMN_PLL0_SS_CTRL3_M1 0x00AAU
95 #define CMN_PLL0_SS_CTRL4_M1 0x00ABU
96 #define CMN_PLL1_VCOCAL_TCTRL 0x00C2U
97 #define CMN_PLL1_VCOCAL_INIT_TMR 0x00C4U
98 #define CMN_PLL1_VCOCAL_ITER_TMR 0x00C5U
99 #define CMN_PLL1_VCOCAL_REFTIM_START 0x00C6U
100 #define CMN_PLL1_VCOCAL_PLLCNT_START 0x00C8U
101 #define CMN_PLL1_INTDIV_M0 0x00D0U
102 #define CMN_PLL1_FRACDIVL_M0 0x00D1U
103 #define CMN_PLL1_FRACDIVH_M0 0x00D2U
104 #define CMN_PLL1_HIGH_THR_M0 0x00D3U
105 #define CMN_PLL1_DSM_DIAG_M0 0x00D4U
106 #define CMN_PLL1_DSM_FBH_OVRD_M0 0x00D5U
107 #define CMN_PLL1_DSM_FBL_OVRD_M0 0x00D6U
108 #define CMN_PLL1_SS_CTRL1_M0 0x00D8U
109 #define CMN_PLL1_SS_CTRL2_M0 0x00D9U
110 #define CMN_PLL1_SS_CTRL3_M0 0x00DAU
111 #define CMN_PLL1_SS_CTRL4_M0 0x00DBU
112 #define CMN_PLL1_LOCK_REFCNT_START 0x00DCU
113 #define CMN_PLL1_LOCK_PLLCNT_START 0x00DEU
114 #define CMN_PLL1_LOCK_PLLCNT_THR 0x00DFU
115 #define CMN_TXPUCAL_TUNE 0x0103U
116 #define CMN_TXPUCAL_INIT_TMR 0x0104U
117 #define CMN_TXPUCAL_ITER_TMR 0x0105U
118 #define CMN_CMN_TXPDCAL_OVRD 0x0109U
119 #define CMN_TXPDCAL_TUNE 0x010BU
120 #define CMN_TXPDCAL_INIT_TMR 0x010CU
121 #define CMN_TXPDCAL_ITER_TMR 0x010DU
122 #define CMN_RXCAL_INIT_TMR 0x0114U
123 #define CMN_RXCAL_ITER_TMR 0x0115U
124 #define CMN_SD_CAL_INIT_TMR 0x0124U
125 #define CMN_SD_CAL_ITER_TMR 0x0125U
126 #define CMN_SD_CAL_REFTIM_START 0x0126U
127 #define CMN_SD_CAL_PLLCNT_START 0x0128U
128 #define CMN_PDIAG_PLL0_CTRL_M0 0x01A0U
129 #define CMN_PDIAG_PLL0_CLK_SEL_M0 0x01A1U
130 #define CMN_PDIAG_PLL0_CP_PADJ_M0 0x01A4U
131 #define CMN_PDIAG_PLL0_CP_IADJ_M0 0x01A5U
132 #define CMN_PDIAG_PLL0_FILT_PADJ_M0 0x01A6U
133 #define CMN_PDIAG_PLL0_CTRL_M1 0x01B0U
134 #define CMN_PDIAG_PLL0_CLK_SEL_M1 0x01B1U
135 #define CMN_PDIAG_PLL0_CP_PADJ_M1 0x01B4U
136 #define CMN_PDIAG_PLL0_CP_IADJ_M1 0x01B5U
137 #define CMN_PDIAG_PLL0_FILT_PADJ_M1 0x01B6U
138 #define CMN_PDIAG_PLL1_CTRL_M0 0x01C0U
139 #define CMN_PDIAG_PLL1_CLK_SEL_M0 0x01C1U
140 #define CMN_PDIAG_PLL1_CP_PADJ_M0 0x01C4U
141 #define CMN_PDIAG_PLL1_CP_IADJ_M0 0x01C5U
142 #define CMN_PDIAG_PLL1_FILT_PADJ_M0 0x01C6U
143 #define CMN_DIAG_BIAS_OVRD1 0x01E1U
145 /* PMA TX Lane registers */
146 #define TX_TXCC_CTRL 0x0040U
147 #define TX_TXCC_CPOST_MULT_00 0x004CU
148 #define TX_TXCC_CPOST_MULT_01 0x004DU
149 #define TX_TXCC_MGNFS_MULT_000 0x0050U
150 #define TX_TXCC_MGNFS_MULT_100 0x0054U
151 #define DRV_DIAG_TX_DRV 0x00C6U
152 #define XCVR_DIAG_PLLDRC_CTRL 0x00E5U
153 #define XCVR_DIAG_HSCLK_SEL 0x00E6U
154 #define XCVR_DIAG_HSCLK_DIV 0x00E7U
155 #define XCVR_DIAG_RXCLK_CTRL 0x00E9U
156 #define XCVR_DIAG_BIDI_CTRL 0x00EAU
157 #define XCVR_DIAG_PSC_OVRD 0x00EBU
158 #define TX_PSC_A0 0x0100U
159 #define TX_PSC_A1 0x0101U
160 #define TX_PSC_A2 0x0102U
161 #define TX_PSC_A3 0x0103U
162 #define TX_RCVDET_ST_TMR 0x0123U
163 #define TX_DIAG_ACYA 0x01E7U
164 #define TX_DIAG_ACYA_HBDC_MASK 0x0001U
166 /* PMA RX Lane registers */
167 #define RX_PSC_A0 0x0000U
168 #define RX_PSC_A1 0x0001U
169 #define RX_PSC_A2 0x0002U
170 #define RX_PSC_A3 0x0003U
171 #define RX_PSC_CAL 0x0006U
172 #define RX_CDRLF_CNFG 0x0080U
173 #define RX_CDRLF_CNFG3 0x0082U
174 #define RX_SIGDET_HL_FILT_TMR 0x0090U
175 #define RX_REE_GCSM1_CTRL 0x0108U
176 #define RX_REE_GCSM1_EQENM_PH1 0x0109U
177 #define RX_REE_GCSM1_EQENM_PH2 0x010AU
178 #define RX_REE_GCSM2_CTRL 0x0110U
179 #define RX_REE_PERGCSM_CTRL 0x0118U
180 #define RX_REE_ATTEN_THR 0x0149U
181 #define RX_REE_TAP1_CLIP 0x0171U
182 #define RX_REE_TAP2TON_CLIP 0x0172U
183 #define RX_REE_SMGM_CTRL1 0x0177U
184 #define RX_REE_SMGM_CTRL2 0x0178U
185 #define RX_DIAG_DFE_CTRL 0x01E0U
186 #define RX_DIAG_DFE_AMP_TUNE_2 0x01E2U
187 #define RX_DIAG_DFE_AMP_TUNE_3 0x01E3U
188 #define RX_DIAG_NQST_CTRL 0x01E5U
189 #define RX_DIAG_SIGDET_TUNE 0x01E8U
190 #define RX_DIAG_PI_RATE 0x01F4U
191 #define RX_DIAG_PI_CAP 0x01F5U
192 #define RX_DIAG_ACYA 0x01FFU
194 /* PHY PCS common registers */
195 #define PHY_PLL_CFG 0x000EU
196 #define PHY_PIPE_USB3_GEN2_PRE_CFG0 0x0020U
197 #define PHY_PIPE_USB3_GEN2_POST_CFG0 0x0022U
198 #define PHY_PIPE_USB3_GEN2_POST_CFG1 0x0023U
200 /* PHY PMA common registers */
201 #define PHY_PMA_CMN_CTRL1 0x0000U
202 #define PHY_PMA_CMN_CTRL2 0x0001U
203 #define PHY_PMA_PLL_RAW_CTRL 0x0003U
205 static const struct reg_field phy_pll_cfg = REG_FIELD(PHY_PLL_CFG, 0, 1);
206 static const struct reg_field phy_pma_cmn_ctrl_1 =
207 REG_FIELD(PHY_PMA_CMN_CTRL1, 0, 0);
208 static const struct reg_field phy_pma_cmn_ctrl_2 =
209 REG_FIELD(PHY_PMA_CMN_CTRL2, 0, 7);
210 static const struct reg_field phy_pma_pll_raw_ctrl =
211 REG_FIELD(PHY_PMA_PLL_RAW_CTRL, 0, 1);
213 #define reset_control_assert reset_assert
214 #define reset_control_deassert reset_deassert
215 #define reset_control reset_ctl
216 #define reset_control_put reset_free
218 enum cdns_torrent_phy_type {
227 enum cdns_torrent_ssc_mode {
233 struct cdns_torrent_inst {
236 enum cdns_torrent_phy_type phy_type;
238 struct reset_ctl_bulk *lnk_rst;
239 enum cdns_torrent_ssc_mode ssc_mode;
242 struct cdns_torrent_phy {
243 void __iomem *sd_base; /* SD0801 register base */
245 struct reset_control *phy_rst;
247 struct cdns_torrent_inst phys[MAX_NUM_LANES];
249 const struct cdns_torrent_data *init_data;
250 struct regmap *regmap;
251 struct regmap *regmap_common_cdb;
252 struct regmap *regmap_phy_pcs_common_cdb;
253 struct regmap *regmap_phy_pma_common_cdb;
254 struct regmap *regmap_tx_lane_cdb[MAX_NUM_LANES];
255 struct regmap *regmap_rx_lane_cdb[MAX_NUM_LANES];
256 struct regmap_field *phy_pll_cfg;
257 struct regmap_field *phy_pma_cmn_ctrl_1;
258 struct regmap_field *phy_pma_cmn_ctrl_2;
259 struct regmap_field *phy_pma_pll_raw_ctrl;
262 struct cdns_reg_pairs {
267 struct cdns_torrent_vals {
268 struct cdns_reg_pairs *reg_pairs;
272 struct cdns_torrent_data {
273 u8 block_offset_shift;
275 struct cdns_torrent_vals *link_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
277 struct cdns_torrent_vals *xcvr_diag_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
279 struct cdns_torrent_vals *pcs_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
281 struct cdns_torrent_vals *cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
283 struct cdns_torrent_vals *tx_ln_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
285 struct cdns_torrent_vals *rx_ln_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
289 static inline struct cdns_torrent_inst *phy_get_drvdata(struct phy *phy)
291 struct cdns_torrent_phy *sp = dev_get_priv(phy->dev);
294 if (phy->id >= MAX_NUM_LANES)
297 for (index = 0; index < sp->nsubnodes; index++) {
298 if (phy->id == sp->phys[index].mlane)
299 return &sp->phys[index];
305 static struct regmap *cdns_regmap_init(struct udevice *dev, void __iomem *base,
309 struct cdns_torrent_phy *sp = dev_get_priv(dev);
310 struct regmap_config config;
312 config.r_start = (ulong)(base + block_offset);
313 config.r_size = sp->size - block_offset;
314 config.reg_offset_shift = reg_offset_shift;
315 config.width = REGMAP_SIZE_16;
317 return devm_regmap_init(dev, NULL, NULL, &config);
320 static int cdns_torrent_regfield_init(struct cdns_torrent_phy *cdns_phy)
322 struct udevice *dev = cdns_phy->dev;
323 struct regmap_field *field;
324 struct regmap *regmap;
326 regmap = cdns_phy->regmap_phy_pcs_common_cdb;
327 field = devm_regmap_field_alloc(dev, regmap, phy_pll_cfg);
329 dev_err(dev, "PHY_PLL_CFG reg field init failed\n");
330 return PTR_ERR(field);
332 cdns_phy->phy_pll_cfg = field;
334 regmap = cdns_phy->regmap_phy_pma_common_cdb;
335 field = devm_regmap_field_alloc(dev, regmap, phy_pma_cmn_ctrl_1);
337 dev_err(dev, "PHY_PMA_CMN_CTRL1 reg field init failed\n");
338 return PTR_ERR(field);
340 cdns_phy->phy_pma_cmn_ctrl_1 = field;
342 regmap = cdns_phy->regmap_phy_pma_common_cdb;
343 field = devm_regmap_field_alloc(dev, regmap, phy_pma_cmn_ctrl_2);
345 dev_err(dev, "PHY_PMA_CMN_CTRL2 reg field init failed\n");
346 return PTR_ERR(field);
348 cdns_phy->phy_pma_cmn_ctrl_2 = field;
350 regmap = cdns_phy->regmap_phy_pma_common_cdb;
351 field = devm_regmap_field_alloc(dev, regmap, phy_pma_pll_raw_ctrl);
353 dev_err(dev, "PHY_PMA_PLL_RAW_CTRL reg field init failed\n");
354 return PTR_ERR(field);
356 cdns_phy->phy_pma_pll_raw_ctrl = field;
361 static int cdns_torrent_regmap_init(struct cdns_torrent_phy *cdns_phy)
363 void __iomem *sd_base = cdns_phy->sd_base;
364 u8 block_offset_shift, reg_offset_shift;
365 struct udevice *dev = cdns_phy->dev;
366 struct regmap *regmap;
370 block_offset_shift = cdns_phy->init_data->block_offset_shift;
371 reg_offset_shift = cdns_phy->init_data->reg_offset_shift;
373 for (i = 0; i < MAX_NUM_LANES; i++) {
374 block_offset = TORRENT_TX_LANE_CDB_OFFSET(i, block_offset_shift,
377 regmap = cdns_regmap_init(dev, sd_base, block_offset,
379 if (IS_ERR(regmap)) {
380 dev_err(dev, "Failed to init tx lane CDB regmap\n");
381 return PTR_ERR(regmap);
383 cdns_phy->regmap_tx_lane_cdb[i] = regmap;
384 block_offset = TORRENT_RX_LANE_CDB_OFFSET(i, block_offset_shift,
386 regmap = cdns_regmap_init(dev, sd_base, block_offset,
388 if (IS_ERR(regmap)) {
389 dev_err(dev, "Failed to init rx lane CDB regmap");
390 return PTR_ERR(regmap);
392 cdns_phy->regmap_rx_lane_cdb[i] = regmap;
395 block_offset = TORRENT_COMMON_CDB_OFFSET;
396 regmap = cdns_regmap_init(dev, sd_base, block_offset,
398 if (IS_ERR(regmap)) {
399 dev_err(dev, "Failed to init common CDB regmap\n");
400 return PTR_ERR(regmap);
402 cdns_phy->regmap_common_cdb = regmap;
404 block_offset = TORRENT_PHY_PCS_COMMON_OFFSET(block_offset_shift);
405 regmap = cdns_regmap_init(dev, sd_base, block_offset,
407 if (IS_ERR(regmap)) {
408 dev_err(dev, "Failed to init PHY PCS common CDB regmap\n");
409 return PTR_ERR(regmap);
411 cdns_phy->regmap_phy_pcs_common_cdb = regmap;
413 block_offset = TORRENT_PHY_PMA_COMMON_OFFSET(block_offset_shift);
414 regmap = cdns_regmap_init(dev, sd_base, block_offset,
416 if (IS_ERR(regmap)) {
417 dev_err(dev, "Failed to init PHY PMA common CDB regmap\n");
418 return PTR_ERR(regmap);
420 cdns_phy->regmap_phy_pma_common_cdb = regmap;
425 static int cdns_torrent_phy_configure_multilink(struct cdns_torrent_phy *cdns_phy)
427 const struct cdns_torrent_data *init_data = cdns_phy->init_data;
428 struct cdns_torrent_vals *cmn_vals, *tx_ln_vals, *rx_ln_vals;
429 struct cdns_torrent_vals *link_cmn_vals, *xcvr_diag_vals;
430 enum cdns_torrent_phy_type phy_t1, phy_t2, tmp_phy_type;
431 struct cdns_torrent_vals *pcs_cmn_vals;
432 int i, j, node, mlane, num_lanes, ret;
433 struct cdns_reg_pairs *reg_pairs;
434 enum cdns_torrent_ssc_mode ssc;
435 struct regmap *regmap;
438 /* Maximum 2 links (subnodes) are supported */
439 if (cdns_phy->nsubnodes != 2)
442 phy_t1 = cdns_phy->phys[0].phy_type;
443 phy_t2 = cdns_phy->phys[1].phy_type;
446 * First configure the PHY for first link with phy_t1. Geth the array
447 * values are [phy_t1][phy_t2][ssc].
449 for (node = 0; node < cdns_phy->nsubnodes; node++) {
452 * If fist link with phy_t1 is configured, then
453 * configure the PHY for second link with phy_t2.
454 * Get the array values as [phy_t2][phy_t1][ssc]
456 tmp_phy_type = phy_t1;
458 phy_t2 = tmp_phy_type;
461 mlane = cdns_phy->phys[node].mlane;
462 ssc = cdns_phy->phys[node].ssc_mode;
463 num_lanes = cdns_phy->phys[node].num_lanes;
466 * PHY configuration specific registers:
467 * link_cmn_vals depend on combination of PHY types being
468 * configured and are common for both PHY types, so array
469 * values should be same for [phy_t1][phy_t2][ssc] and
470 * [phy_t2][phy_t1][ssc].
471 * xcvr_diag_vals also depend on combination of PHY types
472 * being configured, but these can be different for particular
473 * PHY type and are per lane.
475 link_cmn_vals = init_data->link_cmn_vals[phy_t1][phy_t2][ssc];
477 reg_pairs = link_cmn_vals->reg_pairs;
478 num_regs = link_cmn_vals->num_regs;
479 regmap = cdns_phy->regmap_common_cdb;
482 * First array value in link_cmn_vals must be of
483 * PHY_PLL_CFG register
485 regmap_field_write(cdns_phy->phy_pll_cfg,
488 for (i = 1; i < num_regs; i++)
489 regmap_write(regmap, reg_pairs[i].off,
493 xcvr_diag_vals = init_data->xcvr_diag_vals[phy_t1][phy_t2][ssc];
494 if (xcvr_diag_vals) {
495 reg_pairs = xcvr_diag_vals->reg_pairs;
496 num_regs = xcvr_diag_vals->num_regs;
497 for (i = 0; i < num_lanes; i++) {
498 regmap = cdns_phy->regmap_tx_lane_cdb[i + mlane];
499 for (j = 0; j < num_regs; j++)
500 regmap_write(regmap, reg_pairs[j].off,
505 /* PHY PCS common registers configurations */
506 pcs_cmn_vals = init_data->pcs_cmn_vals[phy_t1][phy_t2][ssc];
508 reg_pairs = pcs_cmn_vals->reg_pairs;
509 num_regs = pcs_cmn_vals->num_regs;
510 regmap = cdns_phy->regmap_phy_pcs_common_cdb;
511 for (i = 0; i < num_regs; i++)
512 regmap_write(regmap, reg_pairs[i].off,
516 /* PMA common registers configurations */
517 cmn_vals = init_data->cmn_vals[phy_t1][phy_t2][ssc];
519 reg_pairs = cmn_vals->reg_pairs;
520 num_regs = cmn_vals->num_regs;
521 regmap = cdns_phy->regmap_common_cdb;
522 for (i = 0; i < num_regs; i++)
523 regmap_write(regmap, reg_pairs[i].off,
527 /* PMA TX lane registers configurations */
528 tx_ln_vals = init_data->tx_ln_vals[phy_t1][phy_t2][ssc];
530 reg_pairs = tx_ln_vals->reg_pairs;
531 num_regs = tx_ln_vals->num_regs;
532 for (i = 0; i < num_lanes; i++) {
533 regmap = cdns_phy->regmap_tx_lane_cdb[i + mlane];
534 for (j = 0; j < num_regs; j++)
535 regmap_write(regmap, reg_pairs[j].off,
540 /* PMA RX lane registers configurations */
541 rx_ln_vals = init_data->rx_ln_vals[phy_t1][phy_t2][ssc];
543 reg_pairs = rx_ln_vals->reg_pairs;
544 num_regs = rx_ln_vals->num_regs;
545 for (i = 0; i < num_lanes; i++) {
546 regmap = cdns_phy->regmap_rx_lane_cdb[i + mlane];
547 for (j = 0; j < num_regs; j++)
548 regmap_write(regmap, reg_pairs[j].off,
553 reset_deassert_bulk(cdns_phy->phys[node].lnk_rst);
556 /* Take the PHY out of reset */
557 ret = reset_control_deassert(cdns_phy->phy_rst);
564 static int cdns_torrent_phy_probe(struct udevice *dev)
566 struct cdns_torrent_phy *cdns_phy = dev_get_priv(dev);
567 int ret, subnodes = 0, node = 0, i;
568 struct cdns_torrent_data *data;
569 u32 total_num_lanes = 0;
576 /* Get init data for this phy */
577 data = (struct cdns_torrent_data *)dev_get_driver_data(dev);
578 cdns_phy->init_data = data;
580 cdns_phy->phy_rst = devm_reset_control_get_by_index(dev, 0);
581 if (IS_ERR(cdns_phy->phy_rst)) {
582 dev_err(dev, "failed to get reset\n");
583 return PTR_ERR(cdns_phy->phy_rst);
586 clk = devm_clk_get(dev, "refclk");
588 dev_err(dev, "phy ref clock not found\n");
592 ret = clk_prepare_enable(clk);
594 dev_err(cdns_phy->dev, "Failed to prepare ref clock\n");
598 cdns_phy->sd_base = devfdt_remap_addr_index(dev, 0);
599 if (IS_ERR(cdns_phy->sd_base))
600 return PTR_ERR(cdns_phy->sd_base);
601 devfdt_get_addr_size_index(dev, 0, (fdt_size_t *)&cdns_phy->size);
603 dev_for_each_subnode(child, dev)
606 dev_err(dev, "No available link subnodes found\n");
609 ret = cdns_torrent_regmap_init(cdns_phy);
613 ret = cdns_torrent_regfield_init(cdns_phy);
617 /* Going through all the available subnodes or children*/
618 ofnode_for_each_subnode(child, dev_ofnode(dev)) {
619 /* PHY subnode name must be a 'link' */
620 if (!ofnode_name_eq(child, "link"))
622 cdns_phy->phys[node].lnk_rst =
623 devm_reset_bulk_get_by_node(dev, child);
624 if (IS_ERR(cdns_phy->phys[node].lnk_rst)) {
625 dev_err(dev, "%s: failed to get reset\n",
626 ofnode_get_name(child));
627 ret = PTR_ERR(cdns_phy->phys[node].lnk_rst);
631 if (ofnode_read_u32(child, "reg",
632 &cdns_phy->phys[node].mlane)) {
633 dev_err(dev, "%s: No \"reg \" - property.\n",
634 ofnode_get_name(child));
639 if (ofnode_read_u32(child, "cdns,phy-type", &phy_type)) {
640 dev_err(dev, "%s: No \"cdns,phy-type \" - property.\n",
641 ofnode_get_name(child));
648 cdns_phy->phys[node].phy_type = TYPE_PCIE;
651 cdns_phy->phys[node].phy_type = TYPE_DP;
654 cdns_phy->phys[node].phy_type = TYPE_SGMII;
656 case PHY_TYPE_QSGMII:
657 cdns_phy->phys[node].phy_type = TYPE_QSGMII;
660 cdns_phy->phys[node].phy_type = TYPE_USB;
663 dev_err(dev, "Unsupported protocol\n");
668 if (ofnode_read_u32(child, "cdns,num-lanes",
669 &cdns_phy->phys[node].num_lanes)) {
670 dev_err(dev, "%s: No \"cdns,num-lanes \" - property.\n",
671 ofnode_get_name(child));
676 total_num_lanes += cdns_phy->phys[node].num_lanes;
679 ofnode_read_u32(child, "cdns,ssc-mode",
680 &cdns_phy->phys[node].ssc_mode);
684 cdns_phy->nsubnodes = node;
686 if (total_num_lanes > MAX_NUM_LANES) {
687 dev_err(dev, "Invalid lane configuration\n");
691 if (cdns_phy->nsubnodes > 1) {
692 ret = cdns_torrent_phy_configure_multilink(cdns_phy);
697 reset_control_deassert(cdns_phy->phy_rst);
703 for (i = 0; i < node; i++)
704 reset_release_bulk(cdns_phy->phys[i].lnk_rst);
708 static int cdns_torrent_phy_on(struct phy *gphy)
710 struct cdns_torrent_inst *inst = phy_get_drvdata(gphy);
711 struct cdns_torrent_phy *cdns_phy = dev_get_priv(gphy->dev);
715 if (cdns_phy->nsubnodes == 1) {
716 /* Take the PHY lane group out of reset */
717 reset_deassert_bulk(inst->lnk_rst);
719 /* Take the PHY out of reset */
720 ret = reset_control_deassert(cdns_phy->phy_rst);
726 * Wait for cmn_ready assertion
727 * PHY_PMA_CMN_CTRL1[0] == 1
729 ret = regmap_field_read_poll_timeout(cdns_phy->phy_pma_cmn_ctrl_1,
730 read_val, read_val, 1000,
733 dev_err(cdns_phy->dev, "Timeout waiting for CMN ready\n");
741 static int cdns_torrent_phy_init(struct phy *phy)
743 struct cdns_torrent_phy *cdns_phy = dev_get_priv(phy->dev);
744 const struct cdns_torrent_data *init_data = cdns_phy->init_data;
745 struct cdns_torrent_vals *cmn_vals, *tx_ln_vals, *rx_ln_vals;
746 struct cdns_torrent_vals *link_cmn_vals, *xcvr_diag_vals;
747 struct cdns_torrent_inst *inst = phy_get_drvdata(phy);
748 enum cdns_torrent_phy_type phy_type = inst->phy_type;
749 enum cdns_torrent_ssc_mode ssc = inst->ssc_mode;
750 struct cdns_torrent_vals *pcs_cmn_vals;
751 struct cdns_reg_pairs *reg_pairs;
752 struct regmap *regmap;
756 if (cdns_phy->nsubnodes > 1)
760 * Spread spectrum generation is not required or supported
763 if (phy_type == TYPE_SGMII || phy_type == TYPE_QSGMII)
766 /* PHY configuration specific registers for single link */
767 link_cmn_vals = init_data->link_cmn_vals[phy_type][TYPE_NONE][ssc];
769 reg_pairs = link_cmn_vals->reg_pairs;
770 num_regs = link_cmn_vals->num_regs;
771 regmap = cdns_phy->regmap_common_cdb;
774 * First array value in link_cmn_vals must be of
775 * PHY_PLL_CFG register
777 regmap_field_write(cdns_phy->phy_pll_cfg, reg_pairs[0].val);
779 for (i = 1; i < num_regs; i++)
780 regmap_write(regmap, reg_pairs[i].off,
784 xcvr_diag_vals = init_data->xcvr_diag_vals[phy_type][TYPE_NONE][ssc];
785 if (xcvr_diag_vals) {
786 reg_pairs = xcvr_diag_vals->reg_pairs;
787 num_regs = xcvr_diag_vals->num_regs;
788 for (i = 0; i < inst->num_lanes; i++) {
789 regmap = cdns_phy->regmap_tx_lane_cdb[i + inst->mlane];
790 for (j = 0; j < num_regs; j++)
791 regmap_write(regmap, reg_pairs[j].off,
796 /* PHY PCS common registers configurations */
797 pcs_cmn_vals = init_data->pcs_cmn_vals[phy_type][TYPE_NONE][ssc];
799 reg_pairs = pcs_cmn_vals->reg_pairs;
800 num_regs = pcs_cmn_vals->num_regs;
801 regmap = cdns_phy->regmap_phy_pcs_common_cdb;
802 for (i = 0; i < num_regs; i++)
803 regmap_write(regmap, reg_pairs[i].off,
807 /* PMA common registers configurations */
808 cmn_vals = init_data->cmn_vals[phy_type][TYPE_NONE][ssc];
810 reg_pairs = cmn_vals->reg_pairs;
811 num_regs = cmn_vals->num_regs;
812 regmap = cdns_phy->regmap_common_cdb;
813 for (i = 0; i < num_regs; i++)
814 regmap_write(regmap, reg_pairs[i].off,
818 /* PMA TX lane registers configurations */
819 tx_ln_vals = init_data->tx_ln_vals[phy_type][TYPE_NONE][ssc];
821 reg_pairs = tx_ln_vals->reg_pairs;
822 num_regs = tx_ln_vals->num_regs;
823 for (i = 0; i < inst->num_lanes; i++) {
824 regmap = cdns_phy->regmap_tx_lane_cdb[i + inst->mlane];
825 for (j = 0; j < num_regs; j++)
826 regmap_write(regmap, reg_pairs[j].off,
831 /* PMA RX lane registers configurations */
832 rx_ln_vals = init_data->rx_ln_vals[phy_type][TYPE_NONE][ssc];
834 reg_pairs = rx_ln_vals->reg_pairs;
835 num_regs = rx_ln_vals->num_regs;
836 for (i = 0; i < inst->num_lanes; i++) {
837 regmap = cdns_phy->regmap_rx_lane_cdb[i + inst->mlane];
838 for (j = 0; j < num_regs; j++)
839 regmap_write(regmap, reg_pairs[j].off,
847 static int cdns_torrent_phy_off(struct phy *gphy)
849 struct cdns_torrent_inst *inst = phy_get_drvdata(gphy);
850 struct cdns_torrent_phy *cdns_phy = dev_get_priv(gphy->dev);
853 if (cdns_phy->nsubnodes != 1)
856 ret = reset_control_assert(cdns_phy->phy_rst);
860 return reset_assert_bulk(inst->lnk_rst);
863 static int cdns_torrent_phy_remove(struct udevice *dev)
865 struct cdns_torrent_phy *cdns_phy = dev_get_priv(dev);
868 reset_control_assert(cdns_phy->phy_rst);
869 for (i = 0; i < cdns_phy->nsubnodes; i++)
870 reset_release_bulk(cdns_phy->phys[i].lnk_rst);
875 /* USB and SGMII/QSGMII link configuration */
876 static struct cdns_reg_pairs usb_sgmii_link_cmn_regs[] = {
877 {0x0002, PHY_PLL_CFG},
878 {0x8600, CMN_PDIAG_PLL0_CLK_SEL_M0},
879 {0x0601, CMN_PDIAG_PLL1_CLK_SEL_M0}
882 static struct cdns_reg_pairs usb_sgmii_xcvr_diag_ln_regs[] = {
883 {0x0000, XCVR_DIAG_HSCLK_SEL},
884 {0x0001, XCVR_DIAG_HSCLK_DIV},
885 {0x0041, XCVR_DIAG_PLLDRC_CTRL}
888 static struct cdns_reg_pairs sgmii_usb_xcvr_diag_ln_regs[] = {
889 {0x0011, XCVR_DIAG_HSCLK_SEL},
890 {0x0003, XCVR_DIAG_HSCLK_DIV},
891 {0x009B, XCVR_DIAG_PLLDRC_CTRL}
894 static struct cdns_torrent_vals usb_sgmii_link_cmn_vals = {
895 .reg_pairs = usb_sgmii_link_cmn_regs,
896 .num_regs = ARRAY_SIZE(usb_sgmii_link_cmn_regs),
899 static struct cdns_torrent_vals usb_sgmii_xcvr_diag_ln_vals = {
900 .reg_pairs = usb_sgmii_xcvr_diag_ln_regs,
901 .num_regs = ARRAY_SIZE(usb_sgmii_xcvr_diag_ln_regs),
904 static struct cdns_torrent_vals sgmii_usb_xcvr_diag_ln_vals = {
905 .reg_pairs = sgmii_usb_xcvr_diag_ln_regs,
906 .num_regs = ARRAY_SIZE(sgmii_usb_xcvr_diag_ln_regs),
909 /* PCIe and USB Unique SSC link configuration */
910 static struct cdns_reg_pairs pcie_usb_link_cmn_regs[] = {
911 {0x0003, PHY_PLL_CFG},
912 {0x0601, CMN_PDIAG_PLL0_CLK_SEL_M0},
913 {0x0400, CMN_PDIAG_PLL0_CLK_SEL_M1},
914 {0x8600, CMN_PDIAG_PLL1_CLK_SEL_M0}
917 static struct cdns_reg_pairs pcie_usb_xcvr_diag_ln_regs[] = {
918 {0x0000, XCVR_DIAG_HSCLK_SEL},
919 {0x0001, XCVR_DIAG_HSCLK_DIV},
920 {0x0012, XCVR_DIAG_PLLDRC_CTRL}
923 static struct cdns_reg_pairs usb_pcie_xcvr_diag_ln_regs[] = {
924 {0x0011, XCVR_DIAG_HSCLK_SEL},
925 {0x0001, XCVR_DIAG_HSCLK_DIV},
926 {0x00C9, XCVR_DIAG_PLLDRC_CTRL}
929 static struct cdns_torrent_vals pcie_usb_link_cmn_vals = {
930 .reg_pairs = pcie_usb_link_cmn_regs,
931 .num_regs = ARRAY_SIZE(pcie_usb_link_cmn_regs),
934 static struct cdns_torrent_vals pcie_usb_xcvr_diag_ln_vals = {
935 .reg_pairs = pcie_usb_xcvr_diag_ln_regs,
936 .num_regs = ARRAY_SIZE(pcie_usb_xcvr_diag_ln_regs),
939 static struct cdns_torrent_vals usb_pcie_xcvr_diag_ln_vals = {
940 .reg_pairs = usb_pcie_xcvr_diag_ln_regs,
941 .num_regs = ARRAY_SIZE(usb_pcie_xcvr_diag_ln_regs),
944 /* USB 100 MHz Ref clk, internal SSC */
945 static struct cdns_reg_pairs usb_100_int_ssc_cmn_regs[] = {
946 {0x0004, CMN_PLL0_DSM_DIAG_M0},
947 {0x0004, CMN_PLL0_DSM_DIAG_M1},
948 {0x0004, CMN_PLL1_DSM_DIAG_M0},
949 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
950 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
951 {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
952 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
953 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
954 {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
955 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
956 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
957 {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
958 {0x0064, CMN_PLL0_INTDIV_M0},
959 {0x0050, CMN_PLL0_INTDIV_M1},
960 {0x0064, CMN_PLL1_INTDIV_M0},
961 {0x0002, CMN_PLL0_FRACDIVH_M0},
962 {0x0002, CMN_PLL0_FRACDIVH_M1},
963 {0x0002, CMN_PLL1_FRACDIVH_M0},
964 {0x0044, CMN_PLL0_HIGH_THR_M0},
965 {0x0036, CMN_PLL0_HIGH_THR_M1},
966 {0x0044, CMN_PLL1_HIGH_THR_M0},
967 {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
968 {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
969 {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
970 {0x0001, CMN_PLL0_SS_CTRL1_M0},
971 {0x0001, CMN_PLL0_SS_CTRL1_M1},
972 {0x0001, CMN_PLL1_SS_CTRL1_M0},
973 {0x011B, CMN_PLL0_SS_CTRL2_M0},
974 {0x011B, CMN_PLL0_SS_CTRL2_M1},
975 {0x011B, CMN_PLL1_SS_CTRL2_M0},
976 {0x006E, CMN_PLL0_SS_CTRL3_M0},
977 {0x0058, CMN_PLL0_SS_CTRL3_M1},
978 {0x006E, CMN_PLL1_SS_CTRL3_M0},
979 {0x000E, CMN_PLL0_SS_CTRL4_M0},
980 {0x0012, CMN_PLL0_SS_CTRL4_M1},
981 {0x000E, CMN_PLL1_SS_CTRL4_M0},
982 {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
983 {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
984 {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
985 {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
986 {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
987 {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
988 {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
989 {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
990 {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
991 {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
992 {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
993 {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD},
994 {0x007F, CMN_TXPUCAL_TUNE},
995 {0x007F, CMN_TXPDCAL_TUNE}
998 static struct cdns_torrent_vals usb_100_int_ssc_cmn_vals = {
999 .reg_pairs = usb_100_int_ssc_cmn_regs,
1000 .num_regs = ARRAY_SIZE(usb_100_int_ssc_cmn_regs),
1003 /* Single USB link configuration */
1004 static struct cdns_reg_pairs sl_usb_link_cmn_regs[] = {
1005 {0x0000, PHY_PLL_CFG},
1006 {0x8600, CMN_PDIAG_PLL0_CLK_SEL_M0}
1009 static struct cdns_reg_pairs sl_usb_xcvr_diag_ln_regs[] = {
1010 {0x0000, XCVR_DIAG_HSCLK_SEL},
1011 {0x0001, XCVR_DIAG_HSCLK_DIV},
1012 {0x0041, XCVR_DIAG_PLLDRC_CTRL}
1015 static struct cdns_torrent_vals sl_usb_link_cmn_vals = {
1016 .reg_pairs = sl_usb_link_cmn_regs,
1017 .num_regs = ARRAY_SIZE(sl_usb_link_cmn_regs),
1020 static struct cdns_torrent_vals sl_usb_xcvr_diag_ln_vals = {
1021 .reg_pairs = sl_usb_xcvr_diag_ln_regs,
1022 .num_regs = ARRAY_SIZE(sl_usb_xcvr_diag_ln_regs),
1025 /* USB PHY PCS common configuration */
1026 static struct cdns_reg_pairs usb_phy_pcs_cmn_regs[] = {
1027 {0x0A0A, PHY_PIPE_USB3_GEN2_PRE_CFG0},
1028 {0x1000, PHY_PIPE_USB3_GEN2_POST_CFG0},
1029 {0x0010, PHY_PIPE_USB3_GEN2_POST_CFG1}
1032 static struct cdns_torrent_vals usb_phy_pcs_cmn_vals = {
1033 .reg_pairs = usb_phy_pcs_cmn_regs,
1034 .num_regs = ARRAY_SIZE(usb_phy_pcs_cmn_regs),
1037 /* USB 100 MHz Ref clk, no SSC */
1038 static struct cdns_reg_pairs sl_usb_100_no_ssc_cmn_regs[] = {
1039 {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
1040 {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
1041 {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0},
1042 {0x0003, CMN_PLL0_VCOCAL_TCTRL},
1043 {0x0003, CMN_PLL1_VCOCAL_TCTRL},
1044 {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
1045 {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD}
1048 static struct cdns_torrent_vals sl_usb_100_no_ssc_cmn_vals = {
1049 .reg_pairs = sl_usb_100_no_ssc_cmn_regs,
1050 .num_regs = ARRAY_SIZE(sl_usb_100_no_ssc_cmn_regs),
1053 static struct cdns_reg_pairs usb_100_no_ssc_cmn_regs[] = {
1054 {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
1055 {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD},
1056 {0x007F, CMN_TXPUCAL_TUNE},
1057 {0x007F, CMN_TXPDCAL_TUNE}
1060 static struct cdns_reg_pairs usb_100_no_ssc_tx_ln_regs[] = {
1061 {0x02FF, TX_PSC_A0},
1062 {0x06AF, TX_PSC_A1},
1063 {0x06AE, TX_PSC_A2},
1064 {0x06AE, TX_PSC_A3},
1065 {0x2A82, TX_TXCC_CTRL},
1066 {0x0014, TX_TXCC_CPOST_MULT_01},
1067 {0x0003, XCVR_DIAG_PSC_OVRD}
1070 static struct cdns_reg_pairs usb_100_no_ssc_rx_ln_regs[] = {
1071 {0x0D1D, RX_PSC_A0},
1072 {0x0D1D, RX_PSC_A1},
1073 {0x0D00, RX_PSC_A2},
1074 {0x0500, RX_PSC_A3},
1075 {0x0013, RX_SIGDET_HL_FILT_TMR},
1076 {0x0000, RX_REE_GCSM1_CTRL},
1077 {0x0C02, RX_REE_ATTEN_THR},
1078 {0x0330, RX_REE_SMGM_CTRL1},
1079 {0x0300, RX_REE_SMGM_CTRL2},
1080 {0x0019, RX_REE_TAP1_CLIP},
1081 {0x0019, RX_REE_TAP2TON_CLIP},
1082 {0x1004, RX_DIAG_SIGDET_TUNE},
1083 {0x00F9, RX_DIAG_NQST_CTRL},
1084 {0x0C01, RX_DIAG_DFE_AMP_TUNE_2},
1085 {0x0002, RX_DIAG_DFE_AMP_TUNE_3},
1086 {0x0000, RX_DIAG_PI_CAP},
1087 {0x0031, RX_DIAG_PI_RATE},
1088 {0x0001, RX_DIAG_ACYA},
1089 {0x018C, RX_CDRLF_CNFG},
1090 {0x0003, RX_CDRLF_CNFG3}
1093 static struct cdns_torrent_vals usb_100_no_ssc_cmn_vals = {
1094 .reg_pairs = usb_100_no_ssc_cmn_regs,
1095 .num_regs = ARRAY_SIZE(usb_100_no_ssc_cmn_regs),
1098 static struct cdns_torrent_vals usb_100_no_ssc_tx_ln_vals = {
1099 .reg_pairs = usb_100_no_ssc_tx_ln_regs,
1100 .num_regs = ARRAY_SIZE(usb_100_no_ssc_tx_ln_regs),
1103 static struct cdns_torrent_vals usb_100_no_ssc_rx_ln_vals = {
1104 .reg_pairs = usb_100_no_ssc_rx_ln_regs,
1105 .num_regs = ARRAY_SIZE(usb_100_no_ssc_rx_ln_regs),
1108 /* Single link USB, 100 MHz Ref clk, internal SSC */
1109 static struct cdns_reg_pairs sl_usb_100_int_ssc_cmn_regs[] = {
1110 {0x0004, CMN_PLL0_DSM_DIAG_M0},
1111 {0x0004, CMN_PLL1_DSM_DIAG_M0},
1112 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
1113 {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
1114 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
1115 {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
1116 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
1117 {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
1118 {0x0064, CMN_PLL0_INTDIV_M0},
1119 {0x0064, CMN_PLL1_INTDIV_M0},
1120 {0x0002, CMN_PLL0_FRACDIVH_M0},
1121 {0x0002, CMN_PLL1_FRACDIVH_M0},
1122 {0x0044, CMN_PLL0_HIGH_THR_M0},
1123 {0x0044, CMN_PLL1_HIGH_THR_M0},
1124 {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
1125 {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
1126 {0x0001, CMN_PLL0_SS_CTRL1_M0},
1127 {0x0001, CMN_PLL1_SS_CTRL1_M0},
1128 {0x011B, CMN_PLL0_SS_CTRL2_M0},
1129 {0x011B, CMN_PLL1_SS_CTRL2_M0},
1130 {0x006E, CMN_PLL0_SS_CTRL3_M0},
1131 {0x006E, CMN_PLL1_SS_CTRL3_M0},
1132 {0x000E, CMN_PLL0_SS_CTRL4_M0},
1133 {0x000E, CMN_PLL1_SS_CTRL4_M0},
1134 {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
1135 {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
1136 {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
1137 {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
1138 {0x0003, CMN_PLL0_VCOCAL_TCTRL},
1139 {0x0003, CMN_PLL1_VCOCAL_TCTRL},
1140 {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
1141 {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
1142 {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
1143 {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
1144 {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
1145 {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
1146 {0x8200, CMN_CDIAG_CDB_PWRI_OVRD},
1147 {0x8200, CMN_CDIAG_XCVRC_PWRI_OVRD}
1150 static struct cdns_torrent_vals sl_usb_100_int_ssc_cmn_vals = {
1151 .reg_pairs = sl_usb_100_int_ssc_cmn_regs,
1152 .num_regs = ARRAY_SIZE(sl_usb_100_int_ssc_cmn_regs),
1155 /* PCIe and SGMII/QSGMII Unique SSC link configuration */
1156 static struct cdns_reg_pairs pcie_sgmii_link_cmn_regs[] = {
1157 {0x0003, PHY_PLL_CFG},
1158 {0x0601, CMN_PDIAG_PLL0_CLK_SEL_M0},
1159 {0x0400, CMN_PDIAG_PLL0_CLK_SEL_M1},
1160 {0x0601, CMN_PDIAG_PLL1_CLK_SEL_M0}
1163 static struct cdns_reg_pairs pcie_sgmii_xcvr_diag_ln_regs[] = {
1164 {0x0000, XCVR_DIAG_HSCLK_SEL},
1165 {0x0001, XCVR_DIAG_HSCLK_DIV},
1166 {0x0012, XCVR_DIAG_PLLDRC_CTRL}
1169 static struct cdns_reg_pairs sgmii_pcie_xcvr_diag_ln_regs[] = {
1170 {0x0011, XCVR_DIAG_HSCLK_SEL},
1171 {0x0003, XCVR_DIAG_HSCLK_DIV},
1172 {0x009B, XCVR_DIAG_PLLDRC_CTRL}
1175 static struct cdns_torrent_vals pcie_sgmii_link_cmn_vals = {
1176 .reg_pairs = pcie_sgmii_link_cmn_regs,
1177 .num_regs = ARRAY_SIZE(pcie_sgmii_link_cmn_regs),
1180 static struct cdns_torrent_vals pcie_sgmii_xcvr_diag_ln_vals = {
1181 .reg_pairs = pcie_sgmii_xcvr_diag_ln_regs,
1182 .num_regs = ARRAY_SIZE(pcie_sgmii_xcvr_diag_ln_regs),
1185 static struct cdns_torrent_vals sgmii_pcie_xcvr_diag_ln_vals = {
1186 .reg_pairs = sgmii_pcie_xcvr_diag_ln_regs,
1187 .num_regs = ARRAY_SIZE(sgmii_pcie_xcvr_diag_ln_regs),
1190 /* SGMII 100 MHz Ref clk, no SSC */
1191 static struct cdns_reg_pairs sl_sgmii_100_no_ssc_cmn_regs[] = {
1192 {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
1193 {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
1194 {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0},
1195 {0x0003, CMN_PLL0_VCOCAL_TCTRL},
1196 {0x0003, CMN_PLL1_VCOCAL_TCTRL}
1199 static struct cdns_torrent_vals sl_sgmii_100_no_ssc_cmn_vals = {
1200 .reg_pairs = sl_sgmii_100_no_ssc_cmn_regs,
1201 .num_regs = ARRAY_SIZE(sl_sgmii_100_no_ssc_cmn_regs),
1204 static struct cdns_reg_pairs sgmii_100_no_ssc_cmn_regs[] = {
1205 {0x007F, CMN_TXPUCAL_TUNE},
1206 {0x007F, CMN_TXPDCAL_TUNE}
1209 static struct cdns_reg_pairs sgmii_100_no_ssc_tx_ln_regs[] = {
1210 {0x00F3, TX_PSC_A0},
1211 {0x04A2, TX_PSC_A2},
1212 {0x04A2, TX_PSC_A3},
1213 {0x0000, TX_TXCC_CPOST_MULT_00},
1214 {0x00B3, DRV_DIAG_TX_DRV}
1217 static struct cdns_reg_pairs ti_sgmii_100_no_ssc_tx_ln_regs[] = {
1218 {0x00F3, TX_PSC_A0},
1219 {0x04A2, TX_PSC_A2},
1220 {0x04A2, TX_PSC_A3},
1221 {0x0000, TX_TXCC_CPOST_MULT_00},
1222 {0x00B3, DRV_DIAG_TX_DRV},
1223 {0x4000, XCVR_DIAG_RXCLK_CTRL},
1226 static struct cdns_reg_pairs sgmii_100_no_ssc_rx_ln_regs[] = {
1227 {0x091D, RX_PSC_A0},
1228 {0x0900, RX_PSC_A2},
1229 {0x0100, RX_PSC_A3},
1230 {0x03C7, RX_REE_GCSM1_EQENM_PH1},
1231 {0x01C7, RX_REE_GCSM1_EQENM_PH2},
1232 {0x0000, RX_DIAG_DFE_CTRL},
1233 {0x0019, RX_REE_TAP1_CLIP},
1234 {0x0019, RX_REE_TAP2TON_CLIP},
1235 {0x0098, RX_DIAG_NQST_CTRL},
1236 {0x0C01, RX_DIAG_DFE_AMP_TUNE_2},
1237 {0x0000, RX_DIAG_DFE_AMP_TUNE_3},
1238 {0x0000, RX_DIAG_PI_CAP},
1239 {0x0010, RX_DIAG_PI_RATE},
1240 {0x0001, RX_DIAG_ACYA},
1241 {0x018C, RX_CDRLF_CNFG},
1244 static struct cdns_torrent_vals sgmii_100_no_ssc_cmn_vals = {
1245 .reg_pairs = sgmii_100_no_ssc_cmn_regs,
1246 .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_cmn_regs),
1249 static struct cdns_torrent_vals sgmii_100_no_ssc_tx_ln_vals = {
1250 .reg_pairs = sgmii_100_no_ssc_tx_ln_regs,
1251 .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_tx_ln_regs),
1254 static struct cdns_torrent_vals ti_sgmii_100_no_ssc_tx_ln_vals = {
1255 .reg_pairs = ti_sgmii_100_no_ssc_tx_ln_regs,
1256 .num_regs = ARRAY_SIZE(ti_sgmii_100_no_ssc_tx_ln_regs),
1259 static struct cdns_torrent_vals sgmii_100_no_ssc_rx_ln_vals = {
1260 .reg_pairs = sgmii_100_no_ssc_rx_ln_regs,
1261 .num_regs = ARRAY_SIZE(sgmii_100_no_ssc_rx_ln_regs),
1264 /* SGMII 100 MHz Ref clk, internal SSC */
1265 static struct cdns_reg_pairs sgmii_100_int_ssc_cmn_regs[] = {
1266 {0x0004, CMN_PLL0_DSM_DIAG_M0},
1267 {0x0004, CMN_PLL0_DSM_DIAG_M1},
1268 {0x0004, CMN_PLL1_DSM_DIAG_M0},
1269 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
1270 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
1271 {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
1272 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
1273 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
1274 {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
1275 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
1276 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
1277 {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
1278 {0x0064, CMN_PLL0_INTDIV_M0},
1279 {0x0050, CMN_PLL0_INTDIV_M1},
1280 {0x0064, CMN_PLL1_INTDIV_M0},
1281 {0x0002, CMN_PLL0_FRACDIVH_M0},
1282 {0x0002, CMN_PLL0_FRACDIVH_M1},
1283 {0x0002, CMN_PLL1_FRACDIVH_M0},
1284 {0x0044, CMN_PLL0_HIGH_THR_M0},
1285 {0x0036, CMN_PLL0_HIGH_THR_M1},
1286 {0x0044, CMN_PLL1_HIGH_THR_M0},
1287 {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
1288 {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
1289 {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
1290 {0x0001, CMN_PLL0_SS_CTRL1_M0},
1291 {0x0001, CMN_PLL0_SS_CTRL1_M1},
1292 {0x0001, CMN_PLL1_SS_CTRL1_M0},
1293 {0x011B, CMN_PLL0_SS_CTRL2_M0},
1294 {0x011B, CMN_PLL0_SS_CTRL2_M1},
1295 {0x011B, CMN_PLL1_SS_CTRL2_M0},
1296 {0x006E, CMN_PLL0_SS_CTRL3_M0},
1297 {0x0058, CMN_PLL0_SS_CTRL3_M1},
1298 {0x006E, CMN_PLL1_SS_CTRL3_M0},
1299 {0x000E, CMN_PLL0_SS_CTRL4_M0},
1300 {0x0012, CMN_PLL0_SS_CTRL4_M1},
1301 {0x000E, CMN_PLL1_SS_CTRL4_M0},
1302 {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
1303 {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
1304 {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
1305 {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
1306 {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
1307 {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
1308 {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
1309 {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
1310 {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
1311 {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
1312 {0x007F, CMN_TXPUCAL_TUNE},
1313 {0x007F, CMN_TXPDCAL_TUNE}
1316 static struct cdns_torrent_vals sgmii_100_int_ssc_cmn_vals = {
1317 .reg_pairs = sgmii_100_int_ssc_cmn_regs,
1318 .num_regs = ARRAY_SIZE(sgmii_100_int_ssc_cmn_regs),
1321 /* QSGMII 100 MHz Ref clk, no SSC */
1322 static struct cdns_reg_pairs sl_qsgmii_100_no_ssc_cmn_regs[] = {
1323 {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
1324 {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
1325 {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0},
1326 {0x0003, CMN_PLL0_VCOCAL_TCTRL},
1327 {0x0003, CMN_PLL1_VCOCAL_TCTRL}
1330 static struct cdns_torrent_vals sl_qsgmii_100_no_ssc_cmn_vals = {
1331 .reg_pairs = sl_qsgmii_100_no_ssc_cmn_regs,
1332 .num_regs = ARRAY_SIZE(sl_qsgmii_100_no_ssc_cmn_regs),
1335 static struct cdns_reg_pairs qsgmii_100_no_ssc_cmn_regs[] = {
1336 {0x007F, CMN_TXPUCAL_TUNE},
1337 {0x007F, CMN_TXPDCAL_TUNE}
1340 static struct cdns_reg_pairs qsgmii_100_no_ssc_tx_ln_regs[] = {
1341 {0x00F3, TX_PSC_A0},
1342 {0x04A2, TX_PSC_A2},
1343 {0x04A2, TX_PSC_A3},
1344 {0x0000, TX_TXCC_CPOST_MULT_00},
1345 {0x0011, TX_TXCC_MGNFS_MULT_100},
1346 {0x0003, DRV_DIAG_TX_DRV}
1349 static struct cdns_reg_pairs ti_qsgmii_100_no_ssc_tx_ln_regs[] = {
1350 {0x00F3, TX_PSC_A0},
1351 {0x04A2, TX_PSC_A2},
1352 {0x04A2, TX_PSC_A3},
1353 {0x0000, TX_TXCC_CPOST_MULT_00},
1354 {0x0011, TX_TXCC_MGNFS_MULT_100},
1355 {0x0003, DRV_DIAG_TX_DRV},
1356 {0x4000, XCVR_DIAG_RXCLK_CTRL},
1359 static struct cdns_reg_pairs qsgmii_100_no_ssc_rx_ln_regs[] = {
1360 {0x091D, RX_PSC_A0},
1361 {0x0900, RX_PSC_A2},
1362 {0x0100, RX_PSC_A3},
1363 {0x03C7, RX_REE_GCSM1_EQENM_PH1},
1364 {0x01C7, RX_REE_GCSM1_EQENM_PH2},
1365 {0x0000, RX_DIAG_DFE_CTRL},
1366 {0x0019, RX_REE_TAP1_CLIP},
1367 {0x0019, RX_REE_TAP2TON_CLIP},
1368 {0x0098, RX_DIAG_NQST_CTRL},
1369 {0x0C01, RX_DIAG_DFE_AMP_TUNE_2},
1370 {0x0000, RX_DIAG_DFE_AMP_TUNE_3},
1371 {0x0000, RX_DIAG_PI_CAP},
1372 {0x0010, RX_DIAG_PI_RATE},
1373 {0x0001, RX_DIAG_ACYA},
1374 {0x018C, RX_CDRLF_CNFG},
1377 static struct cdns_torrent_vals qsgmii_100_no_ssc_cmn_vals = {
1378 .reg_pairs = qsgmii_100_no_ssc_cmn_regs,
1379 .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_cmn_regs),
1382 static struct cdns_torrent_vals qsgmii_100_no_ssc_tx_ln_vals = {
1383 .reg_pairs = qsgmii_100_no_ssc_tx_ln_regs,
1384 .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_tx_ln_regs),
1387 static struct cdns_torrent_vals ti_qsgmii_100_no_ssc_tx_ln_vals = {
1388 .reg_pairs = ti_qsgmii_100_no_ssc_tx_ln_regs,
1389 .num_regs = ARRAY_SIZE(ti_qsgmii_100_no_ssc_tx_ln_regs),
1392 static struct cdns_torrent_vals qsgmii_100_no_ssc_rx_ln_vals = {
1393 .reg_pairs = qsgmii_100_no_ssc_rx_ln_regs,
1394 .num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_rx_ln_regs),
1397 /* QSGMII 100 MHz Ref clk, internal SSC */
1398 static struct cdns_reg_pairs qsgmii_100_int_ssc_cmn_regs[] = {
1399 {0x0004, CMN_PLL0_DSM_DIAG_M0},
1400 {0x0004, CMN_PLL0_DSM_DIAG_M1},
1401 {0x0004, CMN_PLL1_DSM_DIAG_M0},
1402 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
1403 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
1404 {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
1405 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
1406 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
1407 {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
1408 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
1409 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
1410 {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
1411 {0x0064, CMN_PLL0_INTDIV_M0},
1412 {0x0050, CMN_PLL0_INTDIV_M1},
1413 {0x0064, CMN_PLL1_INTDIV_M0},
1414 {0x0002, CMN_PLL0_FRACDIVH_M0},
1415 {0x0002, CMN_PLL0_FRACDIVH_M1},
1416 {0x0002, CMN_PLL1_FRACDIVH_M0},
1417 {0x0044, CMN_PLL0_HIGH_THR_M0},
1418 {0x0036, CMN_PLL0_HIGH_THR_M1},
1419 {0x0044, CMN_PLL1_HIGH_THR_M0},
1420 {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
1421 {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
1422 {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
1423 {0x0001, CMN_PLL0_SS_CTRL1_M0},
1424 {0x0001, CMN_PLL0_SS_CTRL1_M1},
1425 {0x0001, CMN_PLL1_SS_CTRL1_M0},
1426 {0x011B, CMN_PLL0_SS_CTRL2_M0},
1427 {0x011B, CMN_PLL0_SS_CTRL2_M1},
1428 {0x011B, CMN_PLL1_SS_CTRL2_M0},
1429 {0x006E, CMN_PLL0_SS_CTRL3_M0},
1430 {0x0058, CMN_PLL0_SS_CTRL3_M1},
1431 {0x006E, CMN_PLL1_SS_CTRL3_M0},
1432 {0x000E, CMN_PLL0_SS_CTRL4_M0},
1433 {0x0012, CMN_PLL0_SS_CTRL4_M1},
1434 {0x000E, CMN_PLL1_SS_CTRL4_M0},
1435 {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
1436 {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
1437 {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
1438 {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
1439 {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
1440 {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
1441 {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
1442 {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
1443 {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
1444 {0x0005, CMN_PLL1_LOCK_PLLCNT_THR},
1445 {0x007F, CMN_TXPUCAL_TUNE},
1446 {0x007F, CMN_TXPDCAL_TUNE}
1449 static struct cdns_torrent_vals qsgmii_100_int_ssc_cmn_vals = {
1450 .reg_pairs = qsgmii_100_int_ssc_cmn_regs,
1451 .num_regs = ARRAY_SIZE(qsgmii_100_int_ssc_cmn_regs),
1454 /* Single SGMII/QSGMII link configuration */
1455 static struct cdns_reg_pairs sl_sgmii_link_cmn_regs[] = {
1456 {0x0000, PHY_PLL_CFG},
1457 {0x0601, CMN_PDIAG_PLL0_CLK_SEL_M0}
1460 static struct cdns_reg_pairs sl_sgmii_xcvr_diag_ln_regs[] = {
1461 {0x0000, XCVR_DIAG_HSCLK_SEL},
1462 {0x0003, XCVR_DIAG_HSCLK_DIV},
1463 {0x0013, XCVR_DIAG_PLLDRC_CTRL}
1466 static struct cdns_torrent_vals sl_sgmii_link_cmn_vals = {
1467 .reg_pairs = sl_sgmii_link_cmn_regs,
1468 .num_regs = ARRAY_SIZE(sl_sgmii_link_cmn_regs),
1471 static struct cdns_torrent_vals sl_sgmii_xcvr_diag_ln_vals = {
1472 .reg_pairs = sl_sgmii_xcvr_diag_ln_regs,
1473 .num_regs = ARRAY_SIZE(sl_sgmii_xcvr_diag_ln_regs),
1476 /* Multi link PCIe, 100 MHz Ref clk, internal SSC */
1477 static struct cdns_reg_pairs pcie_100_int_ssc_cmn_regs[] = {
1478 {0x0004, CMN_PLL0_DSM_DIAG_M0},
1479 {0x0004, CMN_PLL0_DSM_DIAG_M1},
1480 {0x0004, CMN_PLL1_DSM_DIAG_M0},
1481 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
1482 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
1483 {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
1484 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
1485 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
1486 {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
1487 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
1488 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
1489 {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
1490 {0x0064, CMN_PLL0_INTDIV_M0},
1491 {0x0050, CMN_PLL0_INTDIV_M1},
1492 {0x0064, CMN_PLL1_INTDIV_M0},
1493 {0x0002, CMN_PLL0_FRACDIVH_M0},
1494 {0x0002, CMN_PLL0_FRACDIVH_M1},
1495 {0x0002, CMN_PLL1_FRACDIVH_M0},
1496 {0x0044, CMN_PLL0_HIGH_THR_M0},
1497 {0x0036, CMN_PLL0_HIGH_THR_M1},
1498 {0x0044, CMN_PLL1_HIGH_THR_M0},
1499 {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
1500 {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
1501 {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
1502 {0x0001, CMN_PLL0_SS_CTRL1_M0},
1503 {0x0001, CMN_PLL0_SS_CTRL1_M1},
1504 {0x0001, CMN_PLL1_SS_CTRL1_M0},
1505 {0x011B, CMN_PLL0_SS_CTRL2_M0},
1506 {0x011B, CMN_PLL0_SS_CTRL2_M1},
1507 {0x011B, CMN_PLL1_SS_CTRL2_M0},
1508 {0x006E, CMN_PLL0_SS_CTRL3_M0},
1509 {0x0058, CMN_PLL0_SS_CTRL3_M1},
1510 {0x006E, CMN_PLL1_SS_CTRL3_M0},
1511 {0x000E, CMN_PLL0_SS_CTRL4_M0},
1512 {0x0012, CMN_PLL0_SS_CTRL4_M1},
1513 {0x000E, CMN_PLL1_SS_CTRL4_M0},
1514 {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
1515 {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
1516 {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
1517 {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
1518 {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
1519 {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
1520 {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
1521 {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
1522 {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
1523 {0x0005, CMN_PLL1_LOCK_PLLCNT_THR}
1526 static struct cdns_torrent_vals pcie_100_int_ssc_cmn_vals = {
1527 .reg_pairs = pcie_100_int_ssc_cmn_regs,
1528 .num_regs = ARRAY_SIZE(pcie_100_int_ssc_cmn_regs),
1531 /* Single link PCIe, 100 MHz Ref clk, internal SSC */
1532 static struct cdns_reg_pairs sl_pcie_100_int_ssc_cmn_regs[] = {
1533 {0x0004, CMN_PLL0_DSM_DIAG_M0},
1534 {0x0004, CMN_PLL0_DSM_DIAG_M1},
1535 {0x0004, CMN_PLL1_DSM_DIAG_M0},
1536 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M0},
1537 {0x0509, CMN_PDIAG_PLL0_CP_PADJ_M1},
1538 {0x0509, CMN_PDIAG_PLL1_CP_PADJ_M0},
1539 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M0},
1540 {0x0F00, CMN_PDIAG_PLL0_CP_IADJ_M1},
1541 {0x0F00, CMN_PDIAG_PLL1_CP_IADJ_M0},
1542 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M0},
1543 {0x0F08, CMN_PDIAG_PLL0_FILT_PADJ_M1},
1544 {0x0F08, CMN_PDIAG_PLL1_FILT_PADJ_M0},
1545 {0x0064, CMN_PLL0_INTDIV_M0},
1546 {0x0050, CMN_PLL0_INTDIV_M1},
1547 {0x0050, CMN_PLL1_INTDIV_M0},
1548 {0x0002, CMN_PLL0_FRACDIVH_M0},
1549 {0x0002, CMN_PLL0_FRACDIVH_M1},
1550 {0x0002, CMN_PLL1_FRACDIVH_M0},
1551 {0x0044, CMN_PLL0_HIGH_THR_M0},
1552 {0x0036, CMN_PLL0_HIGH_THR_M1},
1553 {0x0036, CMN_PLL1_HIGH_THR_M0},
1554 {0x0002, CMN_PDIAG_PLL0_CTRL_M0},
1555 {0x0002, CMN_PDIAG_PLL0_CTRL_M1},
1556 {0x0002, CMN_PDIAG_PLL1_CTRL_M0},
1557 {0x0001, CMN_PLL0_SS_CTRL1_M0},
1558 {0x0001, CMN_PLL0_SS_CTRL1_M1},
1559 {0x0001, CMN_PLL1_SS_CTRL1_M0},
1560 {0x011B, CMN_PLL0_SS_CTRL2_M0},
1561 {0x011B, CMN_PLL0_SS_CTRL2_M1},
1562 {0x011B, CMN_PLL1_SS_CTRL2_M0},
1563 {0x006E, CMN_PLL0_SS_CTRL3_M0},
1564 {0x0058, CMN_PLL0_SS_CTRL3_M1},
1565 {0x0058, CMN_PLL1_SS_CTRL3_M0},
1566 {0x000E, CMN_PLL0_SS_CTRL4_M0},
1567 {0x0012, CMN_PLL0_SS_CTRL4_M1},
1568 {0x0012, CMN_PLL1_SS_CTRL4_M0},
1569 {0x0C5E, CMN_PLL0_VCOCAL_REFTIM_START},
1570 {0x0C5E, CMN_PLL1_VCOCAL_REFTIM_START},
1571 {0x0C56, CMN_PLL0_VCOCAL_PLLCNT_START},
1572 {0x0C56, CMN_PLL1_VCOCAL_PLLCNT_START},
1573 {0x00C7, CMN_PLL0_LOCK_REFCNT_START},
1574 {0x00C7, CMN_PLL1_LOCK_REFCNT_START},
1575 {0x00C7, CMN_PLL0_LOCK_PLLCNT_START},
1576 {0x00C7, CMN_PLL1_LOCK_PLLCNT_START},
1577 {0x0005, CMN_PLL0_LOCK_PLLCNT_THR},
1578 {0x0005, CMN_PLL1_LOCK_PLLCNT_THR}
1581 static struct cdns_torrent_vals sl_pcie_100_int_ssc_cmn_vals = {
1582 .reg_pairs = sl_pcie_100_int_ssc_cmn_regs,
1583 .num_regs = ARRAY_SIZE(sl_pcie_100_int_ssc_cmn_regs),
1586 /* PCIe, 100 MHz Ref clk, no SSC & external SSC */
1587 static struct cdns_reg_pairs pcie_100_ext_no_ssc_cmn_regs[] = {
1588 {0x0028, CMN_PDIAG_PLL1_CP_PADJ_M0},
1589 {0x001E, CMN_PLL1_DSM_FBH_OVRD_M0},
1590 {0x000C, CMN_PLL1_DSM_FBL_OVRD_M0}
1593 static struct cdns_reg_pairs pcie_100_ext_no_ssc_rx_ln_regs[] = {
1594 {0x0019, RX_REE_TAP1_CLIP},
1595 {0x0019, RX_REE_TAP2TON_CLIP},
1596 {0x0001, RX_DIAG_ACYA}
1599 static struct cdns_torrent_vals pcie_100_no_ssc_cmn_vals = {
1600 .reg_pairs = pcie_100_ext_no_ssc_cmn_regs,
1601 .num_regs = ARRAY_SIZE(pcie_100_ext_no_ssc_cmn_regs),
1604 static struct cdns_torrent_vals pcie_100_no_ssc_rx_ln_vals = {
1605 .reg_pairs = pcie_100_ext_no_ssc_rx_ln_regs,
1606 .num_regs = ARRAY_SIZE(pcie_100_ext_no_ssc_rx_ln_regs),
1609 static const struct cdns_torrent_data cdns_map_torrent = {
1610 .block_offset_shift = 0x2,
1611 .reg_offset_shift = 0x2,
1616 [EXTERNAL_SSC] = NULL,
1617 [INTERNAL_SSC] = NULL,
1620 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
1621 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
1622 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
1625 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
1626 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
1627 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
1630 [NO_SSC] = &pcie_usb_link_cmn_vals,
1631 [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
1632 [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
1637 [NO_SSC] = &sl_sgmii_link_cmn_vals,
1640 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
1641 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
1642 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
1645 [NO_SSC] = &usb_sgmii_link_cmn_vals,
1646 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
1647 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
1652 [NO_SSC] = &sl_sgmii_link_cmn_vals,
1655 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
1656 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
1657 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
1660 [NO_SSC] = &usb_sgmii_link_cmn_vals,
1661 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
1662 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
1667 [NO_SSC] = &sl_usb_link_cmn_vals,
1668 [EXTERNAL_SSC] = &sl_usb_link_cmn_vals,
1669 [INTERNAL_SSC] = &sl_usb_link_cmn_vals,
1672 [NO_SSC] = &pcie_usb_link_cmn_vals,
1673 [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
1674 [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
1677 [NO_SSC] = &usb_sgmii_link_cmn_vals,
1678 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
1679 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
1682 [NO_SSC] = &usb_sgmii_link_cmn_vals,
1683 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
1684 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
1692 [EXTERNAL_SSC] = NULL,
1693 [INTERNAL_SSC] = NULL,
1696 [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
1697 [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
1698 [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
1701 [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
1702 [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
1703 [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
1706 [NO_SSC] = &pcie_usb_xcvr_diag_ln_vals,
1707 [EXTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
1708 [INTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
1713 [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
1716 [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
1717 [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
1718 [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
1721 [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
1722 [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
1723 [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
1728 [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
1731 [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
1732 [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
1733 [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
1736 [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
1737 [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
1738 [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
1743 [NO_SSC] = &sl_usb_xcvr_diag_ln_vals,
1744 [EXTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
1745 [INTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
1748 [NO_SSC] = &usb_pcie_xcvr_diag_ln_vals,
1749 [EXTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
1750 [INTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
1753 [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
1754 [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
1755 [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
1758 [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
1759 [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
1760 [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
1767 [NO_SSC] = &usb_phy_pcs_cmn_vals,
1768 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
1769 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
1772 [NO_SSC] = &usb_phy_pcs_cmn_vals,
1773 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
1774 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
1777 [NO_SSC] = &usb_phy_pcs_cmn_vals,
1778 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
1779 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
1782 [NO_SSC] = &usb_phy_pcs_cmn_vals,
1783 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
1784 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
1792 [EXTERNAL_SSC] = NULL,
1793 [INTERNAL_SSC] = &sl_pcie_100_int_ssc_cmn_vals,
1796 [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
1797 [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
1798 [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
1801 [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
1802 [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
1803 [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
1806 [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
1807 [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
1808 [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
1813 [NO_SSC] = &sl_sgmii_100_no_ssc_cmn_vals,
1816 [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
1817 [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
1818 [INTERNAL_SSC] = &sgmii_100_int_ssc_cmn_vals,
1821 [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
1822 [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
1823 [INTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
1828 [NO_SSC] = &sl_qsgmii_100_no_ssc_cmn_vals,
1831 [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
1832 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
1833 [INTERNAL_SSC] = &qsgmii_100_int_ssc_cmn_vals,
1836 [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
1837 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
1838 [INTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
1843 [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
1844 [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
1845 [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
1848 [NO_SSC] = &usb_100_no_ssc_cmn_vals,
1849 [EXTERNAL_SSC] = &usb_100_no_ssc_cmn_vals,
1850 [INTERNAL_SSC] = &usb_100_int_ssc_cmn_vals,
1853 [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
1854 [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
1855 [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
1858 [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
1859 [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
1860 [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
1868 [EXTERNAL_SSC] = NULL,
1869 [INTERNAL_SSC] = NULL,
1873 [EXTERNAL_SSC] = NULL,
1874 [INTERNAL_SSC] = NULL,
1878 [EXTERNAL_SSC] = NULL,
1879 [INTERNAL_SSC] = NULL,
1883 [EXTERNAL_SSC] = NULL,
1884 [INTERNAL_SSC] = NULL,
1889 [NO_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
1892 [NO_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
1893 [EXTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
1894 [INTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
1897 [NO_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
1898 [EXTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
1899 [INTERNAL_SSC] = &sgmii_100_no_ssc_tx_ln_vals,
1904 [NO_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
1907 [NO_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
1908 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
1909 [INTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
1912 [NO_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
1913 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
1914 [INTERNAL_SSC] = &qsgmii_100_no_ssc_tx_ln_vals,
1919 [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
1920 [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
1921 [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
1924 [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
1925 [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
1926 [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
1929 [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
1930 [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
1931 [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
1934 [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
1935 [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
1936 [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
1943 [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1944 [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1945 [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1948 [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1949 [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1950 [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1953 [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1954 [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1955 [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1958 [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1959 [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1960 [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
1965 [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
1968 [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
1969 [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
1970 [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
1973 [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
1974 [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
1975 [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
1980 [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
1983 [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
1984 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
1985 [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
1988 [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
1989 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
1990 [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
1995 [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
1996 [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
1997 [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2000 [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
2001 [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2002 [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2005 [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
2006 [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2007 [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2010 [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
2011 [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2012 [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2018 static const struct cdns_torrent_data ti_j721e_map_torrent = {
2019 .block_offset_shift = 0x0,
2020 .reg_offset_shift = 0x1,
2025 [EXTERNAL_SSC] = NULL,
2026 [INTERNAL_SSC] = NULL,
2029 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
2030 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
2031 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
2034 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
2035 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
2036 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
2039 [NO_SSC] = &pcie_usb_link_cmn_vals,
2040 [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
2041 [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
2046 [NO_SSC] = &sl_sgmii_link_cmn_vals,
2049 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
2050 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
2051 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
2054 [NO_SSC] = &usb_sgmii_link_cmn_vals,
2055 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
2056 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
2061 [NO_SSC] = &sl_sgmii_link_cmn_vals,
2064 [NO_SSC] = &pcie_sgmii_link_cmn_vals,
2065 [EXTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
2066 [INTERNAL_SSC] = &pcie_sgmii_link_cmn_vals,
2069 [NO_SSC] = &usb_sgmii_link_cmn_vals,
2070 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
2071 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
2076 [NO_SSC] = &sl_usb_link_cmn_vals,
2077 [EXTERNAL_SSC] = &sl_usb_link_cmn_vals,
2078 [INTERNAL_SSC] = &sl_usb_link_cmn_vals,
2081 [NO_SSC] = &pcie_usb_link_cmn_vals,
2082 [EXTERNAL_SSC] = &pcie_usb_link_cmn_vals,
2083 [INTERNAL_SSC] = &pcie_usb_link_cmn_vals,
2086 [NO_SSC] = &usb_sgmii_link_cmn_vals,
2087 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
2088 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
2091 [NO_SSC] = &usb_sgmii_link_cmn_vals,
2092 [EXTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
2093 [INTERNAL_SSC] = &usb_sgmii_link_cmn_vals,
2101 [EXTERNAL_SSC] = NULL,
2102 [INTERNAL_SSC] = NULL,
2105 [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
2106 [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
2107 [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
2110 [NO_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
2111 [EXTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
2112 [INTERNAL_SSC] = &pcie_sgmii_xcvr_diag_ln_vals,
2115 [NO_SSC] = &pcie_usb_xcvr_diag_ln_vals,
2116 [EXTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
2117 [INTERNAL_SSC] = &pcie_usb_xcvr_diag_ln_vals,
2122 [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
2125 [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
2126 [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
2127 [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
2130 [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
2131 [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
2132 [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
2137 [NO_SSC] = &sl_sgmii_xcvr_diag_ln_vals,
2140 [NO_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
2141 [EXTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
2142 [INTERNAL_SSC] = &sgmii_pcie_xcvr_diag_ln_vals,
2145 [NO_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
2146 [EXTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
2147 [INTERNAL_SSC] = &sgmii_usb_xcvr_diag_ln_vals,
2152 [NO_SSC] = &sl_usb_xcvr_diag_ln_vals,
2153 [EXTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
2154 [INTERNAL_SSC] = &sl_usb_xcvr_diag_ln_vals,
2157 [NO_SSC] = &usb_pcie_xcvr_diag_ln_vals,
2158 [EXTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
2159 [INTERNAL_SSC] = &usb_pcie_xcvr_diag_ln_vals,
2162 [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
2163 [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
2164 [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
2167 [NO_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
2168 [EXTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
2169 [INTERNAL_SSC] = &usb_sgmii_xcvr_diag_ln_vals,
2176 [NO_SSC] = &usb_phy_pcs_cmn_vals,
2177 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
2178 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
2181 [NO_SSC] = &usb_phy_pcs_cmn_vals,
2182 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
2183 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
2186 [NO_SSC] = &usb_phy_pcs_cmn_vals,
2187 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
2188 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
2191 [NO_SSC] = &usb_phy_pcs_cmn_vals,
2192 [EXTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
2193 [INTERNAL_SSC] = &usb_phy_pcs_cmn_vals,
2201 [EXTERNAL_SSC] = NULL,
2202 [INTERNAL_SSC] = &sl_pcie_100_int_ssc_cmn_vals,
2205 [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
2206 [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
2207 [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
2210 [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
2211 [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
2212 [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
2215 [NO_SSC] = &pcie_100_no_ssc_cmn_vals,
2216 [EXTERNAL_SSC] = &pcie_100_no_ssc_cmn_vals,
2217 [INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
2222 [NO_SSC] = &sl_sgmii_100_no_ssc_cmn_vals,
2225 [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
2226 [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
2227 [INTERNAL_SSC] = &sgmii_100_int_ssc_cmn_vals,
2230 [NO_SSC] = &sgmii_100_no_ssc_cmn_vals,
2231 [EXTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
2232 [INTERNAL_SSC] = &sgmii_100_no_ssc_cmn_vals,
2237 [NO_SSC] = &sl_qsgmii_100_no_ssc_cmn_vals,
2240 [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
2241 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
2242 [INTERNAL_SSC] = &qsgmii_100_int_ssc_cmn_vals,
2245 [NO_SSC] = &qsgmii_100_no_ssc_cmn_vals,
2246 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
2247 [INTERNAL_SSC] = &qsgmii_100_no_ssc_cmn_vals,
2252 [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
2253 [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
2254 [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
2257 [NO_SSC] = &usb_100_no_ssc_cmn_vals,
2258 [EXTERNAL_SSC] = &usb_100_no_ssc_cmn_vals,
2259 [INTERNAL_SSC] = &usb_100_int_ssc_cmn_vals,
2262 [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
2263 [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
2264 [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
2267 [NO_SSC] = &sl_usb_100_no_ssc_cmn_vals,
2268 [EXTERNAL_SSC] = &sl_usb_100_no_ssc_cmn_vals,
2269 [INTERNAL_SSC] = &sl_usb_100_int_ssc_cmn_vals,
2277 [EXTERNAL_SSC] = NULL,
2278 [INTERNAL_SSC] = NULL,
2282 [EXTERNAL_SSC] = NULL,
2283 [INTERNAL_SSC] = NULL,
2287 [EXTERNAL_SSC] = NULL,
2288 [INTERNAL_SSC] = NULL,
2292 [EXTERNAL_SSC] = NULL,
2293 [INTERNAL_SSC] = NULL,
2298 [NO_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
2301 [NO_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
2302 [EXTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
2303 [INTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
2306 [NO_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
2307 [EXTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
2308 [INTERNAL_SSC] = &ti_sgmii_100_no_ssc_tx_ln_vals,
2313 [NO_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
2316 [NO_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
2317 [EXTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
2318 [INTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
2321 [NO_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
2322 [EXTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
2323 [INTERNAL_SSC] = &ti_qsgmii_100_no_ssc_tx_ln_vals,
2328 [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
2329 [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
2330 [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
2333 [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
2334 [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
2335 [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
2338 [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
2339 [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
2340 [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
2343 [NO_SSC] = &usb_100_no_ssc_tx_ln_vals,
2344 [EXTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
2345 [INTERNAL_SSC] = &usb_100_no_ssc_tx_ln_vals,
2352 [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2353 [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2354 [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2357 [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2358 [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2359 [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2362 [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2363 [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2364 [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2367 [NO_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2368 [EXTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2369 [INTERNAL_SSC] = &pcie_100_no_ssc_rx_ln_vals,
2374 [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
2377 [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
2378 [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
2379 [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
2382 [NO_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
2383 [EXTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
2384 [INTERNAL_SSC] = &sgmii_100_no_ssc_rx_ln_vals,
2389 [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
2392 [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
2393 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
2394 [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
2397 [NO_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
2398 [EXTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
2399 [INTERNAL_SSC] = &qsgmii_100_no_ssc_rx_ln_vals,
2404 [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
2405 [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2406 [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2409 [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
2410 [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2411 [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2414 [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
2415 [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2416 [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2419 [NO_SSC] = &usb_100_no_ssc_rx_ln_vals,
2420 [EXTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2421 [INTERNAL_SSC] = &usb_100_no_ssc_rx_ln_vals,
2427 static int cdns_torrent_phy_reset(struct phy *gphy)
2429 struct cdns_torrent_phy *sp = dev_get_priv(gphy->dev);
2431 reset_control_assert(sp->phy_rst);
2432 reset_control_deassert(sp->phy_rst);
2436 static const struct udevice_id cdns_torrent_id_table[] = {
2438 .compatible = "cdns,torrent-phy",
2439 .data = (ulong)&cdns_map_torrent,
2442 .compatible = "ti,j721e-serdes-10g",
2443 .data = (ulong)&ti_j721e_map_torrent,
2448 static const struct phy_ops cdns_torrent_phy_ops = {
2449 .init = cdns_torrent_phy_init,
2450 .power_on = cdns_torrent_phy_on,
2451 .power_off = cdns_torrent_phy_off,
2452 .reset = cdns_torrent_phy_reset,
2455 U_BOOT_DRIVER(torrent_phy_provider) = {
2456 .name = "cdns,torrent",
2458 .of_match = cdns_torrent_id_table,
2459 .probe = cdns_torrent_phy_probe,
2460 .remove = cdns_torrent_phy_remove,
2461 .ops = &cdns_torrent_phy_ops,
2462 .priv_auto = sizeof(struct cdns_torrent_phy),