Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

phy: Add Sparx5 ethernet serdes PHY driver

Add the Microchip Sparx5 ethernet serdes PHY driver for the 6G, 10G and 25G
interfaces available in the Sparx5 SoC.

Signed-off-by: Bjarni Jonasson <bjarni.jonasson@microchip.com>
Signed-off-by: Steen Hegelund <steen.hegelund@microchip.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20210218161451.3489955-4-steen.hegelund@microchip.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Steen Hegelund and committed by
Vinod Koul
2ff8a1ee 6c172e73

+5331
+1
drivers/phy/Kconfig
··· 71 71 source "drivers/phy/lantiq/Kconfig" 72 72 source "drivers/phy/marvell/Kconfig" 73 73 source "drivers/phy/mediatek/Kconfig" 74 + source "drivers/phy/microchip/Kconfig" 74 75 source "drivers/phy/motorola/Kconfig" 75 76 source "drivers/phy/mscc/Kconfig" 76 77 source "drivers/phy/qualcomm/Kconfig"
+1
drivers/phy/Makefile
··· 20 20 lantiq/ \ 21 21 marvell/ \ 22 22 mediatek/ \ 23 + microchip/ \ 23 24 motorola/ \ 24 25 mscc/ \ 25 26 qualcomm/ \
+12
drivers/phy/microchip/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + # 3 + # Phy drivers for Microchip devices 4 + # 5 + 6 + config PHY_SPARX5_SERDES 7 + tristate "Microchip Sparx5 SerDes PHY driver" 8 + select GENERIC_PHY 9 + depends on OF 10 + depends on HAS_IOMEM 11 + help 12 + Enable this for support of the 10G/25G SerDes on Microchip Sparx5.
+6
drivers/phy/microchip/Makefile
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + # 3 + # Makefile for the Microchip phy drivers. 4 + # 5 + 6 + obj-$(CONFIG_PHY_SPARX5_SERDES) := sparx5_serdes.o
+2480
drivers/phy/microchip/sparx5_serdes.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* Microchip Sparx5 Switch SerDes driver 3 + * 4 + * Copyright (c) 2020 Microchip Technology Inc. and its subsidiaries. 5 + * 6 + * The Sparx5 Chip Register Model can be browsed at this location: 7 + * https://github.com/microchip-ung/sparx-5_reginfo 8 + * and the datasheet is available here: 9 + * https://ww1.microchip.com/downloads/en/DeviceDoc/SparX-5_Family_L2L3_Enterprise_10G_Ethernet_Switches_Datasheet_00003822B.pdf 10 + */ 11 + #include <linux/printk.h> 12 + #include <linux/module.h> 13 + #include <linux/device.h> 14 + #include <linux/netdevice.h> 15 + #include <linux/platform_device.h> 16 + #include <linux/of.h> 17 + #include <linux/io.h> 18 + #include <linux/clk.h> 19 + #include <linux/phy.h> 20 + #include <linux/phy/phy.h> 21 + 22 + #include "sparx5_serdes.h" 23 + 24 + #define SPX5_CMU_MAX 14 25 + 26 + #define SPX5_SERDES_10G_START 13 27 + #define SPX5_SERDES_25G_START 25 28 + 29 + enum sparx5_10g28cmu_mode { 30 + SPX5_SD10G28_CMU_MAIN = 0, 31 + SPX5_SD10G28_CMU_AUX1 = 1, 32 + SPX5_SD10G28_CMU_AUX2 = 3, 33 + SPX5_SD10G28_CMU_NONE = 4, 34 + }; 35 + 36 + enum sparx5_sd25g28_mode_preset_type { 37 + SPX5_SD25G28_MODE_PRESET_25000, 38 + SPX5_SD25G28_MODE_PRESET_10000, 39 + SPX5_SD25G28_MODE_PRESET_5000, 40 + SPX5_SD25G28_MODE_PRESET_SD_2G5, 41 + SPX5_SD25G28_MODE_PRESET_1000BASEX, 42 + }; 43 + 44 + enum sparx5_sd10g28_mode_preset_type { 45 + SPX5_SD10G28_MODE_PRESET_10000, 46 + SPX5_SD10G28_MODE_PRESET_SFI_5000_6G, 47 + SPX5_SD10G28_MODE_PRESET_SFI_5000_10G, 48 + SPX5_SD10G28_MODE_PRESET_QSGMII, 49 + SPX5_SD10G28_MODE_PRESET_SD_2G5, 50 + SPX5_SD10G28_MODE_PRESET_1000BASEX, 51 + }; 52 + 53 + struct sparx5_serdes_io_resource { 54 + enum sparx5_serdes_target id; 55 + phys_addr_t offset; 56 + }; 57 + 58 + struct sparx5_sd25g28_mode_preset { 59 + u8 bitwidth; 60 + u8 tx_pre_div; 61 + u8 fifo_ck_div; 62 + u8 pre_divsel; 63 + u8 vco_div_mode; 64 + u8 sel_div; 65 + u8 ck_bitwidth; 66 + u8 subrate; 67 + u8 com_txcal_en; 68 + u8 com_tx_reserve_msb; 69 + u8 com_tx_reserve_lsb; 70 + u8 cfg_itx_ipcml_base; 71 + u8 tx_reserve_lsb; 72 + u8 tx_reserve_msb; 73 + u8 bw; 74 + u8 rxterm; 75 + u8 dfe_tap; 76 + u8 dfe_enable; 77 + bool txmargin; 78 + u8 cfg_ctle_rstn; 79 + u8 r_dfe_rstn; 80 + u8 cfg_pi_bw_3_0; 81 + u8 tx_tap_dly; 82 + u8 tx_tap_adv; 83 + }; 84 + 85 + struct sparx5_sd25g28_media_preset { 86 + u8 cfg_eq_c_force_3_0; 87 + u8 cfg_vga_ctrl_byp_4_0; 88 + u8 cfg_eq_r_force_3_0; 89 + u8 cfg_en_adv; 90 + u8 cfg_en_main; 91 + u8 cfg_en_dly; 92 + u8 cfg_tap_adv_3_0; 93 + u8 cfg_tap_main; 94 + u8 cfg_tap_dly_4_0; 95 + u8 cfg_alos_thr_2_0; 96 + }; 97 + 98 + struct sparx5_sd25g28_args { 99 + u8 if_width; /* UDL if-width: 10/16/20/32/64 */ 100 + bool skip_cmu_cfg:1; /* Enable/disable CMU cfg */ 101 + enum sparx5_10g28cmu_mode cmu_sel; /* Device/Mode serdes uses */ 102 + bool no_pwrcycle:1; /* Omit initial power-cycle */ 103 + bool txinvert:1; /* Enable inversion of output data */ 104 + bool rxinvert:1; /* Enable inversion of input data */ 105 + u16 txswing; /* Set output level */ 106 + u8 rate; /* Rate of network interface */ 107 + u8 pi_bw_gen1; 108 + u8 duty_cycle; /* Set output level to half/full */ 109 + bool mute:1; /* Mute Output Buffer */ 110 + bool reg_rst:1; 111 + u8 com_pll_reserve; 112 + }; 113 + 114 + struct sparx5_sd25g28_params { 115 + u8 reg_rst; 116 + u8 cfg_jc_byp; 117 + u8 cfg_common_reserve_7_0; 118 + u8 r_reg_manual; 119 + u8 r_d_width_ctrl_from_hwt; 120 + u8 r_d_width_ctrl_2_0; 121 + u8 r_txfifo_ck_div_pmad_2_0; 122 + u8 r_rxfifo_ck_div_pmad_2_0; 123 + u8 cfg_pll_lol_set; 124 + u8 cfg_vco_div_mode_1_0; 125 + u8 cfg_pre_divsel_1_0; 126 + u8 cfg_sel_div_3_0; 127 + u8 cfg_vco_start_code_3_0; 128 + u8 cfg_pma_tx_ck_bitwidth_2_0; 129 + u8 cfg_tx_prediv_1_0; 130 + u8 cfg_rxdiv_sel_2_0; 131 + u8 cfg_tx_subrate_2_0; 132 + u8 cfg_rx_subrate_2_0; 133 + u8 r_multi_lane_mode; 134 + u8 cfg_cdrck_en; 135 + u8 cfg_dfeck_en; 136 + u8 cfg_dfe_pd; 137 + u8 cfg_dfedmx_pd; 138 + u8 cfg_dfetap_en_5_1; 139 + u8 cfg_dmux_pd; 140 + u8 cfg_dmux_clk_pd; 141 + u8 cfg_erramp_pd; 142 + u8 cfg_pi_dfe_en; 143 + u8 cfg_pi_en; 144 + u8 cfg_pd_ctle; 145 + u8 cfg_summer_en; 146 + u8 cfg_pmad_ck_pd; 147 + u8 cfg_pd_clk; 148 + u8 cfg_pd_cml; 149 + u8 cfg_pd_driver; 150 + u8 cfg_rx_reg_pu; 151 + u8 cfg_pd_rms_det; 152 + u8 cfg_dcdr_pd; 153 + u8 cfg_ecdr_pd; 154 + u8 cfg_pd_sq; 155 + u8 cfg_itx_ipdriver_base_2_0; 156 + u8 cfg_tap_dly_4_0; 157 + u8 cfg_tap_main; 158 + u8 cfg_en_main; 159 + u8 cfg_tap_adv_3_0; 160 + u8 cfg_en_adv; 161 + u8 cfg_en_dly; 162 + u8 cfg_iscan_en; 163 + u8 l1_pcs_en_fast_iscan; 164 + u8 l0_cfg_bw_1_0; 165 + u8 l0_cfg_txcal_en; 166 + u8 cfg_en_dummy; 167 + u8 cfg_pll_reserve_3_0; 168 + u8 l0_cfg_tx_reserve_15_8; 169 + u8 l0_cfg_tx_reserve_7_0; 170 + u8 cfg_tx_reserve_15_8; 171 + u8 cfg_tx_reserve_7_0; 172 + u8 cfg_bw_1_0; 173 + u8 cfg_txcal_man_en; 174 + u8 cfg_phase_man_4_0; 175 + u8 cfg_quad_man_1_0; 176 + u8 cfg_txcal_shift_code_5_0; 177 + u8 cfg_txcal_valid_sel_3_0; 178 + u8 cfg_txcal_en; 179 + u8 cfg_cdr_kf_2_0; 180 + u8 cfg_cdr_m_7_0; 181 + u8 cfg_pi_bw_3_0; 182 + u8 cfg_pi_steps_1_0; 183 + u8 cfg_dis_2ndorder; 184 + u8 cfg_ctle_rstn; 185 + u8 r_dfe_rstn; 186 + u8 cfg_alos_thr_2_0; 187 + u8 cfg_itx_ipcml_base_1_0; 188 + u8 cfg_rx_reserve_7_0; 189 + u8 cfg_rx_reserve_15_8; 190 + u8 cfg_rxterm_2_0; 191 + u8 cfg_fom_selm; 192 + u8 cfg_rx_sp_ctle_1_0; 193 + u8 cfg_isel_ctle_1_0; 194 + u8 cfg_vga_ctrl_byp_4_0; 195 + u8 cfg_vga_byp; 196 + u8 cfg_agc_adpt_byp; 197 + u8 cfg_eqr_byp; 198 + u8 cfg_eqr_force_3_0; 199 + u8 cfg_eqc_force_3_0; 200 + u8 cfg_sum_setcm_en; 201 + u8 cfg_init_pos_iscan_6_0; 202 + u8 cfg_init_pos_ipi_6_0; 203 + u8 cfg_dfedig_m_2_0; 204 + u8 cfg_en_dfedig; 205 + u8 cfg_pi_DFE_en; 206 + u8 cfg_tx2rx_lp_en; 207 + u8 cfg_txlb_en; 208 + u8 cfg_rx2tx_lp_en; 209 + u8 cfg_rxlb_en; 210 + u8 r_tx_pol_inv; 211 + u8 r_rx_pol_inv; 212 + }; 213 + 214 + struct sparx5_sd10g28_media_preset { 215 + u8 cfg_en_adv; 216 + u8 cfg_en_main; 217 + u8 cfg_en_dly; 218 + u8 cfg_tap_adv_3_0; 219 + u8 cfg_tap_main; 220 + u8 cfg_tap_dly_4_0; 221 + u8 cfg_vga_ctrl_3_0; 222 + u8 cfg_vga_cp_2_0; 223 + u8 cfg_eq_res_3_0; 224 + u8 cfg_eq_r_byp; 225 + u8 cfg_eq_c_force_3_0; 226 + u8 cfg_alos_thr_3_0; 227 + }; 228 + 229 + struct sparx5_sd10g28_mode_preset { 230 + u8 bwidth; /* interface width: 10/16/20/32/64 */ 231 + enum sparx5_10g28cmu_mode cmu_sel; /* Device/Mode serdes uses */ 232 + u8 rate; /* Rate of network interface */ 233 + u8 dfe_tap; 234 + u8 dfe_enable; 235 + u8 pi_bw_gen1; 236 + u8 duty_cycle; /* Set output level to half/full */ 237 + }; 238 + 239 + struct sparx5_sd10g28_args { 240 + bool skip_cmu_cfg:1; /* Enable/disable CMU cfg */ 241 + bool no_pwrcycle:1; /* Omit initial power-cycle */ 242 + bool txinvert:1; /* Enable inversion of output data */ 243 + bool rxinvert:1; /* Enable inversion of input data */ 244 + bool txmargin:1; /* Set output level to half/full */ 245 + u16 txswing; /* Set output level */ 246 + bool mute:1; /* Mute Output Buffer */ 247 + bool is_6g:1; 248 + bool reg_rst:1; 249 + }; 250 + 251 + struct sparx5_sd10g28_params { 252 + u8 cmu_sel; 253 + u8 is_6g; 254 + u8 skip_cmu_cfg; 255 + u8 cfg_lane_reserve_7_0; 256 + u8 cfg_ssc_rtl_clk_sel; 257 + u8 cfg_lane_reserve_15_8; 258 + u8 cfg_txrate_1_0; 259 + u8 cfg_rxrate_1_0; 260 + u8 r_d_width_ctrl_2_0; 261 + u8 cfg_pma_tx_ck_bitwidth_2_0; 262 + u8 cfg_rxdiv_sel_2_0; 263 + u8 r_pcs2pma_phymode_4_0; 264 + u8 cfg_lane_id_2_0; 265 + u8 cfg_cdrck_en; 266 + u8 cfg_dfeck_en; 267 + u8 cfg_dfe_pd; 268 + u8 cfg_dfetap_en_5_1; 269 + u8 cfg_erramp_pd; 270 + u8 cfg_pi_DFE_en; 271 + u8 cfg_pi_en; 272 + u8 cfg_pd_ctle; 273 + u8 cfg_summer_en; 274 + u8 cfg_pd_rx_cktree; 275 + u8 cfg_pd_clk; 276 + u8 cfg_pd_cml; 277 + u8 cfg_pd_driver; 278 + u8 cfg_rx_reg_pu; 279 + u8 cfg_d_cdr_pd; 280 + u8 cfg_pd_sq; 281 + u8 cfg_rxdet_en; 282 + u8 cfg_rxdet_str; 283 + u8 r_multi_lane_mode; 284 + u8 cfg_en_adv; 285 + u8 cfg_en_main; 286 + u8 cfg_en_dly; 287 + u8 cfg_tap_adv_3_0; 288 + u8 cfg_tap_main; 289 + u8 cfg_tap_dly_4_0; 290 + u8 cfg_vga_ctrl_3_0; 291 + u8 cfg_vga_cp_2_0; 292 + u8 cfg_eq_res_3_0; 293 + u8 cfg_eq_r_byp; 294 + u8 cfg_eq_c_force_3_0; 295 + u8 cfg_en_dfedig; 296 + u8 cfg_sum_setcm_en; 297 + u8 cfg_en_preemph; 298 + u8 cfg_itx_ippreemp_base_1_0; 299 + u8 cfg_itx_ipdriver_base_2_0; 300 + u8 cfg_ibias_tune_reserve_5_0; 301 + u8 cfg_txswing_half; 302 + u8 cfg_dis_2nd_order; 303 + u8 cfg_rx_ssc_lh; 304 + u8 cfg_pi_floop_steps_1_0; 305 + u8 cfg_pi_ext_dac_23_16; 306 + u8 cfg_pi_ext_dac_15_8; 307 + u8 cfg_iscan_ext_dac_7_0; 308 + u8 cfg_cdr_kf_gen1_2_0; 309 + u8 cfg_cdr_kf_gen2_2_0; 310 + u8 cfg_cdr_kf_gen3_2_0; 311 + u8 cfg_cdr_kf_gen4_2_0; 312 + u8 r_cdr_m_gen1_7_0; 313 + u8 cfg_pi_bw_gen1_3_0; 314 + u8 cfg_pi_bw_gen2; 315 + u8 cfg_pi_bw_gen3; 316 + u8 cfg_pi_bw_gen4; 317 + u8 cfg_pi_ext_dac_7_0; 318 + u8 cfg_pi_steps; 319 + u8 cfg_mp_max_3_0; 320 + u8 cfg_rstn_dfedig; 321 + u8 cfg_alos_thr_3_0; 322 + u8 cfg_predrv_slewrate_1_0; 323 + u8 cfg_itx_ipcml_base_1_0; 324 + u8 cfg_ip_pre_base_1_0; 325 + u8 r_cdr_m_gen2_7_0; 326 + u8 r_cdr_m_gen3_7_0; 327 + u8 r_cdr_m_gen4_7_0; 328 + u8 r_en_auto_cdr_rstn; 329 + u8 cfg_oscal_afe; 330 + u8 cfg_pd_osdac_afe; 331 + u8 cfg_resetb_oscal_afe[2]; 332 + u8 cfg_center_spreading; 333 + u8 cfg_m_cnt_maxval_4_0; 334 + u8 cfg_ncnt_maxval_7_0; 335 + u8 cfg_ncnt_maxval_10_8; 336 + u8 cfg_ssc_en; 337 + u8 cfg_tx2rx_lp_en; 338 + u8 cfg_txlb_en; 339 + u8 cfg_rx2tx_lp_en; 340 + u8 cfg_rxlb_en; 341 + u8 r_tx_pol_inv; 342 + u8 r_rx_pol_inv; 343 + u8 fx_100; 344 + }; 345 + 346 + struct sparx5_serdes_regval { 347 + u32 value; 348 + u32 mask; 349 + void __iomem *addr; 350 + }; 351 + 352 + static struct sparx5_sd25g28_media_preset media_presets_25g[] = { 353 + { /* ETH_MEDIA_DEFAULT */ 354 + .cfg_en_adv = 0, 355 + .cfg_en_main = 1, 356 + .cfg_en_dly = 0, 357 + .cfg_tap_adv_3_0 = 0, 358 + .cfg_tap_main = 1, 359 + .cfg_tap_dly_4_0 = 0, 360 + .cfg_eq_c_force_3_0 = 0xf, 361 + .cfg_vga_ctrl_byp_4_0 = 4, 362 + .cfg_eq_r_force_3_0 = 12, 363 + .cfg_alos_thr_2_0 = 7, 364 + }, 365 + { /* ETH_MEDIA_SR */ 366 + .cfg_en_adv = 1, 367 + .cfg_en_main = 1, 368 + .cfg_en_dly = 1, 369 + .cfg_tap_adv_3_0 = 0, 370 + .cfg_tap_main = 1, 371 + .cfg_tap_dly_4_0 = 0x10, 372 + .cfg_eq_c_force_3_0 = 0xf, 373 + .cfg_vga_ctrl_byp_4_0 = 8, 374 + .cfg_eq_r_force_3_0 = 4, 375 + .cfg_alos_thr_2_0 = 0, 376 + }, 377 + { /* ETH_MEDIA_DAC */ 378 + .cfg_en_adv = 0, 379 + .cfg_en_main = 1, 380 + .cfg_en_dly = 0, 381 + .cfg_tap_adv_3_0 = 0, 382 + .cfg_tap_main = 1, 383 + .cfg_tap_dly_4_0 = 0, 384 + .cfg_eq_c_force_3_0 = 0xf, 385 + .cfg_vga_ctrl_byp_4_0 = 8, 386 + .cfg_eq_r_force_3_0 = 0xc, 387 + .cfg_alos_thr_2_0 = 0, 388 + }, 389 + }; 390 + 391 + static struct sparx5_sd25g28_mode_preset mode_presets_25g[] = { 392 + { /* SPX5_SD25G28_MODE_PRESET_25000 */ 393 + .bitwidth = 40, 394 + .tx_pre_div = 0, 395 + .fifo_ck_div = 0, 396 + .pre_divsel = 1, 397 + .vco_div_mode = 0, 398 + .sel_div = 15, 399 + .ck_bitwidth = 3, 400 + .subrate = 0, 401 + .com_txcal_en = 0, 402 + .com_tx_reserve_msb = (0x26 << 1), 403 + .com_tx_reserve_lsb = 0xf0, 404 + .cfg_itx_ipcml_base = 0, 405 + .tx_reserve_msb = 0xcc, 406 + .tx_reserve_lsb = 0xfe, 407 + .bw = 3, 408 + .rxterm = 0, 409 + .dfe_enable = 1, 410 + .dfe_tap = 0x1f, 411 + .txmargin = 1, 412 + .cfg_ctle_rstn = 1, 413 + .r_dfe_rstn = 1, 414 + .cfg_pi_bw_3_0 = 0, 415 + .tx_tap_dly = 8, 416 + .tx_tap_adv = 0xc, 417 + }, 418 + { /* SPX5_SD25G28_MODE_PRESET_10000 */ 419 + .bitwidth = 64, 420 + .tx_pre_div = 0, 421 + .fifo_ck_div = 2, 422 + .pre_divsel = 0, 423 + .vco_div_mode = 1, 424 + .sel_div = 9, 425 + .ck_bitwidth = 0, 426 + .subrate = 0, 427 + .com_txcal_en = 1, 428 + .com_tx_reserve_msb = (0x20 << 1), 429 + .com_tx_reserve_lsb = 0x40, 430 + .cfg_itx_ipcml_base = 0, 431 + .tx_reserve_msb = 0x4c, 432 + .tx_reserve_lsb = 0x44, 433 + .bw = 3, 434 + .cfg_pi_bw_3_0 = 0, 435 + .rxterm = 3, 436 + .dfe_enable = 1, 437 + .dfe_tap = 0x1f, 438 + .txmargin = 0, 439 + .cfg_ctle_rstn = 1, 440 + .r_dfe_rstn = 1, 441 + .tx_tap_dly = 0, 442 + .tx_tap_adv = 0, 443 + }, 444 + { /* SPX5_SD25G28_MODE_PRESET_5000 */ 445 + .bitwidth = 64, 446 + .tx_pre_div = 0, 447 + .fifo_ck_div = 2, 448 + .pre_divsel = 0, 449 + .vco_div_mode = 2, 450 + .sel_div = 9, 451 + .ck_bitwidth = 0, 452 + .subrate = 0, 453 + .com_txcal_en = 1, 454 + .com_tx_reserve_msb = (0x20 << 1), 455 + .com_tx_reserve_lsb = 0, 456 + .cfg_itx_ipcml_base = 0, 457 + .tx_reserve_msb = 0xe, 458 + .tx_reserve_lsb = 0x80, 459 + .bw = 0, 460 + .rxterm = 0, 461 + .cfg_pi_bw_3_0 = 6, 462 + .dfe_enable = 0, 463 + .dfe_tap = 0, 464 + .tx_tap_dly = 0, 465 + .tx_tap_adv = 0, 466 + }, 467 + { /* SPX5_SD25G28_MODE_PRESET_SD_2G5 */ 468 + .bitwidth = 10, 469 + .tx_pre_div = 0, 470 + .fifo_ck_div = 0, 471 + .pre_divsel = 0, 472 + .vco_div_mode = 1, 473 + .sel_div = 6, 474 + .ck_bitwidth = 3, 475 + .subrate = 2, 476 + .com_txcal_en = 1, 477 + .com_tx_reserve_msb = (0x26 << 1), 478 + .com_tx_reserve_lsb = (0xf << 4), 479 + .cfg_itx_ipcml_base = 2, 480 + .tx_reserve_msb = 0x8, 481 + .tx_reserve_lsb = 0x8a, 482 + .bw = 0, 483 + .cfg_pi_bw_3_0 = 0, 484 + .rxterm = (1 << 2), 485 + .dfe_enable = 0, 486 + .dfe_tap = 0, 487 + .tx_tap_dly = 0, 488 + .tx_tap_adv = 0, 489 + }, 490 + { /* SPX5_SD25G28_MODE_PRESET_1000BASEX */ 491 + .bitwidth = 10, 492 + .tx_pre_div = 0, 493 + .fifo_ck_div = 1, 494 + .pre_divsel = 0, 495 + .vco_div_mode = 1, 496 + .sel_div = 8, 497 + .ck_bitwidth = 3, 498 + .subrate = 3, 499 + .com_txcal_en = 1, 500 + .com_tx_reserve_msb = (0x26 << 1), 501 + .com_tx_reserve_lsb = 0xf0, 502 + .cfg_itx_ipcml_base = 0, 503 + .tx_reserve_msb = 0x8, 504 + .tx_reserve_lsb = 0xce, 505 + .bw = 0, 506 + .rxterm = 0, 507 + .cfg_pi_bw_3_0 = 0, 508 + .dfe_enable = 0, 509 + .dfe_tap = 0, 510 + .tx_tap_dly = 0, 511 + .tx_tap_adv = 0, 512 + }, 513 + }; 514 + 515 + static struct sparx5_sd10g28_media_preset media_presets_10g[] = { 516 + { /* ETH_MEDIA_DEFAULT */ 517 + .cfg_en_adv = 0, 518 + .cfg_en_main = 1, 519 + .cfg_en_dly = 0, 520 + .cfg_tap_adv_3_0 = 0, 521 + .cfg_tap_main = 1, 522 + .cfg_tap_dly_4_0 = 0, 523 + .cfg_vga_ctrl_3_0 = 5, 524 + .cfg_vga_cp_2_0 = 0, 525 + .cfg_eq_res_3_0 = 0xa, 526 + .cfg_eq_r_byp = 1, 527 + .cfg_eq_c_force_3_0 = 0x8, 528 + .cfg_alos_thr_3_0 = 0x3, 529 + }, 530 + { /* ETH_MEDIA_SR */ 531 + .cfg_en_adv = 1, 532 + .cfg_en_main = 1, 533 + .cfg_en_dly = 1, 534 + .cfg_tap_adv_3_0 = 0, 535 + .cfg_tap_main = 1, 536 + .cfg_tap_dly_4_0 = 0xc, 537 + .cfg_vga_ctrl_3_0 = 0xa, 538 + .cfg_vga_cp_2_0 = 0x4, 539 + .cfg_eq_res_3_0 = 0xa, 540 + .cfg_eq_r_byp = 1, 541 + .cfg_eq_c_force_3_0 = 0xF, 542 + .cfg_alos_thr_3_0 = 0x3, 543 + }, 544 + { /* ETH_MEDIA_DAC */ 545 + .cfg_en_adv = 1, 546 + .cfg_en_main = 1, 547 + .cfg_en_dly = 1, 548 + .cfg_tap_adv_3_0 = 12, 549 + .cfg_tap_main = 1, 550 + .cfg_tap_dly_4_0 = 8, 551 + .cfg_vga_ctrl_3_0 = 0xa, 552 + .cfg_vga_cp_2_0 = 4, 553 + .cfg_eq_res_3_0 = 0xa, 554 + .cfg_eq_r_byp = 1, 555 + .cfg_eq_c_force_3_0 = 0xf, 556 + .cfg_alos_thr_3_0 = 0x0, 557 + } 558 + }; 559 + 560 + static struct sparx5_sd10g28_mode_preset mode_presets_10g[] = { 561 + { /* SPX5_SD10G28_MODE_PRESET_10000 */ 562 + .bwidth = 64, 563 + .cmu_sel = SPX5_SD10G28_CMU_MAIN, 564 + .rate = 0x0, 565 + .dfe_enable = 1, 566 + .dfe_tap = 0x1f, 567 + .pi_bw_gen1 = 0x0, 568 + .duty_cycle = 0x2, 569 + }, 570 + { /* SPX5_SD10G28_MODE_PRESET_SFI_5000_6G */ 571 + .bwidth = 16, 572 + .cmu_sel = SPX5_SD10G28_CMU_MAIN, 573 + .rate = 0x1, 574 + .dfe_enable = 0, 575 + .dfe_tap = 0, 576 + .pi_bw_gen1 = 0x5, 577 + .duty_cycle = 0x0, 578 + }, 579 + { /* SPX5_SD10G28_MODE_PRESET_SFI_5000_10G */ 580 + .bwidth = 64, 581 + .cmu_sel = SPX5_SD10G28_CMU_MAIN, 582 + .rate = 0x1, 583 + .dfe_enable = 0, 584 + .dfe_tap = 0, 585 + .pi_bw_gen1 = 0x5, 586 + .duty_cycle = 0x0, 587 + }, 588 + { /* SPX5_SD10G28_MODE_PRESET_QSGMII */ 589 + .bwidth = 20, 590 + .cmu_sel = SPX5_SD10G28_CMU_AUX1, 591 + .rate = 0x1, 592 + .dfe_enable = 0, 593 + .dfe_tap = 0, 594 + .pi_bw_gen1 = 0x5, 595 + .duty_cycle = 0x0, 596 + }, 597 + { /* SPX5_SD10G28_MODE_PRESET_SD_2G5 */ 598 + .bwidth = 10, 599 + .cmu_sel = SPX5_SD10G28_CMU_AUX2, 600 + .rate = 0x2, 601 + .dfe_enable = 0, 602 + .dfe_tap = 0, 603 + .pi_bw_gen1 = 0x7, 604 + .duty_cycle = 0x0, 605 + }, 606 + { /* SPX5_SD10G28_MODE_PRESET_1000BASEX */ 607 + .bwidth = 10, 608 + .cmu_sel = SPX5_SD10G28_CMU_AUX1, 609 + .rate = 0x3, 610 + .dfe_enable = 0, 611 + .dfe_tap = 0, 612 + .pi_bw_gen1 = 0x7, 613 + .duty_cycle = 0x0, 614 + }, 615 + }; 616 + 617 + /* map from SD25G28 interface width to configuration value */ 618 + static u8 sd25g28_get_iw_setting(struct device *dev, const u8 interface_width) 619 + { 620 + switch (interface_width) { 621 + case 10: return 0; 622 + case 16: return 1; 623 + case 32: return 3; 624 + case 40: return 4; 625 + case 64: return 5; 626 + default: 627 + dev_err(dev, "%s: Illegal value %d for interface width\n", 628 + __func__, interface_width); 629 + } 630 + return 0; 631 + } 632 + 633 + /* map from SD10G28 interface width to configuration value */ 634 + static u8 sd10g28_get_iw_setting(struct device *dev, const u8 interface_width) 635 + { 636 + switch (interface_width) { 637 + case 10: return 0; 638 + case 16: return 1; 639 + case 20: return 2; 640 + case 32: return 3; 641 + case 40: return 4; 642 + case 64: return 7; 643 + default: 644 + dev_err(dev, "%s: Illegal value %d for interface width\n", __func__, 645 + interface_width); 646 + return 0; 647 + } 648 + } 649 + 650 + static int sparx5_sd10g25_get_mode_preset(struct sparx5_serdes_macro *macro, 651 + struct sparx5_sd25g28_mode_preset *mode) 652 + { 653 + switch (macro->serdesmode) { 654 + case SPX5_SD_MODE_SFI: 655 + if (macro->speed == SPEED_25000) 656 + *mode = mode_presets_25g[SPX5_SD25G28_MODE_PRESET_25000]; 657 + else if (macro->speed == SPEED_10000) 658 + *mode = mode_presets_25g[SPX5_SD25G28_MODE_PRESET_10000]; 659 + else if (macro->speed == SPEED_5000) 660 + *mode = mode_presets_25g[SPX5_SD25G28_MODE_PRESET_5000]; 661 + break; 662 + case SPX5_SD_MODE_2G5: 663 + *mode = mode_presets_25g[SPX5_SD25G28_MODE_PRESET_SD_2G5]; 664 + break; 665 + case SPX5_SD_MODE_1000BASEX: 666 + *mode = mode_presets_25g[SPX5_SD25G28_MODE_PRESET_1000BASEX]; 667 + break; 668 + case SPX5_SD_MODE_100FX: 669 + /* Not supported */ 670 + return -EINVAL; 671 + default: 672 + *mode = mode_presets_25g[SPX5_SD25G28_MODE_PRESET_25000]; 673 + break; 674 + } 675 + return 0; 676 + } 677 + 678 + static int sparx5_sd10g28_get_mode_preset(struct sparx5_serdes_macro *macro, 679 + struct sparx5_sd10g28_mode_preset *mode, 680 + struct sparx5_sd10g28_args *args) 681 + { 682 + switch (macro->serdesmode) { 683 + case SPX5_SD_MODE_SFI: 684 + if (macro->speed == SPEED_10000) { 685 + *mode = mode_presets_10g[SPX5_SD10G28_MODE_PRESET_10000]; 686 + } else if (macro->speed == SPEED_5000) { 687 + if (args->is_6g) 688 + *mode = mode_presets_10g[SPX5_SD10G28_MODE_PRESET_SFI_5000_6G]; 689 + else 690 + *mode = mode_presets_10g[SPX5_SD10G28_MODE_PRESET_SFI_5000_10G]; 691 + } else { 692 + dev_err(macro->priv->dev, "%s: Illegal speed: %02u, sidx: %02u, mode (%u)", 693 + __func__, macro->speed, macro->sidx, 694 + macro->serdesmode); 695 + return -EINVAL; 696 + } 697 + break; 698 + case SPX5_SD_MODE_QSGMII: 699 + *mode = mode_presets_10g[SPX5_SD10G28_MODE_PRESET_QSGMII]; 700 + break; 701 + case SPX5_SD_MODE_2G5: 702 + *mode = mode_presets_10g[SPX5_SD10G28_MODE_PRESET_SD_2G5]; 703 + break; 704 + case SPX5_SD_MODE_100FX: 705 + case SPX5_SD_MODE_1000BASEX: 706 + *mode = mode_presets_10g[SPX5_SD10G28_MODE_PRESET_1000BASEX]; 707 + break; 708 + default: 709 + *mode = mode_presets_10g[SPX5_SD10G28_MODE_PRESET_10000]; 710 + break; 711 + } 712 + return 0; 713 + } 714 + 715 + static void sparx5_sd25g28_get_params(struct sparx5_serdes_macro *macro, 716 + struct sparx5_sd25g28_media_preset *media, 717 + struct sparx5_sd25g28_mode_preset *mode, 718 + struct sparx5_sd25g28_args *args, 719 + struct sparx5_sd25g28_params *params) 720 + { 721 + u8 iw = sd25g28_get_iw_setting(macro->priv->dev, mode->bitwidth); 722 + struct sparx5_sd25g28_params init = { 723 + .r_d_width_ctrl_2_0 = iw, 724 + .r_txfifo_ck_div_pmad_2_0 = mode->fifo_ck_div, 725 + .r_rxfifo_ck_div_pmad_2_0 = mode->fifo_ck_div, 726 + .cfg_vco_div_mode_1_0 = mode->vco_div_mode, 727 + .cfg_pre_divsel_1_0 = mode->pre_divsel, 728 + .cfg_sel_div_3_0 = mode->sel_div, 729 + .cfg_vco_start_code_3_0 = 0, 730 + .cfg_pma_tx_ck_bitwidth_2_0 = mode->ck_bitwidth, 731 + .cfg_tx_prediv_1_0 = mode->tx_pre_div, 732 + .cfg_rxdiv_sel_2_0 = mode->ck_bitwidth, 733 + .cfg_tx_subrate_2_0 = mode->subrate, 734 + .cfg_rx_subrate_2_0 = mode->subrate, 735 + .r_multi_lane_mode = 0, 736 + .cfg_cdrck_en = 1, 737 + .cfg_dfeck_en = mode->dfe_enable, 738 + .cfg_dfe_pd = mode->dfe_enable == 1 ? 0 : 1, 739 + .cfg_dfedmx_pd = 1, 740 + .cfg_dfetap_en_5_1 = mode->dfe_tap, 741 + .cfg_dmux_pd = 0, 742 + .cfg_dmux_clk_pd = 1, 743 + .cfg_erramp_pd = mode->dfe_enable == 1 ? 0 : 1, 744 + .cfg_pi_DFE_en = mode->dfe_enable, 745 + .cfg_pi_en = 1, 746 + .cfg_pd_ctle = 0, 747 + .cfg_summer_en = 1, 748 + .cfg_pmad_ck_pd = 0, 749 + .cfg_pd_clk = 0, 750 + .cfg_pd_cml = 0, 751 + .cfg_pd_driver = 0, 752 + .cfg_rx_reg_pu = 1, 753 + .cfg_pd_rms_det = 1, 754 + .cfg_dcdr_pd = 0, 755 + .cfg_ecdr_pd = 1, 756 + .cfg_pd_sq = 1, 757 + .cfg_itx_ipdriver_base_2_0 = mode->txmargin, 758 + .cfg_tap_dly_4_0 = media->cfg_tap_dly_4_0, 759 + .cfg_tap_main = media->cfg_tap_main, 760 + .cfg_en_main = media->cfg_en_main, 761 + .cfg_tap_adv_3_0 = media->cfg_tap_adv_3_0, 762 + .cfg_en_adv = media->cfg_en_adv, 763 + .cfg_en_dly = media->cfg_en_dly, 764 + .cfg_iscan_en = 0, 765 + .l1_pcs_en_fast_iscan = 0, 766 + .l0_cfg_bw_1_0 = 0, 767 + .cfg_en_dummy = 0, 768 + .cfg_pll_reserve_3_0 = args->com_pll_reserve, 769 + .l0_cfg_txcal_en = mode->com_txcal_en, 770 + .l0_cfg_tx_reserve_15_8 = mode->com_tx_reserve_msb, 771 + .l0_cfg_tx_reserve_7_0 = mode->com_tx_reserve_lsb, 772 + .cfg_tx_reserve_15_8 = mode->tx_reserve_msb, 773 + .cfg_tx_reserve_7_0 = mode->tx_reserve_lsb, 774 + .cfg_bw_1_0 = mode->bw, 775 + .cfg_txcal_man_en = 1, 776 + .cfg_phase_man_4_0 = 0, 777 + .cfg_quad_man_1_0 = 0, 778 + .cfg_txcal_shift_code_5_0 = 2, 779 + .cfg_txcal_valid_sel_3_0 = 4, 780 + .cfg_txcal_en = 0, 781 + .cfg_cdr_kf_2_0 = 1, 782 + .cfg_cdr_m_7_0 = 6, 783 + .cfg_pi_bw_3_0 = mode->cfg_pi_bw_3_0, 784 + .cfg_pi_steps_1_0 = 0, 785 + .cfg_dis_2ndorder = 1, 786 + .cfg_ctle_rstn = mode->cfg_ctle_rstn, 787 + .r_dfe_rstn = mode->r_dfe_rstn, 788 + .cfg_alos_thr_2_0 = media->cfg_alos_thr_2_0, 789 + .cfg_itx_ipcml_base_1_0 = mode->cfg_itx_ipcml_base, 790 + .cfg_rx_reserve_7_0 = 0xbf, 791 + .cfg_rx_reserve_15_8 = 0x61, 792 + .cfg_rxterm_2_0 = mode->rxterm, 793 + .cfg_fom_selm = 0, 794 + .cfg_rx_sp_ctle_1_0 = 0, 795 + .cfg_isel_ctle_1_0 = 0, 796 + .cfg_vga_ctrl_byp_4_0 = media->cfg_vga_ctrl_byp_4_0, 797 + .cfg_vga_byp = 1, 798 + .cfg_agc_adpt_byp = 1, 799 + .cfg_eqr_byp = 1, 800 + .cfg_eqr_force_3_0 = media->cfg_eq_r_force_3_0, 801 + .cfg_eqc_force_3_0 = media->cfg_eq_c_force_3_0, 802 + .cfg_sum_setcm_en = 1, 803 + .cfg_pi_dfe_en = 1, 804 + .cfg_init_pos_iscan_6_0 = 6, 805 + .cfg_init_pos_ipi_6_0 = 9, 806 + .cfg_dfedig_m_2_0 = 6, 807 + .cfg_en_dfedig = mode->dfe_enable, 808 + .r_d_width_ctrl_from_hwt = 0, 809 + .r_reg_manual = 1, 810 + .reg_rst = args->reg_rst, 811 + .cfg_jc_byp = 1, 812 + .cfg_common_reserve_7_0 = 1, 813 + .cfg_pll_lol_set = 1, 814 + .cfg_tx2rx_lp_en = 0, 815 + .cfg_txlb_en = 0, 816 + .cfg_rx2tx_lp_en = 0, 817 + .cfg_rxlb_en = 0, 818 + .r_tx_pol_inv = args->txinvert, 819 + .r_rx_pol_inv = args->rxinvert, 820 + }; 821 + 822 + *params = init; 823 + } 824 + 825 + static void sparx5_sd10g28_get_params(struct sparx5_serdes_macro *macro, 826 + struct sparx5_sd10g28_media_preset *media, 827 + struct sparx5_sd10g28_mode_preset *mode, 828 + struct sparx5_sd10g28_args *args, 829 + struct sparx5_sd10g28_params *params) 830 + { 831 + u8 iw = sd10g28_get_iw_setting(macro->priv->dev, mode->bwidth); 832 + struct sparx5_sd10g28_params init = { 833 + .skip_cmu_cfg = args->skip_cmu_cfg, 834 + .is_6g = args->is_6g, 835 + .cmu_sel = mode->cmu_sel, 836 + .cfg_lane_reserve_7_0 = (mode->cmu_sel % 2) << 6, 837 + .cfg_ssc_rtl_clk_sel = (mode->cmu_sel / 2), 838 + .cfg_lane_reserve_15_8 = mode->duty_cycle, 839 + .cfg_txrate_1_0 = mode->rate, 840 + .cfg_rxrate_1_0 = mode->rate, 841 + .fx_100 = macro->serdesmode == SPX5_SD_MODE_100FX, 842 + .r_d_width_ctrl_2_0 = iw, 843 + .cfg_pma_tx_ck_bitwidth_2_0 = iw, 844 + .cfg_rxdiv_sel_2_0 = iw, 845 + .r_pcs2pma_phymode_4_0 = 0, 846 + .cfg_lane_id_2_0 = 0, 847 + .cfg_cdrck_en = 1, 848 + .cfg_dfeck_en = mode->dfe_enable, 849 + .cfg_dfe_pd = (mode->dfe_enable == 1) ? 0 : 1, 850 + .cfg_dfetap_en_5_1 = mode->dfe_tap, 851 + .cfg_erramp_pd = (mode->dfe_enable == 1) ? 0 : 1, 852 + .cfg_pi_DFE_en = mode->dfe_enable, 853 + .cfg_pi_en = 1, 854 + .cfg_pd_ctle = 0, 855 + .cfg_summer_en = 1, 856 + .cfg_pd_rx_cktree = 0, 857 + .cfg_pd_clk = 0, 858 + .cfg_pd_cml = 0, 859 + .cfg_pd_driver = 0, 860 + .cfg_rx_reg_pu = 1, 861 + .cfg_d_cdr_pd = 0, 862 + .cfg_pd_sq = mode->dfe_enable, 863 + .cfg_rxdet_en = 0, 864 + .cfg_rxdet_str = 0, 865 + .r_multi_lane_mode = 0, 866 + .cfg_en_adv = media->cfg_en_adv, 867 + .cfg_en_main = 1, 868 + .cfg_en_dly = media->cfg_en_dly, 869 + .cfg_tap_adv_3_0 = media->cfg_tap_adv_3_0, 870 + .cfg_tap_main = media->cfg_tap_main, 871 + .cfg_tap_dly_4_0 = media->cfg_tap_dly_4_0, 872 + .cfg_vga_ctrl_3_0 = media->cfg_vga_ctrl_3_0, 873 + .cfg_vga_cp_2_0 = media->cfg_vga_cp_2_0, 874 + .cfg_eq_res_3_0 = media->cfg_eq_res_3_0, 875 + .cfg_eq_r_byp = media->cfg_eq_r_byp, 876 + .cfg_eq_c_force_3_0 = media->cfg_eq_c_force_3_0, 877 + .cfg_en_dfedig = mode->dfe_enable, 878 + .cfg_sum_setcm_en = 1, 879 + .cfg_en_preemph = 0, 880 + .cfg_itx_ippreemp_base_1_0 = 0, 881 + .cfg_itx_ipdriver_base_2_0 = (args->txswing >> 6), 882 + .cfg_ibias_tune_reserve_5_0 = (args->txswing & 63), 883 + .cfg_txswing_half = (args->txmargin), 884 + .cfg_dis_2nd_order = 0x1, 885 + .cfg_rx_ssc_lh = 0x0, 886 + .cfg_pi_floop_steps_1_0 = 0x0, 887 + .cfg_pi_ext_dac_23_16 = (1 << 5), 888 + .cfg_pi_ext_dac_15_8 = (0 << 6), 889 + .cfg_iscan_ext_dac_7_0 = (1 << 7) + 9, 890 + .cfg_cdr_kf_gen1_2_0 = 1, 891 + .cfg_cdr_kf_gen2_2_0 = 1, 892 + .cfg_cdr_kf_gen3_2_0 = 1, 893 + .cfg_cdr_kf_gen4_2_0 = 1, 894 + .r_cdr_m_gen1_7_0 = 4, 895 + .cfg_pi_bw_gen1_3_0 = mode->pi_bw_gen1, 896 + .cfg_pi_bw_gen2 = mode->pi_bw_gen1, 897 + .cfg_pi_bw_gen3 = mode->pi_bw_gen1, 898 + .cfg_pi_bw_gen4 = mode->pi_bw_gen1, 899 + .cfg_pi_ext_dac_7_0 = 3, 900 + .cfg_pi_steps = 0, 901 + .cfg_mp_max_3_0 = 1, 902 + .cfg_rstn_dfedig = mode->dfe_enable, 903 + .cfg_alos_thr_3_0 = media->cfg_alos_thr_3_0, 904 + .cfg_predrv_slewrate_1_0 = 3, 905 + .cfg_itx_ipcml_base_1_0 = 0, 906 + .cfg_ip_pre_base_1_0 = 0, 907 + .r_cdr_m_gen2_7_0 = 2, 908 + .r_cdr_m_gen3_7_0 = 2, 909 + .r_cdr_m_gen4_7_0 = 2, 910 + .r_en_auto_cdr_rstn = 0, 911 + .cfg_oscal_afe = 1, 912 + .cfg_pd_osdac_afe = 0, 913 + .cfg_resetb_oscal_afe[0] = 0, 914 + .cfg_resetb_oscal_afe[1] = 1, 915 + .cfg_center_spreading = 0, 916 + .cfg_m_cnt_maxval_4_0 = 15, 917 + .cfg_ncnt_maxval_7_0 = 32, 918 + .cfg_ncnt_maxval_10_8 = 6, 919 + .cfg_ssc_en = 1, 920 + .cfg_tx2rx_lp_en = 0, 921 + .cfg_txlb_en = 0, 922 + .cfg_rx2tx_lp_en = 0, 923 + .cfg_rxlb_en = 0, 924 + .r_tx_pol_inv = args->txinvert, 925 + .r_rx_pol_inv = args->rxinvert, 926 + }; 927 + 928 + *params = init; 929 + } 930 + 931 + static void sparx5_sd25g28_reset(void __iomem *regs[], 932 + struct sparx5_sd25g28_params *params, 933 + u32 sd_index) 934 + { 935 + if (params->reg_rst == 1) { 936 + sdx5_rmw_addr(SD_LANE_25G_SD_LANE_CFG_EXT_CFG_RST_SET(1), 937 + SD_LANE_25G_SD_LANE_CFG_EXT_CFG_RST, 938 + sdx5_addr(regs, SD_LANE_25G_SD_LANE_CFG(sd_index))); 939 + 940 + usleep_range(1000, 2000); 941 + 942 + sdx5_rmw_addr(SD_LANE_25G_SD_LANE_CFG_EXT_CFG_RST_SET(0), 943 + SD_LANE_25G_SD_LANE_CFG_EXT_CFG_RST, 944 + sdx5_addr(regs, SD_LANE_25G_SD_LANE_CFG(sd_index))); 945 + } 946 + } 947 + 948 + static int sparx5_sd25g28_apply_params(struct device *dev, 949 + void __iomem *regs[], 950 + struct sparx5_sd25g28_params *params, 951 + u32 sd_index) 952 + { 953 + struct sparx5_serdes_regval item[] = { 954 + { 955 + SD_LANE_25G_SD_LANE_CFG_MACRO_RST_SET(1), 956 + SD_LANE_25G_SD_LANE_CFG_MACRO_RST, 957 + sdx5_addr(regs, SD_LANE_25G_SD_LANE_CFG(sd_index)) 958 + }, 959 + { 960 + SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX_SET(0xFF), 961 + SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX, 962 + sdx5_addr(regs, SD25G_LANE_CMU_FF(sd_index)) 963 + }, 964 + { 965 + SD25G_LANE_CMU_1A_R_DWIDTHCTRL_FROM_HWT_SET 966 + (params->r_d_width_ctrl_from_hwt) | 967 + SD25G_LANE_CMU_1A_R_REG_MANUAL_SET(params->r_reg_manual), 968 + SD25G_LANE_CMU_1A_R_DWIDTHCTRL_FROM_HWT | 969 + SD25G_LANE_CMU_1A_R_REG_MANUAL, 970 + sdx5_addr(regs, SD25G_LANE_CMU_1A(sd_index)) 971 + }, 972 + { 973 + SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0_SET 974 + (params->cfg_common_reserve_7_0), 975 + SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0, 976 + sdx5_addr(regs, SD25G_LANE_CMU_31(sd_index)) 977 + }, 978 + { 979 + SD25G_LANE_CMU_09_CFG_EN_DUMMY_SET(params->cfg_en_dummy), 980 + SD25G_LANE_CMU_09_CFG_EN_DUMMY, 981 + sdx5_addr(regs, SD25G_LANE_CMU_09(sd_index)) 982 + }, 983 + { 984 + SD25G_LANE_CMU_13_CFG_PLL_RESERVE_3_0_SET(params->cfg_pll_reserve_3_0), 985 + SD25G_LANE_CMU_13_CFG_PLL_RESERVE_3_0, 986 + sdx5_addr(regs, SD25G_LANE_CMU_13(sd_index)) 987 + }, 988 + { 989 + SD25G_LANE_CMU_40_L0_CFG_TXCAL_EN_SET(params->l0_cfg_txcal_en), 990 + SD25G_LANE_CMU_40_L0_CFG_TXCAL_EN, 991 + sdx5_addr(regs, SD25G_LANE_CMU_40(sd_index)) 992 + }, 993 + { 994 + SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8_SET 995 + (params->l0_cfg_tx_reserve_15_8), 996 + SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8, 997 + sdx5_addr(regs, SD25G_LANE_CMU_46(sd_index)) 998 + }, 999 + { 1000 + SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0_SET(params->l0_cfg_tx_reserve_7_0), 1001 + SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0, 1002 + sdx5_addr(regs, SD25G_LANE_CMU_45(sd_index)) 1003 + }, 1004 + { 1005 + SD25G_LANE_CMU_0B_CFG_VCO_CAL_RESETN_SET(0), 1006 + SD25G_LANE_CMU_0B_CFG_VCO_CAL_RESETN, 1007 + sdx5_addr(regs, SD25G_LANE_CMU_0B(sd_index)) 1008 + }, 1009 + { 1010 + SD25G_LANE_CMU_0B_CFG_VCO_CAL_RESETN_SET(1), 1011 + SD25G_LANE_CMU_0B_CFG_VCO_CAL_RESETN, 1012 + sdx5_addr(regs, SD25G_LANE_CMU_0B(sd_index)) 1013 + }, 1014 + { 1015 + SD25G_LANE_CMU_19_R_CK_RESETB_SET(0), 1016 + SD25G_LANE_CMU_19_R_CK_RESETB, 1017 + sdx5_addr(regs, SD25G_LANE_CMU_19(sd_index)) 1018 + }, 1019 + { 1020 + SD25G_LANE_CMU_19_R_CK_RESETB_SET(1), 1021 + SD25G_LANE_CMU_19_R_CK_RESETB, 1022 + sdx5_addr(regs, SD25G_LANE_CMU_19(sd_index)) 1023 + }, 1024 + { 1025 + SD25G_LANE_CMU_18_R_PLL_RSTN_SET(0), 1026 + SD25G_LANE_CMU_18_R_PLL_RSTN, 1027 + sdx5_addr(regs, SD25G_LANE_CMU_18(sd_index)) 1028 + }, 1029 + { 1030 + SD25G_LANE_CMU_18_R_PLL_RSTN_SET(1), 1031 + SD25G_LANE_CMU_18_R_PLL_RSTN, 1032 + sdx5_addr(regs, SD25G_LANE_CMU_18(sd_index)) 1033 + }, 1034 + { 1035 + SD25G_LANE_CMU_1A_R_DWIDTHCTRL_2_0_SET(params->r_d_width_ctrl_2_0), 1036 + SD25G_LANE_CMU_1A_R_DWIDTHCTRL_2_0, 1037 + sdx5_addr(regs, SD25G_LANE_CMU_1A(sd_index)) 1038 + }, 1039 + { 1040 + SD25G_LANE_CMU_30_R_TXFIFO_CK_DIV_PMAD_2_0_SET 1041 + (params->r_txfifo_ck_div_pmad_2_0) | 1042 + SD25G_LANE_CMU_30_R_RXFIFO_CK_DIV_PMAD_2_0_SET 1043 + (params->r_rxfifo_ck_div_pmad_2_0), 1044 + SD25G_LANE_CMU_30_R_TXFIFO_CK_DIV_PMAD_2_0 | 1045 + SD25G_LANE_CMU_30_R_RXFIFO_CK_DIV_PMAD_2_0, 1046 + sdx5_addr(regs, SD25G_LANE_CMU_30(sd_index)) 1047 + }, 1048 + { 1049 + SD25G_LANE_CMU_0C_CFG_PLL_LOL_SET_SET(params->cfg_pll_lol_set) | 1050 + SD25G_LANE_CMU_0C_CFG_VCO_DIV_MODE_1_0_SET(params->cfg_vco_div_mode_1_0), 1051 + SD25G_LANE_CMU_0C_CFG_PLL_LOL_SET | 1052 + SD25G_LANE_CMU_0C_CFG_VCO_DIV_MODE_1_0, 1053 + sdx5_addr(regs, SD25G_LANE_CMU_0C(sd_index)) 1054 + }, 1055 + { 1056 + SD25G_LANE_CMU_0D_CFG_PRE_DIVSEL_1_0_SET(params->cfg_pre_divsel_1_0), 1057 + SD25G_LANE_CMU_0D_CFG_PRE_DIVSEL_1_0, 1058 + sdx5_addr(regs, SD25G_LANE_CMU_0D(sd_index)) 1059 + }, 1060 + { 1061 + SD25G_LANE_CMU_0E_CFG_SEL_DIV_3_0_SET(params->cfg_sel_div_3_0), 1062 + SD25G_LANE_CMU_0E_CFG_SEL_DIV_3_0, 1063 + sdx5_addr(regs, SD25G_LANE_CMU_0E(sd_index)) 1064 + }, 1065 + { 1066 + SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX_SET(0x00), 1067 + SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX, 1068 + sdx5_addr(regs, SD25G_LANE_CMU_FF(sd_index)) 1069 + }, 1070 + { 1071 + SD25G_LANE_LANE_0C_LN_CFG_PMA_TX_CK_BITWIDTH_2_0_SET 1072 + (params->cfg_pma_tx_ck_bitwidth_2_0), 1073 + SD25G_LANE_LANE_0C_LN_CFG_PMA_TX_CK_BITWIDTH_2_0, 1074 + sdx5_addr(regs, SD25G_LANE_LANE_0C(sd_index)) 1075 + }, 1076 + { 1077 + SD25G_LANE_LANE_01_LN_CFG_TX_PREDIV_1_0_SET(params->cfg_tx_prediv_1_0), 1078 + SD25G_LANE_LANE_01_LN_CFG_TX_PREDIV_1_0, 1079 + sdx5_addr(regs, SD25G_LANE_LANE_01(sd_index)) 1080 + }, 1081 + { 1082 + SD25G_LANE_LANE_18_LN_CFG_RXDIV_SEL_2_0_SET(params->cfg_rxdiv_sel_2_0), 1083 + SD25G_LANE_LANE_18_LN_CFG_RXDIV_SEL_2_0, 1084 + sdx5_addr(regs, SD25G_LANE_LANE_18(sd_index)) 1085 + }, 1086 + { 1087 + SD25G_LANE_LANE_2C_LN_CFG_TX_SUBRATE_2_0_SET(params->cfg_tx_subrate_2_0), 1088 + SD25G_LANE_LANE_2C_LN_CFG_TX_SUBRATE_2_0, 1089 + sdx5_addr(regs, SD25G_LANE_LANE_2C(sd_index)) 1090 + }, 1091 + { 1092 + SD25G_LANE_LANE_28_LN_CFG_RX_SUBRATE_2_0_SET(params->cfg_rx_subrate_2_0), 1093 + SD25G_LANE_LANE_28_LN_CFG_RX_SUBRATE_2_0, 1094 + sdx5_addr(regs, SD25G_LANE_LANE_28(sd_index)) 1095 + }, 1096 + { 1097 + SD25G_LANE_LANE_18_LN_CFG_CDRCK_EN_SET(params->cfg_cdrck_en), 1098 + SD25G_LANE_LANE_18_LN_CFG_CDRCK_EN, 1099 + sdx5_addr(regs, SD25G_LANE_LANE_18(sd_index)) 1100 + }, 1101 + { 1102 + SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1_SET(params->cfg_dfetap_en_5_1), 1103 + SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1, 1104 + sdx5_addr(regs, SD25G_LANE_LANE_0F(sd_index)) 1105 + }, 1106 + { 1107 + SD25G_LANE_LANE_18_LN_CFG_ERRAMP_PD_SET(params->cfg_erramp_pd), 1108 + SD25G_LANE_LANE_18_LN_CFG_ERRAMP_PD, 1109 + sdx5_addr(regs, SD25G_LANE_LANE_18(sd_index)) 1110 + }, 1111 + { 1112 + SD25G_LANE_LANE_1D_LN_CFG_PI_DFE_EN_SET(params->cfg_pi_dfe_en), 1113 + SD25G_LANE_LANE_1D_LN_CFG_PI_DFE_EN, 1114 + sdx5_addr(regs, SD25G_LANE_LANE_1D(sd_index)) 1115 + }, 1116 + { 1117 + SD25G_LANE_LANE_19_LN_CFG_ECDR_PD_SET(params->cfg_ecdr_pd), 1118 + SD25G_LANE_LANE_19_LN_CFG_ECDR_PD, 1119 + sdx5_addr(regs, SD25G_LANE_LANE_19(sd_index)) 1120 + }, 1121 + { 1122 + SD25G_LANE_LANE_01_LN_CFG_ITX_IPDRIVER_BASE_2_0_SET 1123 + (params->cfg_itx_ipdriver_base_2_0), 1124 + SD25G_LANE_LANE_01_LN_CFG_ITX_IPDRIVER_BASE_2_0, 1125 + sdx5_addr(regs, SD25G_LANE_LANE_01(sd_index)) 1126 + }, 1127 + { 1128 + SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0_SET(params->cfg_tap_dly_4_0), 1129 + SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0, 1130 + sdx5_addr(regs, SD25G_LANE_LANE_03(sd_index)) 1131 + }, 1132 + { 1133 + SD25G_LANE_LANE_06_LN_CFG_TAP_ADV_3_0_SET(params->cfg_tap_adv_3_0), 1134 + SD25G_LANE_LANE_06_LN_CFG_TAP_ADV_3_0, 1135 + sdx5_addr(regs, SD25G_LANE_LANE_06(sd_index)) 1136 + }, 1137 + { 1138 + SD25G_LANE_LANE_07_LN_CFG_EN_ADV_SET(params->cfg_en_adv) | 1139 + SD25G_LANE_LANE_07_LN_CFG_EN_DLY_SET(params->cfg_en_dly), 1140 + SD25G_LANE_LANE_07_LN_CFG_EN_ADV | 1141 + SD25G_LANE_LANE_07_LN_CFG_EN_DLY, 1142 + sdx5_addr(regs, SD25G_LANE_LANE_07(sd_index)) 1143 + }, 1144 + { 1145 + SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8_SET(params->cfg_tx_reserve_15_8), 1146 + SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8, 1147 + sdx5_addr(regs, SD25G_LANE_LANE_43(sd_index)) 1148 + }, 1149 + { 1150 + SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0_SET(params->cfg_tx_reserve_7_0), 1151 + SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0, 1152 + sdx5_addr(regs, SD25G_LANE_LANE_42(sd_index)) 1153 + }, 1154 + { 1155 + SD25G_LANE_LANE_05_LN_CFG_BW_1_0_SET(params->cfg_bw_1_0), 1156 + SD25G_LANE_LANE_05_LN_CFG_BW_1_0, 1157 + sdx5_addr(regs, SD25G_LANE_LANE_05(sd_index)) 1158 + }, 1159 + { 1160 + SD25G_LANE_LANE_0B_LN_CFG_TXCAL_MAN_EN_SET(params->cfg_txcal_man_en), 1161 + SD25G_LANE_LANE_0B_LN_CFG_TXCAL_MAN_EN, 1162 + sdx5_addr(regs, SD25G_LANE_LANE_0B(sd_index)) 1163 + }, 1164 + { 1165 + SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0_SET 1166 + (params->cfg_txcal_shift_code_5_0), 1167 + SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0, 1168 + sdx5_addr(regs, SD25G_LANE_LANE_0A(sd_index)) 1169 + }, 1170 + { 1171 + SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0_SET 1172 + (params->cfg_txcal_valid_sel_3_0), 1173 + SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0, 1174 + sdx5_addr(regs, SD25G_LANE_LANE_09(sd_index)) 1175 + }, 1176 + { 1177 + SD25G_LANE_LANE_1A_LN_CFG_CDR_KF_2_0_SET(params->cfg_cdr_kf_2_0), 1178 + SD25G_LANE_LANE_1A_LN_CFG_CDR_KF_2_0, 1179 + sdx5_addr(regs, SD25G_LANE_LANE_1A(sd_index)) 1180 + }, 1181 + { 1182 + SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0_SET(params->cfg_cdr_m_7_0), 1183 + SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0, 1184 + sdx5_addr(regs, SD25G_LANE_LANE_1B(sd_index)) 1185 + }, 1186 + { 1187 + SD25G_LANE_LANE_2B_LN_CFG_PI_BW_3_0_SET(params->cfg_pi_bw_3_0), 1188 + SD25G_LANE_LANE_2B_LN_CFG_PI_BW_3_0, 1189 + sdx5_addr(regs, SD25G_LANE_LANE_2B(sd_index)) 1190 + }, 1191 + { 1192 + SD25G_LANE_LANE_2C_LN_CFG_DIS_2NDORDER_SET(params->cfg_dis_2ndorder), 1193 + SD25G_LANE_LANE_2C_LN_CFG_DIS_2NDORDER, 1194 + sdx5_addr(regs, SD25G_LANE_LANE_2C(sd_index)) 1195 + }, 1196 + { 1197 + SD25G_LANE_LANE_2E_LN_CFG_CTLE_RSTN_SET(params->cfg_ctle_rstn), 1198 + SD25G_LANE_LANE_2E_LN_CFG_CTLE_RSTN, 1199 + sdx5_addr(regs, SD25G_LANE_LANE_2E(sd_index)) 1200 + }, 1201 + { 1202 + SD25G_LANE_LANE_00_LN_CFG_ITX_IPCML_BASE_1_0_SET 1203 + (params->cfg_itx_ipcml_base_1_0), 1204 + SD25G_LANE_LANE_00_LN_CFG_ITX_IPCML_BASE_1_0, 1205 + sdx5_addr(regs, SD25G_LANE_LANE_00(sd_index)) 1206 + }, 1207 + { 1208 + SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0_SET(params->cfg_rx_reserve_7_0), 1209 + SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0, 1210 + sdx5_addr(regs, SD25G_LANE_LANE_44(sd_index)) 1211 + }, 1212 + { 1213 + SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8_SET(params->cfg_rx_reserve_15_8), 1214 + SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8, 1215 + sdx5_addr(regs, SD25G_LANE_LANE_45(sd_index)) 1216 + }, 1217 + { 1218 + SD25G_LANE_LANE_0D_LN_CFG_DFECK_EN_SET(params->cfg_dfeck_en) | 1219 + SD25G_LANE_LANE_0D_LN_CFG_RXTERM_2_0_SET(params->cfg_rxterm_2_0), 1220 + SD25G_LANE_LANE_0D_LN_CFG_DFECK_EN | 1221 + SD25G_LANE_LANE_0D_LN_CFG_RXTERM_2_0, 1222 + sdx5_addr(regs, SD25G_LANE_LANE_0D(sd_index)) 1223 + }, 1224 + { 1225 + SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0_SET 1226 + (params->cfg_vga_ctrl_byp_4_0), 1227 + SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0, 1228 + sdx5_addr(regs, SD25G_LANE_LANE_21(sd_index)) 1229 + }, 1230 + { 1231 + SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0_SET(params->cfg_eqr_force_3_0), 1232 + SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0, 1233 + sdx5_addr(regs, SD25G_LANE_LANE_22(sd_index)) 1234 + }, 1235 + { 1236 + SD25G_LANE_LANE_1C_LN_CFG_EQC_FORCE_3_0_SET(params->cfg_eqc_force_3_0) | 1237 + SD25G_LANE_LANE_1C_LN_CFG_DFE_PD_SET(params->cfg_dfe_pd), 1238 + SD25G_LANE_LANE_1C_LN_CFG_EQC_FORCE_3_0 | 1239 + SD25G_LANE_LANE_1C_LN_CFG_DFE_PD, 1240 + sdx5_addr(regs, SD25G_LANE_LANE_1C(sd_index)) 1241 + }, 1242 + { 1243 + SD25G_LANE_LANE_1E_LN_CFG_SUM_SETCM_EN_SET(params->cfg_sum_setcm_en), 1244 + SD25G_LANE_LANE_1E_LN_CFG_SUM_SETCM_EN, 1245 + sdx5_addr(regs, SD25G_LANE_LANE_1E(sd_index)) 1246 + }, 1247 + { 1248 + SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0_SET 1249 + (params->cfg_init_pos_iscan_6_0), 1250 + SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0, 1251 + sdx5_addr(regs, SD25G_LANE_LANE_25(sd_index)) 1252 + }, 1253 + { 1254 + SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0_SET 1255 + (params->cfg_init_pos_ipi_6_0), 1256 + SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0, 1257 + sdx5_addr(regs, SD25G_LANE_LANE_26(sd_index)) 1258 + }, 1259 + { 1260 + SD25G_LANE_LANE_18_LN_CFG_ERRAMP_PD_SET(params->cfg_erramp_pd), 1261 + SD25G_LANE_LANE_18_LN_CFG_ERRAMP_PD, 1262 + sdx5_addr(regs, SD25G_LANE_LANE_18(sd_index)) 1263 + }, 1264 + { 1265 + SD25G_LANE_LANE_0E_LN_CFG_DFEDIG_M_2_0_SET(params->cfg_dfedig_m_2_0), 1266 + SD25G_LANE_LANE_0E_LN_CFG_DFEDIG_M_2_0, 1267 + sdx5_addr(regs, SD25G_LANE_LANE_0E(sd_index)) 1268 + }, 1269 + { 1270 + SD25G_LANE_LANE_0E_LN_CFG_EN_DFEDIG_SET(params->cfg_en_dfedig), 1271 + SD25G_LANE_LANE_0E_LN_CFG_EN_DFEDIG, 1272 + sdx5_addr(regs, SD25G_LANE_LANE_0E(sd_index)) 1273 + }, 1274 + { 1275 + SD25G_LANE_LANE_40_LN_R_TX_POL_INV_SET(params->r_tx_pol_inv) | 1276 + SD25G_LANE_LANE_40_LN_R_RX_POL_INV_SET(params->r_rx_pol_inv), 1277 + SD25G_LANE_LANE_40_LN_R_TX_POL_INV | 1278 + SD25G_LANE_LANE_40_LN_R_RX_POL_INV, 1279 + sdx5_addr(regs, SD25G_LANE_LANE_40(sd_index)) 1280 + }, 1281 + { 1282 + SD25G_LANE_LANE_04_LN_CFG_RX2TX_LP_EN_SET(params->cfg_rx2tx_lp_en) | 1283 + SD25G_LANE_LANE_04_LN_CFG_TX2RX_LP_EN_SET(params->cfg_tx2rx_lp_en), 1284 + SD25G_LANE_LANE_04_LN_CFG_RX2TX_LP_EN | 1285 + SD25G_LANE_LANE_04_LN_CFG_TX2RX_LP_EN, 1286 + sdx5_addr(regs, SD25G_LANE_LANE_04(sd_index)) 1287 + }, 1288 + { 1289 + SD25G_LANE_LANE_1E_LN_CFG_RXLB_EN_SET(params->cfg_rxlb_en), 1290 + SD25G_LANE_LANE_1E_LN_CFG_RXLB_EN, 1291 + sdx5_addr(regs, SD25G_LANE_LANE_1E(sd_index)) 1292 + }, 1293 + { 1294 + SD25G_LANE_LANE_19_LN_CFG_TXLB_EN_SET(params->cfg_txlb_en), 1295 + SD25G_LANE_LANE_19_LN_CFG_TXLB_EN, 1296 + sdx5_addr(regs, SD25G_LANE_LANE_19(sd_index)) 1297 + }, 1298 + { 1299 + SD25G_LANE_LANE_2E_LN_CFG_RSTN_DFEDIG_SET(0), 1300 + SD25G_LANE_LANE_2E_LN_CFG_RSTN_DFEDIG, 1301 + sdx5_addr(regs, SD25G_LANE_LANE_2E(sd_index)) 1302 + }, 1303 + { 1304 + SD25G_LANE_LANE_2E_LN_CFG_RSTN_DFEDIG_SET(1), 1305 + SD25G_LANE_LANE_2E_LN_CFG_RSTN_DFEDIG, 1306 + sdx5_addr(regs, SD25G_LANE_LANE_2E(sd_index)) 1307 + }, 1308 + { 1309 + SD_LANE_25G_SD_LANE_CFG_MACRO_RST_SET(0), 1310 + SD_LANE_25G_SD_LANE_CFG_MACRO_RST, 1311 + sdx5_addr(regs, SD_LANE_25G_SD_LANE_CFG(sd_index)) 1312 + }, 1313 + { 1314 + SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN_SET(0), 1315 + SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN, 1316 + sdx5_addr(regs, SD25G_LANE_LANE_1C(sd_index)) 1317 + }, 1318 + }; 1319 + struct sparx5_serdes_regval item2[] = { 1320 + { 1321 + SD25G_LANE_CMU_2A_R_DBG_LOL_STATUS_SET(0x1), 1322 + SD25G_LANE_CMU_2A_R_DBG_LOL_STATUS, 1323 + sdx5_addr(regs, SD25G_LANE_CMU_2A(sd_index)) 1324 + }, 1325 + { 1326 + SD_LANE_25G_SD_SER_RST_SER_RST_SET(0x0), 1327 + SD_LANE_25G_SD_SER_RST_SER_RST, 1328 + sdx5_addr(regs, SD_LANE_25G_SD_SER_RST(sd_index)) 1329 + }, 1330 + { 1331 + SD_LANE_25G_SD_DES_RST_DES_RST_SET(0x0), 1332 + SD_LANE_25G_SD_DES_RST_DES_RST, 1333 + sdx5_addr(regs, SD_LANE_25G_SD_DES_RST(sd_index)) 1334 + }, 1335 + { 1336 + SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX_SET(0), 1337 + SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX, 1338 + sdx5_addr(regs, SD25G_LANE_CMU_FF(sd_index)) 1339 + }, 1340 + { 1341 + SD25G_LANE_LANE_2D_LN_CFG_ALOS_THR_2_0_SET(params->cfg_alos_thr_2_0), 1342 + SD25G_LANE_LANE_2D_LN_CFG_ALOS_THR_2_0, 1343 + sdx5_addr(regs, SD25G_LANE_LANE_2D(sd_index)) 1344 + }, 1345 + { 1346 + SD25G_LANE_LANE_2E_LN_CFG_DIS_SQ_SET(0), 1347 + SD25G_LANE_LANE_2E_LN_CFG_DIS_SQ, 1348 + sdx5_addr(regs, SD25G_LANE_LANE_2E(sd_index)) 1349 + }, 1350 + { 1351 + SD25G_LANE_LANE_2E_LN_CFG_PD_SQ_SET(0), 1352 + SD25G_LANE_LANE_2E_LN_CFG_PD_SQ, 1353 + sdx5_addr(regs, SD25G_LANE_LANE_2E(sd_index)) 1354 + }, 1355 + 1356 + }; 1357 + u32 value; 1358 + int idx; 1359 + 1360 + for (idx = 0; idx < ARRAY_SIZE(item); ++idx) 1361 + sdx5_rmw_addr(item[idx].value, item[idx].mask, item[idx].addr); 1362 + usleep_range(1000, 2000); 1363 + 1364 + sdx5_rmw_addr(SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN_SET(1), 1365 + SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN, 1366 + sdx5_addr(regs, SD25G_LANE_LANE_1C(sd_index))); 1367 + 1368 + usleep_range(10000, 20000); 1369 + 1370 + sdx5_rmw_addr(SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX_SET(0xff), 1371 + SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX, 1372 + sdx5_addr(regs, SD25G_LANE_CMU_FF(sd_index))); 1373 + 1374 + value = readl(sdx5_addr(regs, SD25G_LANE_CMU_C0(sd_index))); 1375 + value = SD25G_LANE_CMU_C0_PLL_LOL_UDL_GET(value); 1376 + 1377 + if (value) { 1378 + dev_err(dev, "25G PLL Loss of Lock: 0x%x\n", value); 1379 + return -EINVAL; 1380 + } 1381 + 1382 + value = readl(sdx5_addr(regs, SD_LANE_25G_SD_LANE_STAT(sd_index))); 1383 + value = SD_LANE_25G_SD_LANE_STAT_PMA_RST_DONE_GET(value); 1384 + 1385 + if (value != 0x1) { 1386 + dev_err(dev, "25G PMA Reset failed: 0x%x\n", value); 1387 + return -EINVAL; 1388 + } 1389 + for (idx = 0; idx < ARRAY_SIZE(item2); ++idx) 1390 + sdx5_rmw_addr(item2[idx].value, item2[idx].mask, item2[idx].addr); 1391 + return 0; 1392 + } 1393 + 1394 + static void sparx5_sd10g28_reset(void __iomem *regs[], 1395 + struct sparx5_sd10g28_params *params, 1396 + u32 lane_index, 1397 + u32 sd_index) 1398 + { 1399 + /* Note: SerDes SD10G_LANE_1 is configured in 10G_LAN mode */ 1400 + sdx5_rmw_addr(SD_LANE_SD_LANE_CFG_EXT_CFG_RST_SET(1), 1401 + SD_LANE_SD_LANE_CFG_EXT_CFG_RST, 1402 + sdx5_addr(regs, SD_LANE_SD_LANE_CFG(lane_index))); 1403 + 1404 + usleep_range(1000, 2000); 1405 + } 1406 + 1407 + static int sparx5_sd10g28_apply_params(struct device *dev, 1408 + void __iomem *regs[], 1409 + struct sparx5_sd10g28_params *params, 1410 + void __iomem *sd_inst, 1411 + u32 lane_index, 1412 + u32 sd_index) 1413 + { 1414 + struct sparx5_serdes_regval item[] = { 1415 + { 1416 + SD_LANE_SD_LANE_CFG_EXT_CFG_RST_SET(0), 1417 + SD_LANE_SD_LANE_CFG_EXT_CFG_RST, 1418 + sdx5_addr(regs, SD_LANE_SD_LANE_CFG(lane_index)) 1419 + }, 1420 + { 1421 + SD_LANE_SD_LANE_CFG_MACRO_RST_SET(1), 1422 + SD_LANE_SD_LANE_CFG_MACRO_RST, 1423 + sdx5_addr(regs, SD_LANE_SD_LANE_CFG(lane_index)) 1424 + }, 1425 + { 1426 + SD10G_LANE_LANE_93_R_DWIDTHCTRL_FROM_HWT_SET(0x0) | 1427 + SD10G_LANE_LANE_93_R_REG_MANUAL_SET(0x1) | 1428 + SD10G_LANE_LANE_93_R_AUXCKSEL_FROM_HWT_SET(0x1) | 1429 + SD10G_LANE_LANE_93_R_LANE_ID_FROM_HWT_SET(0x1) | 1430 + SD10G_LANE_LANE_93_R_EN_RATECHG_CTRL_SET(0x0), 1431 + SD10G_LANE_LANE_93_R_DWIDTHCTRL_FROM_HWT | 1432 + SD10G_LANE_LANE_93_R_REG_MANUAL | 1433 + SD10G_LANE_LANE_93_R_AUXCKSEL_FROM_HWT | 1434 + SD10G_LANE_LANE_93_R_LANE_ID_FROM_HWT | 1435 + SD10G_LANE_LANE_93_R_EN_RATECHG_CTRL, 1436 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_93(sd_index)) 1437 + }, 1438 + { 1439 + SD10G_LANE_LANE_94_R_ISCAN_REG_SET(0x1) | 1440 + SD10G_LANE_LANE_94_R_TXEQ_REG_SET(0x1) | 1441 + SD10G_LANE_LANE_94_R_MISC_REG_SET(0x1) | 1442 + SD10G_LANE_LANE_94_R_SWING_REG_SET(0x1), 1443 + SD10G_LANE_LANE_94_R_ISCAN_REG | 1444 + SD10G_LANE_LANE_94_R_TXEQ_REG | 1445 + SD10G_LANE_LANE_94_R_MISC_REG | 1446 + SD10G_LANE_LANE_94_R_SWING_REG, 1447 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_94(sd_index)) 1448 + }, 1449 + { 1450 + SD10G_LANE_LANE_9E_R_RXEQ_REG_SET(0x1), 1451 + SD10G_LANE_LANE_9E_R_RXEQ_REG, 1452 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_9E(sd_index)) 1453 + }, 1454 + { 1455 + SD10G_LANE_LANE_A1_R_SSC_FROM_HWT_SET(0x0) | 1456 + SD10G_LANE_LANE_A1_R_CDR_FROM_HWT_SET(0x0) | 1457 + SD10G_LANE_LANE_A1_R_PCLK_GATING_FROM_HWT_SET(0x1), 1458 + SD10G_LANE_LANE_A1_R_SSC_FROM_HWT | 1459 + SD10G_LANE_LANE_A1_R_CDR_FROM_HWT | 1460 + SD10G_LANE_LANE_A1_R_PCLK_GATING_FROM_HWT, 1461 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_A1(sd_index)) 1462 + }, 1463 + { 1464 + SD_LANE_SD_LANE_CFG_RX_REF_SEL_SET(params->cmu_sel) | 1465 + SD_LANE_SD_LANE_CFG_TX_REF_SEL_SET(params->cmu_sel), 1466 + SD_LANE_SD_LANE_CFG_RX_REF_SEL | 1467 + SD_LANE_SD_LANE_CFG_TX_REF_SEL, 1468 + sdx5_addr(regs, SD_LANE_SD_LANE_CFG(lane_index)) 1469 + }, 1470 + { 1471 + SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0_SET(params->cfg_lane_reserve_7_0), 1472 + SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0, 1473 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_40(sd_index)) 1474 + }, 1475 + { 1476 + SD10G_LANE_LANE_50_CFG_SSC_RTL_CLK_SEL_SET(params->cfg_ssc_rtl_clk_sel), 1477 + SD10G_LANE_LANE_50_CFG_SSC_RTL_CLK_SEL, 1478 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_50(sd_index)) 1479 + }, 1480 + { 1481 + SD10G_LANE_LANE_35_CFG_TXRATE_1_0_SET(params->cfg_txrate_1_0) | 1482 + SD10G_LANE_LANE_35_CFG_RXRATE_1_0_SET(params->cfg_rxrate_1_0), 1483 + SD10G_LANE_LANE_35_CFG_TXRATE_1_0 | 1484 + SD10G_LANE_LANE_35_CFG_RXRATE_1_0, 1485 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_35(sd_index)) 1486 + }, 1487 + { 1488 + SD10G_LANE_LANE_94_R_DWIDTHCTRL_2_0_SET(params->r_d_width_ctrl_2_0), 1489 + SD10G_LANE_LANE_94_R_DWIDTHCTRL_2_0, 1490 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_94(sd_index)) 1491 + }, 1492 + { 1493 + SD10G_LANE_LANE_01_CFG_PMA_TX_CK_BITWIDTH_2_0_SET 1494 + (params->cfg_pma_tx_ck_bitwidth_2_0), 1495 + SD10G_LANE_LANE_01_CFG_PMA_TX_CK_BITWIDTH_2_0, 1496 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_01(sd_index)) 1497 + }, 1498 + { 1499 + SD10G_LANE_LANE_30_CFG_RXDIV_SEL_2_0_SET(params->cfg_rxdiv_sel_2_0), 1500 + SD10G_LANE_LANE_30_CFG_RXDIV_SEL_2_0, 1501 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_30(sd_index)) 1502 + }, 1503 + { 1504 + SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0_SET 1505 + (params->r_pcs2pma_phymode_4_0), 1506 + SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0, 1507 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_A2(sd_index)) 1508 + }, 1509 + { 1510 + SD10G_LANE_LANE_13_CFG_CDRCK_EN_SET(params->cfg_cdrck_en), 1511 + SD10G_LANE_LANE_13_CFG_CDRCK_EN, 1512 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_13(sd_index)) 1513 + }, 1514 + { 1515 + SD10G_LANE_LANE_23_CFG_DFECK_EN_SET(params->cfg_dfeck_en) | 1516 + SD10G_LANE_LANE_23_CFG_DFE_PD_SET(params->cfg_dfe_pd) | 1517 + SD10G_LANE_LANE_23_CFG_ERRAMP_PD_SET(params->cfg_erramp_pd), 1518 + SD10G_LANE_LANE_23_CFG_DFECK_EN | 1519 + SD10G_LANE_LANE_23_CFG_DFE_PD | 1520 + SD10G_LANE_LANE_23_CFG_ERRAMP_PD, 1521 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_23(sd_index)) 1522 + }, 1523 + { 1524 + SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1_SET(params->cfg_dfetap_en_5_1), 1525 + SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1, 1526 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_22(sd_index)) 1527 + }, 1528 + { 1529 + SD10G_LANE_LANE_1A_CFG_PI_DFE_EN_SET(params->cfg_pi_DFE_en), 1530 + SD10G_LANE_LANE_1A_CFG_PI_DFE_EN, 1531 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_1A(sd_index)) 1532 + }, 1533 + { 1534 + SD10G_LANE_LANE_02_CFG_EN_ADV_SET(params->cfg_en_adv) | 1535 + SD10G_LANE_LANE_02_CFG_EN_MAIN_SET(params->cfg_en_main) | 1536 + SD10G_LANE_LANE_02_CFG_EN_DLY_SET(params->cfg_en_dly) | 1537 + SD10G_LANE_LANE_02_CFG_TAP_ADV_3_0_SET(params->cfg_tap_adv_3_0), 1538 + SD10G_LANE_LANE_02_CFG_EN_ADV | 1539 + SD10G_LANE_LANE_02_CFG_EN_MAIN | 1540 + SD10G_LANE_LANE_02_CFG_EN_DLY | 1541 + SD10G_LANE_LANE_02_CFG_TAP_ADV_3_0, 1542 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_02(sd_index)) 1543 + }, 1544 + { 1545 + SD10G_LANE_LANE_03_CFG_TAP_MAIN_SET(params->cfg_tap_main), 1546 + SD10G_LANE_LANE_03_CFG_TAP_MAIN, 1547 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_03(sd_index)) 1548 + }, 1549 + { 1550 + SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0_SET(params->cfg_tap_dly_4_0), 1551 + SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0, 1552 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_04(sd_index)) 1553 + }, 1554 + { 1555 + SD10G_LANE_LANE_2F_CFG_VGA_CTRL_3_0_SET(params->cfg_vga_ctrl_3_0), 1556 + SD10G_LANE_LANE_2F_CFG_VGA_CTRL_3_0, 1557 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_2F(sd_index)) 1558 + }, 1559 + { 1560 + SD10G_LANE_LANE_2F_CFG_VGA_CP_2_0_SET(params->cfg_vga_cp_2_0), 1561 + SD10G_LANE_LANE_2F_CFG_VGA_CP_2_0, 1562 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_2F(sd_index)) 1563 + }, 1564 + { 1565 + SD10G_LANE_LANE_0B_CFG_EQ_RES_3_0_SET(params->cfg_eq_res_3_0), 1566 + SD10G_LANE_LANE_0B_CFG_EQ_RES_3_0, 1567 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_0B(sd_index)) 1568 + }, 1569 + { 1570 + SD10G_LANE_LANE_0D_CFG_EQR_BYP_SET(params->cfg_eq_r_byp), 1571 + SD10G_LANE_LANE_0D_CFG_EQR_BYP, 1572 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_0D(sd_index)) 1573 + }, 1574 + { 1575 + SD10G_LANE_LANE_0E_CFG_EQC_FORCE_3_0_SET(params->cfg_eq_c_force_3_0) | 1576 + SD10G_LANE_LANE_0E_CFG_SUM_SETCM_EN_SET(params->cfg_sum_setcm_en), 1577 + SD10G_LANE_LANE_0E_CFG_EQC_FORCE_3_0 | 1578 + SD10G_LANE_LANE_0E_CFG_SUM_SETCM_EN, 1579 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_0E(sd_index)) 1580 + }, 1581 + { 1582 + SD10G_LANE_LANE_23_CFG_EN_DFEDIG_SET(params->cfg_en_dfedig), 1583 + SD10G_LANE_LANE_23_CFG_EN_DFEDIG, 1584 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_23(sd_index)) 1585 + }, 1586 + { 1587 + SD10G_LANE_LANE_06_CFG_EN_PREEMPH_SET(params->cfg_en_preemph), 1588 + SD10G_LANE_LANE_06_CFG_EN_PREEMPH, 1589 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_06(sd_index)) 1590 + }, 1591 + { 1592 + SD10G_LANE_LANE_33_CFG_ITX_IPPREEMP_BASE_1_0_SET 1593 + (params->cfg_itx_ippreemp_base_1_0) | 1594 + SD10G_LANE_LANE_33_CFG_ITX_IPDRIVER_BASE_2_0_SET 1595 + (params->cfg_itx_ipdriver_base_2_0), 1596 + SD10G_LANE_LANE_33_CFG_ITX_IPPREEMP_BASE_1_0 | 1597 + SD10G_LANE_LANE_33_CFG_ITX_IPDRIVER_BASE_2_0, 1598 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_33(sd_index)) 1599 + }, 1600 + { 1601 + SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0_SET 1602 + (params->cfg_ibias_tune_reserve_5_0), 1603 + SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0, 1604 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_52(sd_index)) 1605 + }, 1606 + { 1607 + SD10G_LANE_LANE_37_CFG_TXSWING_HALF_SET(params->cfg_txswing_half), 1608 + SD10G_LANE_LANE_37_CFG_TXSWING_HALF, 1609 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_37(sd_index)) 1610 + }, 1611 + { 1612 + SD10G_LANE_LANE_3C_CFG_DIS_2NDORDER_SET(params->cfg_dis_2nd_order), 1613 + SD10G_LANE_LANE_3C_CFG_DIS_2NDORDER, 1614 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_3C(sd_index)) 1615 + }, 1616 + { 1617 + SD10G_LANE_LANE_39_CFG_RX_SSC_LH_SET(params->cfg_rx_ssc_lh), 1618 + SD10G_LANE_LANE_39_CFG_RX_SSC_LH, 1619 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_39(sd_index)) 1620 + }, 1621 + { 1622 + SD10G_LANE_LANE_1A_CFG_PI_FLOOP_STEPS_1_0_SET 1623 + (params->cfg_pi_floop_steps_1_0), 1624 + SD10G_LANE_LANE_1A_CFG_PI_FLOOP_STEPS_1_0, 1625 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_1A(sd_index)) 1626 + }, 1627 + { 1628 + SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16_SET(params->cfg_pi_ext_dac_23_16), 1629 + SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16, 1630 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_16(sd_index)) 1631 + }, 1632 + { 1633 + SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8_SET(params->cfg_pi_ext_dac_15_8), 1634 + SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8, 1635 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_15(sd_index)) 1636 + }, 1637 + { 1638 + SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0_SET 1639 + (params->cfg_iscan_ext_dac_7_0), 1640 + SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0, 1641 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_26(sd_index)) 1642 + }, 1643 + { 1644 + SD10G_LANE_LANE_42_CFG_CDR_KF_GEN1_2_0_SET(params->cfg_cdr_kf_gen1_2_0), 1645 + SD10G_LANE_LANE_42_CFG_CDR_KF_GEN1_2_0, 1646 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_42(sd_index)) 1647 + }, 1648 + { 1649 + SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0_SET(params->r_cdr_m_gen1_7_0), 1650 + SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0, 1651 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_0F(sd_index)) 1652 + }, 1653 + { 1654 + SD10G_LANE_LANE_24_CFG_PI_BW_GEN1_3_0_SET(params->cfg_pi_bw_gen1_3_0), 1655 + SD10G_LANE_LANE_24_CFG_PI_BW_GEN1_3_0, 1656 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_24(sd_index)) 1657 + }, 1658 + { 1659 + SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0_SET(params->cfg_pi_ext_dac_7_0), 1660 + SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0, 1661 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_14(sd_index)) 1662 + }, 1663 + { 1664 + SD10G_LANE_LANE_1A_CFG_PI_STEPS_SET(params->cfg_pi_steps), 1665 + SD10G_LANE_LANE_1A_CFG_PI_STEPS, 1666 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_1A(sd_index)) 1667 + }, 1668 + { 1669 + SD10G_LANE_LANE_3A_CFG_MP_MAX_3_0_SET(params->cfg_mp_max_3_0), 1670 + SD10G_LANE_LANE_3A_CFG_MP_MAX_3_0, 1671 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_3A(sd_index)) 1672 + }, 1673 + { 1674 + SD10G_LANE_LANE_31_CFG_RSTN_DFEDIG_SET(params->cfg_rstn_dfedig), 1675 + SD10G_LANE_LANE_31_CFG_RSTN_DFEDIG, 1676 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_31(sd_index)) 1677 + }, 1678 + { 1679 + SD10G_LANE_LANE_48_CFG_ALOS_THR_3_0_SET(params->cfg_alos_thr_3_0), 1680 + SD10G_LANE_LANE_48_CFG_ALOS_THR_3_0, 1681 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_48(sd_index)) 1682 + }, 1683 + { 1684 + SD10G_LANE_LANE_36_CFG_PREDRV_SLEWRATE_1_0_SET 1685 + (params->cfg_predrv_slewrate_1_0), 1686 + SD10G_LANE_LANE_36_CFG_PREDRV_SLEWRATE_1_0, 1687 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_36(sd_index)) 1688 + }, 1689 + { 1690 + SD10G_LANE_LANE_32_CFG_ITX_IPCML_BASE_1_0_SET 1691 + (params->cfg_itx_ipcml_base_1_0), 1692 + SD10G_LANE_LANE_32_CFG_ITX_IPCML_BASE_1_0, 1693 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_32(sd_index)) 1694 + }, 1695 + { 1696 + SD10G_LANE_LANE_37_CFG_IP_PRE_BASE_1_0_SET(params->cfg_ip_pre_base_1_0), 1697 + SD10G_LANE_LANE_37_CFG_IP_PRE_BASE_1_0, 1698 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_37(sd_index)) 1699 + }, 1700 + { 1701 + SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8_SET 1702 + (params->cfg_lane_reserve_15_8), 1703 + SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8, 1704 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_41(sd_index)) 1705 + }, 1706 + { 1707 + SD10G_LANE_LANE_9E_R_EN_AUTO_CDR_RSTN_SET(params->r_en_auto_cdr_rstn), 1708 + SD10G_LANE_LANE_9E_R_EN_AUTO_CDR_RSTN, 1709 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_9E(sd_index)) 1710 + }, 1711 + { 1712 + SD10G_LANE_LANE_0C_CFG_OSCAL_AFE_SET(params->cfg_oscal_afe) | 1713 + SD10G_LANE_LANE_0C_CFG_PD_OSDAC_AFE_SET(params->cfg_pd_osdac_afe), 1714 + SD10G_LANE_LANE_0C_CFG_OSCAL_AFE | 1715 + SD10G_LANE_LANE_0C_CFG_PD_OSDAC_AFE, 1716 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_0C(sd_index)) 1717 + }, 1718 + { 1719 + SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_AFE_SET 1720 + (params->cfg_resetb_oscal_afe[0]), 1721 + SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_AFE, 1722 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_0B(sd_index)) 1723 + }, 1724 + { 1725 + SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_AFE_SET 1726 + (params->cfg_resetb_oscal_afe[1]), 1727 + SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_AFE, 1728 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_0B(sd_index)) 1729 + }, 1730 + { 1731 + SD10G_LANE_LANE_83_R_TX_POL_INV_SET(params->r_tx_pol_inv) | 1732 + SD10G_LANE_LANE_83_R_RX_POL_INV_SET(params->r_rx_pol_inv), 1733 + SD10G_LANE_LANE_83_R_TX_POL_INV | 1734 + SD10G_LANE_LANE_83_R_RX_POL_INV, 1735 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_83(sd_index)) 1736 + }, 1737 + { 1738 + SD10G_LANE_LANE_06_CFG_RX2TX_LP_EN_SET(params->cfg_rx2tx_lp_en) | 1739 + SD10G_LANE_LANE_06_CFG_TX2RX_LP_EN_SET(params->cfg_tx2rx_lp_en), 1740 + SD10G_LANE_LANE_06_CFG_RX2TX_LP_EN | 1741 + SD10G_LANE_LANE_06_CFG_TX2RX_LP_EN, 1742 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_06(sd_index)) 1743 + }, 1744 + { 1745 + SD10G_LANE_LANE_0E_CFG_RXLB_EN_SET(params->cfg_rxlb_en) | 1746 + SD10G_LANE_LANE_0E_CFG_TXLB_EN_SET(params->cfg_txlb_en), 1747 + SD10G_LANE_LANE_0E_CFG_RXLB_EN | 1748 + SD10G_LANE_LANE_0E_CFG_TXLB_EN, 1749 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_0E(sd_index)) 1750 + }, 1751 + { 1752 + SD_LANE_SD_LANE_CFG_MACRO_RST_SET(0), 1753 + SD_LANE_SD_LANE_CFG_MACRO_RST, 1754 + sdx5_addr(regs, SD_LANE_SD_LANE_CFG(lane_index)) 1755 + }, 1756 + { 1757 + SD10G_LANE_LANE_50_CFG_SSC_RESETB_SET(1), 1758 + SD10G_LANE_LANE_50_CFG_SSC_RESETB, 1759 + sdx5_inst_addr(sd_inst, SD10G_LANE_LANE_50(sd_index)) 1760 + }, 1761 + { 1762 + SD10G_LANE_LANE_50_CFG_SSC_RESETB_SET(1), 1763 + SD10G_LANE_LANE_50_CFG_SSC_RESETB, 1764 + sdx5_addr(regs, SD10G_LANE_LANE_50(sd_index)) 1765 + }, 1766 + { 1767 + SD_LANE_MISC_SD_125_RST_DIS_SET(params->fx_100), 1768 + SD_LANE_MISC_SD_125_RST_DIS, 1769 + sdx5_addr(regs, SD_LANE_MISC(lane_index)) 1770 + }, 1771 + { 1772 + SD_LANE_MISC_RX_ENA_SET(params->fx_100), 1773 + SD_LANE_MISC_RX_ENA, 1774 + sdx5_addr(regs, SD_LANE_MISC(lane_index)) 1775 + }, 1776 + { 1777 + SD_LANE_MISC_MUX_ENA_SET(params->fx_100), 1778 + SD_LANE_MISC_MUX_ENA, 1779 + sdx5_addr(regs, SD_LANE_MISC(lane_index)) 1780 + }, 1781 + }; 1782 + u32 value; 1783 + int idx; 1784 + 1785 + for (idx = 0; idx < ARRAY_SIZE(item); ++idx) 1786 + sdx5_rmw_addr(item[idx].value, item[idx].mask, item[idx].addr); 1787 + usleep_range(3000, 6000); 1788 + 1789 + value = readl(sdx5_addr(regs, SD_LANE_SD_LANE_STAT(lane_index))); 1790 + value = SD_LANE_SD_LANE_STAT_PMA_RST_DONE_GET(value); 1791 + if (value != 1) { 1792 + dev_err(dev, "10G PMA Reset failed: 0x%x\n", value); 1793 + return -EINVAL; 1794 + } 1795 + 1796 + sdx5_rmw_addr(SD_LANE_SD_SER_RST_SER_RST_SET(0x0), 1797 + SD_LANE_SD_SER_RST_SER_RST, 1798 + sdx5_addr(regs, SD_LANE_SD_SER_RST(lane_index))); 1799 + 1800 + sdx5_rmw_addr(SD_LANE_SD_DES_RST_DES_RST_SET(0x0), 1801 + SD_LANE_SD_DES_RST_DES_RST, 1802 + sdx5_addr(regs, SD_LANE_SD_DES_RST(lane_index))); 1803 + 1804 + return 0; 1805 + } 1806 + 1807 + static int sparx5_sd25g28_config(struct sparx5_serdes_macro *macro, bool reset) 1808 + { 1809 + struct sparx5_sd25g28_mode_preset mode; 1810 + struct sparx5_sd25g28_media_preset media = media_presets_25g[macro->media]; 1811 + struct sparx5_sd25g28_args args = { 1812 + .rxinvert = 1, 1813 + .txinvert = 0, 1814 + .txswing = 240, 1815 + .com_pll_reserve = 0xf, 1816 + .reg_rst = reset, 1817 + }; 1818 + struct sparx5_sd25g28_params params; 1819 + int err; 1820 + 1821 + err = sparx5_sd10g25_get_mode_preset(macro, &mode); 1822 + if (err) 1823 + return err; 1824 + sparx5_sd25g28_get_params(macro, &media, &mode, &args, &params); 1825 + sparx5_sd25g28_reset(macro->priv->regs, &params, macro->stpidx); 1826 + return sparx5_sd25g28_apply_params(macro->priv->dev, 1827 + macro->priv->regs, 1828 + &params, 1829 + macro->stpidx); 1830 + } 1831 + 1832 + static int sparx5_sd10g28_config(struct sparx5_serdes_macro *macro, bool reset) 1833 + { 1834 + struct sparx5_sd10g28_mode_preset mode; 1835 + struct sparx5_sd10g28_media_preset media = media_presets_10g[macro->media]; 1836 + struct sparx5_sd10g28_args args = { 1837 + .is_6g = (macro->serdestype == SPX5_SDT_6G), 1838 + .txinvert = 0, 1839 + .rxinvert = 1, 1840 + .txswing = 240, 1841 + .reg_rst = reset, 1842 + }; 1843 + struct sparx5_sd10g28_params params; 1844 + u32 sd_index = macro->stpidx; 1845 + void __iomem *sd_inst; 1846 + int err; 1847 + 1848 + err = sparx5_sd10g28_get_mode_preset(macro, &mode, &args); 1849 + if (err) 1850 + return err; 1851 + sparx5_sd10g28_get_params(macro, &media, &mode, &args, &params); 1852 + sparx5_sd10g28_reset(macro->priv->regs, 1853 + &params, 1854 + macro->sidx, 1855 + macro->stpidx); 1856 + if (macro->serdestype == SPX5_SDT_6G) 1857 + sd_inst = macro->priv->regs[TARGET_SD6G_LANE + sd_index]; 1858 + else 1859 + sd_inst = macro->priv->regs[TARGET_SD10G_LANE + sd_index]; 1860 + return sparx5_sd10g28_apply_params(macro->priv->dev, 1861 + macro->priv->regs, 1862 + &params, 1863 + sd_inst, 1864 + macro->sidx, 1865 + sd_index); 1866 + } 1867 + 1868 + /* Power down serdes TX driver */ 1869 + static int sparx5_serdes_power_save(struct sparx5_serdes_macro *macro, u32 pwdn) 1870 + { 1871 + void __iomem *sd_inst; 1872 + struct sparx5_serdes_private *priv = macro->priv; 1873 + 1874 + if (macro->serdestype == SPX5_SDT_6G) 1875 + sd_inst = sdx5_inst_get(priv, TARGET_SD6G_LANE, macro->stpidx); 1876 + else if (macro->serdestype == SPX5_SDT_10G) 1877 + sd_inst = sdx5_inst_get(priv, TARGET_SD10G_LANE, macro->stpidx); 1878 + else 1879 + sd_inst = sdx5_inst_get(priv, TARGET_SD25G_LANE, macro->stpidx); 1880 + 1881 + if (macro->serdestype == SPX5_SDT_25G) { 1882 + sdx5_inst_rmw(SD25G_LANE_LANE_04_LN_CFG_PD_DRIVER_SET(pwdn), 1883 + SD25G_LANE_LANE_04_LN_CFG_PD_DRIVER, 1884 + sd_inst, 1885 + SD25G_LANE_LANE_04(0)); 1886 + } else { 1887 + /* 6G and 10G */ 1888 + sdx5_inst_rmw(SD10G_LANE_LANE_06_CFG_PD_DRIVER_SET(pwdn), 1889 + SD10G_LANE_LANE_06_CFG_PD_DRIVER, 1890 + sd_inst, 1891 + SD10G_LANE_LANE_06(0)); 1892 + } 1893 + return 0; 1894 + } 1895 + 1896 + static int sparx5_serdes_clock_config(struct sparx5_serdes_macro *macro) 1897 + { 1898 + struct sparx5_serdes_private *priv = macro->priv; 1899 + 1900 + if (macro->serdesmode == SPX5_SD_MODE_100FX) { 1901 + u32 freq = priv->coreclock == 250000000 ? 2 : 1902 + priv->coreclock == 500000000 ? 1 : 0; 1903 + 1904 + sdx5_rmw(SD_LANE_MISC_CORE_CLK_FREQ_SET(freq), 1905 + SD_LANE_MISC_CORE_CLK_FREQ, 1906 + priv, 1907 + SD_LANE_MISC(macro->sidx)); 1908 + } 1909 + return 0; 1910 + } 1911 + 1912 + static int sparx5_cmu_apply_cfg(struct device *dev, 1913 + void __iomem *regs[], 1914 + u32 cmu_idx, 1915 + void __iomem *cmu_tgt, 1916 + void __iomem *cmu_cfg_tgt, 1917 + u32 spd10g) 1918 + { 1919 + struct sparx5_serdes_regval item[] = { 1920 + { 1921 + SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST_SET(1), 1922 + SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST, 1923 + sdx5_inst_addr(cmu_cfg_tgt, SD_CMU_CFG_SD_CMU_CFG(cmu_idx)) 1924 + }, 1925 + { 1926 + SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST_SET(0), 1927 + SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST, 1928 + sdx5_inst_addr(cmu_cfg_tgt, SD_CMU_CFG_SD_CMU_CFG(cmu_idx)) 1929 + }, 1930 + { 1931 + SD_CMU_CFG_SD_CMU_CFG_CMU_RST_SET(1), 1932 + SD_CMU_CFG_SD_CMU_CFG_CMU_RST, 1933 + sdx5_inst_addr(cmu_cfg_tgt, SD_CMU_CFG_SD_CMU_CFG(cmu_idx)) 1934 + }, 1935 + { 1936 + SD_CMU_CMU_45_R_DWIDTHCTRL_FROM_HWT_SET(0x1) | 1937 + SD_CMU_CMU_45_R_REFCK_SSC_EN_FROM_HWT_SET(0x1) | 1938 + SD_CMU_CMU_45_R_LINK_BUF_EN_FROM_HWT_SET(0x1) | 1939 + SD_CMU_CMU_45_R_BIAS_EN_FROM_HWT_SET(0x1) | 1940 + SD_CMU_CMU_45_R_EN_RATECHG_CTRL_SET(0x0), 1941 + SD_CMU_CMU_45_R_DWIDTHCTRL_FROM_HWT | 1942 + SD_CMU_CMU_45_R_REFCK_SSC_EN_FROM_HWT | 1943 + SD_CMU_CMU_45_R_LINK_BUF_EN_FROM_HWT | 1944 + SD_CMU_CMU_45_R_BIAS_EN_FROM_HWT | 1945 + SD_CMU_CMU_45_R_EN_RATECHG_CTRL, 1946 + sdx5_inst_addr(cmu_tgt, SD_CMU_CMU_45(cmu_idx)) 1947 + }, 1948 + { 1949 + SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0_SET(0), 1950 + SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0, 1951 + sdx5_inst_addr(cmu_tgt, SD_CMU_CMU_47(cmu_idx)) 1952 + }, 1953 + { 1954 + SD_CMU_CMU_1B_CFG_RESERVE_7_0_SET(0), 1955 + SD_CMU_CMU_1B_CFG_RESERVE_7_0, 1956 + sdx5_inst_addr(cmu_tgt, SD_CMU_CMU_1B(cmu_idx)) 1957 + }, 1958 + { 1959 + SD_CMU_CMU_0D_CFG_JC_BYP_SET(0x1), 1960 + SD_CMU_CMU_0D_CFG_JC_BYP, 1961 + sdx5_inst_addr(cmu_tgt, SD_CMU_CMU_0D(cmu_idx)) 1962 + }, 1963 + { 1964 + SD_CMU_CMU_1F_CFG_VTUNE_SEL_SET(1), 1965 + SD_CMU_CMU_1F_CFG_VTUNE_SEL, 1966 + sdx5_inst_addr(cmu_tgt, SD_CMU_CMU_1F(cmu_idx)) 1967 + }, 1968 + { 1969 + SD_CMU_CMU_00_CFG_PLL_TP_SEL_1_0_SET(3), 1970 + SD_CMU_CMU_00_CFG_PLL_TP_SEL_1_0, 1971 + sdx5_inst_addr(cmu_tgt, SD_CMU_CMU_00(cmu_idx)) 1972 + }, 1973 + { 1974 + SD_CMU_CMU_05_CFG_BIAS_TP_SEL_1_0_SET(3), 1975 + SD_CMU_CMU_05_CFG_BIAS_TP_SEL_1_0, 1976 + sdx5_inst_addr(cmu_tgt, SD_CMU_CMU_05(cmu_idx)) 1977 + }, 1978 + { 1979 + SD_CMU_CMU_30_R_PLL_DLOL_EN_SET(1), 1980 + SD_CMU_CMU_30_R_PLL_DLOL_EN, 1981 + sdx5_inst_addr(cmu_tgt, SD_CMU_CMU_30(cmu_idx)) 1982 + }, 1983 + { 1984 + SD_CMU_CMU_09_CFG_SW_10G_SET(spd10g), 1985 + SD_CMU_CMU_09_CFG_SW_10G, 1986 + sdx5_inst_addr(cmu_tgt, SD_CMU_CMU_09(cmu_idx)) 1987 + }, 1988 + { 1989 + SD_CMU_CFG_SD_CMU_CFG_CMU_RST_SET(0), 1990 + SD_CMU_CFG_SD_CMU_CFG_CMU_RST, 1991 + sdx5_inst_addr(cmu_cfg_tgt, SD_CMU_CFG_SD_CMU_CFG(cmu_idx)) 1992 + }, 1993 + }; 1994 + int value; 1995 + int idx; 1996 + 1997 + for (idx = 0; idx < ARRAY_SIZE(item); ++idx) 1998 + sdx5_rmw_addr(item[idx].value, item[idx].mask, item[idx].addr); 1999 + msleep(20); 2000 + 2001 + sdx5_inst_rmw(SD_CMU_CMU_44_R_PLL_RSTN_SET(0), 2002 + SD_CMU_CMU_44_R_PLL_RSTN, 2003 + cmu_tgt, 2004 + SD_CMU_CMU_44(cmu_idx)); 2005 + 2006 + sdx5_inst_rmw(SD_CMU_CMU_44_R_PLL_RSTN_SET(1), 2007 + SD_CMU_CMU_44_R_PLL_RSTN, 2008 + cmu_tgt, 2009 + SD_CMU_CMU_44(cmu_idx)); 2010 + 2011 + msleep(20); 2012 + 2013 + value = readl(sdx5_addr(regs, SD_CMU_CMU_E0(cmu_idx))); 2014 + value = SD_CMU_CMU_E0_PLL_LOL_UDL_GET(value); 2015 + 2016 + if (value) { 2017 + dev_err(dev, "CMU PLL Loss of Lock: 0x%x\n", value); 2018 + return -EINVAL; 2019 + } 2020 + sdx5_inst_rmw(SD_CMU_CMU_0D_CFG_PMA_TX_CK_PD_SET(0), 2021 + SD_CMU_CMU_0D_CFG_PMA_TX_CK_PD, 2022 + cmu_tgt, 2023 + SD_CMU_CMU_0D(cmu_idx)); 2024 + return 0; 2025 + } 2026 + 2027 + static int sparx5_cmu_cfg(struct sparx5_serdes_private *priv, u32 cmu_idx) 2028 + { 2029 + void __iomem *cmu_tgt, *cmu_cfg_tgt; 2030 + u32 spd10g = 1; 2031 + 2032 + if (cmu_idx == 1 || cmu_idx == 4 || cmu_idx == 7 || 2033 + cmu_idx == 10 || cmu_idx == 13) { 2034 + spd10g = 0; 2035 + } 2036 + 2037 + cmu_tgt = sdx5_inst_get(priv, TARGET_SD_CMU, cmu_idx); 2038 + cmu_cfg_tgt = sdx5_inst_get(priv, TARGET_SD_CMU_CFG, cmu_idx); 2039 + 2040 + return sparx5_cmu_apply_cfg(priv->dev, priv->regs, cmu_idx, cmu_tgt, 2041 + cmu_cfg_tgt, spd10g); 2042 + } 2043 + 2044 + static int sparx5_serdes_cmu_enable(struct sparx5_serdes_private *priv) 2045 + { 2046 + int idx, err = 0; 2047 + 2048 + if (!priv->cmu_enabled) { 2049 + for (idx = 0; idx < SPX5_CMU_MAX; idx++) { 2050 + err = sparx5_cmu_cfg(priv, idx); 2051 + if (err) { 2052 + dev_err(priv->dev, "CMU %u, error: %d\n", idx, err); 2053 + goto leave; 2054 + } 2055 + } 2056 + priv->cmu_enabled = true; 2057 + } 2058 + leave: 2059 + return err; 2060 + } 2061 + 2062 + static int sparx5_serdes_get_serdesmode(phy_interface_t portmode, int speed) 2063 + { 2064 + switch (portmode) { 2065 + case PHY_INTERFACE_MODE_1000BASEX: 2066 + case PHY_INTERFACE_MODE_2500BASEX: 2067 + if (speed == SPEED_2500) 2068 + return SPX5_SD_MODE_2G5; 2069 + if (speed == SPEED_100) 2070 + return SPX5_SD_MODE_100FX; 2071 + return SPX5_SD_MODE_1000BASEX; 2072 + case PHY_INTERFACE_MODE_SGMII: 2073 + /* The same Serdes mode is used for both SGMII and 1000BaseX */ 2074 + return SPX5_SD_MODE_1000BASEX; 2075 + case PHY_INTERFACE_MODE_QSGMII: 2076 + return SPX5_SD_MODE_QSGMII; 2077 + case PHY_INTERFACE_MODE_10GBASER: 2078 + return SPX5_SD_MODE_SFI; 2079 + default: 2080 + return -EINVAL; 2081 + } 2082 + } 2083 + 2084 + static int sparx5_serdes_config(struct sparx5_serdes_macro *macro) 2085 + { 2086 + struct device *dev = macro->priv->dev; 2087 + int serdesmode; 2088 + int err; 2089 + 2090 + err = sparx5_serdes_cmu_enable(macro->priv); 2091 + if (err) 2092 + return err; 2093 + 2094 + serdesmode = sparx5_serdes_get_serdesmode(macro->portmode, macro->speed); 2095 + if (serdesmode < 0) { 2096 + dev_err(dev, "SerDes %u, interface not supported: %s\n", 2097 + macro->sidx, 2098 + phy_modes(macro->portmode)); 2099 + return serdesmode; 2100 + } 2101 + macro->serdesmode = serdesmode; 2102 + 2103 + sparx5_serdes_clock_config(macro); 2104 + 2105 + if (macro->serdestype == SPX5_SDT_25G) 2106 + err = sparx5_sd25g28_config(macro, false); 2107 + else 2108 + err = sparx5_sd10g28_config(macro, false); 2109 + if (err) { 2110 + dev_err(dev, "SerDes %u, config error: %d\n", 2111 + macro->sidx, err); 2112 + } 2113 + return err; 2114 + } 2115 + 2116 + static int sparx5_serdes_power_on(struct phy *phy) 2117 + { 2118 + struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); 2119 + 2120 + return sparx5_serdes_power_save(macro, false); 2121 + } 2122 + 2123 + static int sparx5_serdes_power_off(struct phy *phy) 2124 + { 2125 + struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); 2126 + 2127 + return sparx5_serdes_power_save(macro, true); 2128 + } 2129 + 2130 + static int sparx5_serdes_set_mode(struct phy *phy, enum phy_mode mode, int submode) 2131 + { 2132 + struct sparx5_serdes_macro *macro; 2133 + 2134 + if (mode != PHY_MODE_ETHERNET) 2135 + return -EINVAL; 2136 + 2137 + switch (submode) { 2138 + case PHY_INTERFACE_MODE_1000BASEX: 2139 + case PHY_INTERFACE_MODE_2500BASEX: 2140 + case PHY_INTERFACE_MODE_SGMII: 2141 + case PHY_INTERFACE_MODE_QSGMII: 2142 + case PHY_INTERFACE_MODE_10GBASER: 2143 + macro = phy_get_drvdata(phy); 2144 + macro->portmode = submode; 2145 + sparx5_serdes_config(macro); 2146 + return 0; 2147 + default: 2148 + return -EINVAL; 2149 + } 2150 + } 2151 + 2152 + static int sparx5_serdes_set_media(struct phy *phy, enum phy_media media) 2153 + { 2154 + struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); 2155 + 2156 + if (media != macro->media) { 2157 + macro->media = media; 2158 + if (macro->serdesmode != SPX5_SD_MODE_NONE) 2159 + sparx5_serdes_config(macro); 2160 + } 2161 + return 0; 2162 + } 2163 + 2164 + static int sparx5_serdes_set_speed(struct phy *phy, int speed) 2165 + { 2166 + struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); 2167 + 2168 + if (macro->sidx < SPX5_SERDES_10G_START && speed > SPEED_5000) 2169 + return -EINVAL; 2170 + if (macro->sidx < SPX5_SERDES_25G_START && speed > SPEED_10000) 2171 + return -EINVAL; 2172 + if (speed != macro->speed) { 2173 + macro->speed = speed; 2174 + if (macro->serdesmode != SPX5_SD_MODE_NONE) 2175 + sparx5_serdes_config(macro); 2176 + } 2177 + return 0; 2178 + } 2179 + 2180 + static int sparx5_serdes_reset(struct phy *phy) 2181 + { 2182 + struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); 2183 + int err; 2184 + 2185 + err = sparx5_serdes_cmu_enable(macro->priv); 2186 + if (err) 2187 + return err; 2188 + if (macro->serdestype == SPX5_SDT_25G) 2189 + err = sparx5_sd25g28_config(macro, true); 2190 + else 2191 + err = sparx5_sd10g28_config(macro, true); 2192 + if (err) { 2193 + dev_err(&phy->dev, "SerDes %u, reset error: %d\n", 2194 + macro->sidx, err); 2195 + } 2196 + return err; 2197 + } 2198 + 2199 + static int sparx5_serdes_validate(struct phy *phy, enum phy_mode mode, 2200 + int submode, 2201 + union phy_configure_opts *opts) 2202 + { 2203 + struct sparx5_serdes_macro *macro = phy_get_drvdata(phy); 2204 + 2205 + if (mode != PHY_MODE_ETHERNET) 2206 + return -EINVAL; 2207 + 2208 + if (macro->speed == 0) 2209 + return -EINVAL; 2210 + 2211 + if (macro->sidx < SPX5_SERDES_10G_START && macro->speed > SPEED_5000) 2212 + return -EINVAL; 2213 + if (macro->sidx < SPX5_SERDES_25G_START && macro->speed > SPEED_10000) 2214 + return -EINVAL; 2215 + 2216 + switch (submode) { 2217 + case PHY_INTERFACE_MODE_1000BASEX: 2218 + if (macro->speed != SPEED_100 && /* This is for 100BASE-FX */ 2219 + macro->speed != SPEED_1000) 2220 + return -EINVAL; 2221 + break; 2222 + case PHY_INTERFACE_MODE_SGMII: 2223 + case PHY_INTERFACE_MODE_2500BASEX: 2224 + case PHY_INTERFACE_MODE_QSGMII: 2225 + if (macro->speed >= SPEED_5000) 2226 + return -EINVAL; 2227 + break; 2228 + case PHY_INTERFACE_MODE_10GBASER: 2229 + if (macro->speed < SPEED_5000) 2230 + return -EINVAL; 2231 + break; 2232 + default: 2233 + return -EINVAL; 2234 + } 2235 + return 0; 2236 + } 2237 + 2238 + static const struct phy_ops sparx5_serdes_ops = { 2239 + .power_on = sparx5_serdes_power_on, 2240 + .power_off = sparx5_serdes_power_off, 2241 + .set_mode = sparx5_serdes_set_mode, 2242 + .set_media = sparx5_serdes_set_media, 2243 + .set_speed = sparx5_serdes_set_speed, 2244 + .reset = sparx5_serdes_reset, 2245 + .validate = sparx5_serdes_validate, 2246 + .owner = THIS_MODULE, 2247 + }; 2248 + 2249 + static int sparx5_phy_create(struct sparx5_serdes_private *priv, 2250 + int idx, struct phy **phy) 2251 + { 2252 + struct sparx5_serdes_macro *macro; 2253 + 2254 + *phy = devm_phy_create(priv->dev, NULL, &sparx5_serdes_ops); 2255 + if (IS_ERR(*phy)) 2256 + return PTR_ERR(*phy); 2257 + 2258 + macro = devm_kzalloc(priv->dev, sizeof(*macro), GFP_KERNEL); 2259 + if (!macro) 2260 + return -ENOMEM; 2261 + 2262 + macro->sidx = idx; 2263 + macro->priv = priv; 2264 + macro->speed = SPEED_UNKNOWN; 2265 + if (idx < SPX5_SERDES_10G_START) { 2266 + macro->serdestype = SPX5_SDT_6G; 2267 + macro->stpidx = macro->sidx; 2268 + } else if (idx < SPX5_SERDES_25G_START) { 2269 + macro->serdestype = SPX5_SDT_10G; 2270 + macro->stpidx = macro->sidx - SPX5_SERDES_10G_START; 2271 + } else { 2272 + macro->serdestype = SPX5_SDT_25G; 2273 + macro->stpidx = macro->sidx - SPX5_SERDES_25G_START; 2274 + } 2275 + 2276 + phy_set_drvdata(*phy, macro); 2277 + 2278 + return 0; 2279 + } 2280 + 2281 + static struct sparx5_serdes_io_resource sparx5_serdes_iomap[] = { 2282 + { TARGET_SD_CMU, 0x0 }, /* 0x610808000: sd_cmu_0 */ 2283 + { TARGET_SD_CMU + 1, 0x8000 }, /* 0x610810000: sd_cmu_1 */ 2284 + { TARGET_SD_CMU + 2, 0x10000 }, /* 0x610818000: sd_cmu_2 */ 2285 + { TARGET_SD_CMU + 3, 0x18000 }, /* 0x610820000: sd_cmu_3 */ 2286 + { TARGET_SD_CMU + 4, 0x20000 }, /* 0x610828000: sd_cmu_4 */ 2287 + { TARGET_SD_CMU + 5, 0x28000 }, /* 0x610830000: sd_cmu_5 */ 2288 + { TARGET_SD_CMU + 6, 0x30000 }, /* 0x610838000: sd_cmu_6 */ 2289 + { TARGET_SD_CMU + 7, 0x38000 }, /* 0x610840000: sd_cmu_7 */ 2290 + { TARGET_SD_CMU + 8, 0x40000 }, /* 0x610848000: sd_cmu_8 */ 2291 + { TARGET_SD_CMU_CFG, 0x48000 }, /* 0x610850000: sd_cmu_cfg_0 */ 2292 + { TARGET_SD_CMU_CFG + 1, 0x50000 }, /* 0x610858000: sd_cmu_cfg_1 */ 2293 + { TARGET_SD_CMU_CFG + 2, 0x58000 }, /* 0x610860000: sd_cmu_cfg_2 */ 2294 + { TARGET_SD_CMU_CFG + 3, 0x60000 }, /* 0x610868000: sd_cmu_cfg_3 */ 2295 + { TARGET_SD_CMU_CFG + 4, 0x68000 }, /* 0x610870000: sd_cmu_cfg_4 */ 2296 + { TARGET_SD_CMU_CFG + 5, 0x70000 }, /* 0x610878000: sd_cmu_cfg_5 */ 2297 + { TARGET_SD_CMU_CFG + 6, 0x78000 }, /* 0x610880000: sd_cmu_cfg_6 */ 2298 + { TARGET_SD_CMU_CFG + 7, 0x80000 }, /* 0x610888000: sd_cmu_cfg_7 */ 2299 + { TARGET_SD_CMU_CFG + 8, 0x88000 }, /* 0x610890000: sd_cmu_cfg_8 */ 2300 + { TARGET_SD6G_LANE, 0x90000 }, /* 0x610898000: sd6g_lane_0 */ 2301 + { TARGET_SD6G_LANE + 1, 0x98000 }, /* 0x6108a0000: sd6g_lane_1 */ 2302 + { TARGET_SD6G_LANE + 2, 0xa0000 }, /* 0x6108a8000: sd6g_lane_2 */ 2303 + { TARGET_SD6G_LANE + 3, 0xa8000 }, /* 0x6108b0000: sd6g_lane_3 */ 2304 + { TARGET_SD6G_LANE + 4, 0xb0000 }, /* 0x6108b8000: sd6g_lane_4 */ 2305 + { TARGET_SD6G_LANE + 5, 0xb8000 }, /* 0x6108c0000: sd6g_lane_5 */ 2306 + { TARGET_SD6G_LANE + 6, 0xc0000 }, /* 0x6108c8000: sd6g_lane_6 */ 2307 + { TARGET_SD6G_LANE + 7, 0xc8000 }, /* 0x6108d0000: sd6g_lane_7 */ 2308 + { TARGET_SD6G_LANE + 8, 0xd0000 }, /* 0x6108d8000: sd6g_lane_8 */ 2309 + { TARGET_SD6G_LANE + 9, 0xd8000 }, /* 0x6108e0000: sd6g_lane_9 */ 2310 + { TARGET_SD6G_LANE + 10, 0xe0000 }, /* 0x6108e8000: sd6g_lane_10 */ 2311 + { TARGET_SD6G_LANE + 11, 0xe8000 }, /* 0x6108f0000: sd6g_lane_11 */ 2312 + { TARGET_SD6G_LANE + 12, 0xf0000 }, /* 0x6108f8000: sd6g_lane_12 */ 2313 + { TARGET_SD10G_LANE, 0xf8000 }, /* 0x610900000: sd10g_lane_0 */ 2314 + { TARGET_SD10G_LANE + 1, 0x100000 }, /* 0x610908000: sd10g_lane_1 */ 2315 + { TARGET_SD10G_LANE + 2, 0x108000 }, /* 0x610910000: sd10g_lane_2 */ 2316 + { TARGET_SD10G_LANE + 3, 0x110000 }, /* 0x610918000: sd10g_lane_3 */ 2317 + { TARGET_SD_LANE, 0x1a0000 }, /* 0x6109a8000: sd_lane_0 */ 2318 + { TARGET_SD_LANE + 1, 0x1a8000 }, /* 0x6109b0000: sd_lane_1 */ 2319 + { TARGET_SD_LANE + 2, 0x1b0000 }, /* 0x6109b8000: sd_lane_2 */ 2320 + { TARGET_SD_LANE + 3, 0x1b8000 }, /* 0x6109c0000: sd_lane_3 */ 2321 + { TARGET_SD_LANE + 4, 0x1c0000 }, /* 0x6109c8000: sd_lane_4 */ 2322 + { TARGET_SD_LANE + 5, 0x1c8000 }, /* 0x6109d0000: sd_lane_5 */ 2323 + { TARGET_SD_LANE + 6, 0x1d0000 }, /* 0x6109d8000: sd_lane_6 */ 2324 + { TARGET_SD_LANE + 7, 0x1d8000 }, /* 0x6109e0000: sd_lane_7 */ 2325 + { TARGET_SD_LANE + 8, 0x1e0000 }, /* 0x6109e8000: sd_lane_8 */ 2326 + { TARGET_SD_LANE + 9, 0x1e8000 }, /* 0x6109f0000: sd_lane_9 */ 2327 + { TARGET_SD_LANE + 10, 0x1f0000 }, /* 0x6109f8000: sd_lane_10 */ 2328 + { TARGET_SD_LANE + 11, 0x1f8000 }, /* 0x610a00000: sd_lane_11 */ 2329 + { TARGET_SD_LANE + 12, 0x200000 }, /* 0x610a08000: sd_lane_12 */ 2330 + { TARGET_SD_LANE + 13, 0x208000 }, /* 0x610a10000: sd_lane_13 */ 2331 + { TARGET_SD_LANE + 14, 0x210000 }, /* 0x610a18000: sd_lane_14 */ 2332 + { TARGET_SD_LANE + 15, 0x218000 }, /* 0x610a20000: sd_lane_15 */ 2333 + { TARGET_SD_LANE + 16, 0x220000 }, /* 0x610a28000: sd_lane_16 */ 2334 + { TARGET_SD_CMU + 9, 0x400000 }, /* 0x610c08000: sd_cmu_9 */ 2335 + { TARGET_SD_CMU + 10, 0x408000 }, /* 0x610c10000: sd_cmu_10 */ 2336 + { TARGET_SD_CMU + 11, 0x410000 }, /* 0x610c18000: sd_cmu_11 */ 2337 + { TARGET_SD_CMU + 12, 0x418000 }, /* 0x610c20000: sd_cmu_12 */ 2338 + { TARGET_SD_CMU + 13, 0x420000 }, /* 0x610c28000: sd_cmu_13 */ 2339 + { TARGET_SD_CMU_CFG + 9, 0x428000 }, /* 0x610c30000: sd_cmu_cfg_9 */ 2340 + { TARGET_SD_CMU_CFG + 10, 0x430000 }, /* 0x610c38000: sd_cmu_cfg_10 */ 2341 + { TARGET_SD_CMU_CFG + 11, 0x438000 }, /* 0x610c40000: sd_cmu_cfg_11 */ 2342 + { TARGET_SD_CMU_CFG + 12, 0x440000 }, /* 0x610c48000: sd_cmu_cfg_12 */ 2343 + { TARGET_SD_CMU_CFG + 13, 0x448000 }, /* 0x610c50000: sd_cmu_cfg_13 */ 2344 + { TARGET_SD10G_LANE + 4, 0x450000 }, /* 0x610c58000: sd10g_lane_4 */ 2345 + { TARGET_SD10G_LANE + 5, 0x458000 }, /* 0x610c60000: sd10g_lane_5 */ 2346 + { TARGET_SD10G_LANE + 6, 0x460000 }, /* 0x610c68000: sd10g_lane_6 */ 2347 + { TARGET_SD10G_LANE + 7, 0x468000 }, /* 0x610c70000: sd10g_lane_7 */ 2348 + { TARGET_SD10G_LANE + 8, 0x470000 }, /* 0x610c78000: sd10g_lane_8 */ 2349 + { TARGET_SD10G_LANE + 9, 0x478000 }, /* 0x610c80000: sd10g_lane_9 */ 2350 + { TARGET_SD10G_LANE + 10, 0x480000 }, /* 0x610c88000: sd10g_lane_10 */ 2351 + { TARGET_SD10G_LANE + 11, 0x488000 }, /* 0x610c90000: sd10g_lane_11 */ 2352 + { TARGET_SD25G_LANE, 0x490000 }, /* 0x610c98000: sd25g_lane_0 */ 2353 + { TARGET_SD25G_LANE + 1, 0x498000 }, /* 0x610ca0000: sd25g_lane_1 */ 2354 + { TARGET_SD25G_LANE + 2, 0x4a0000 }, /* 0x610ca8000: sd25g_lane_2 */ 2355 + { TARGET_SD25G_LANE + 3, 0x4a8000 }, /* 0x610cb0000: sd25g_lane_3 */ 2356 + { TARGET_SD25G_LANE + 4, 0x4b0000 }, /* 0x610cb8000: sd25g_lane_4 */ 2357 + { TARGET_SD25G_LANE + 5, 0x4b8000 }, /* 0x610cc0000: sd25g_lane_5 */ 2358 + { TARGET_SD25G_LANE + 6, 0x4c0000 }, /* 0x610cc8000: sd25g_lane_6 */ 2359 + { TARGET_SD25G_LANE + 7, 0x4c8000 }, /* 0x610cd0000: sd25g_lane_7 */ 2360 + { TARGET_SD_LANE + 17, 0x550000 }, /* 0x610d58000: sd_lane_17 */ 2361 + { TARGET_SD_LANE + 18, 0x558000 }, /* 0x610d60000: sd_lane_18 */ 2362 + { TARGET_SD_LANE + 19, 0x560000 }, /* 0x610d68000: sd_lane_19 */ 2363 + { TARGET_SD_LANE + 20, 0x568000 }, /* 0x610d70000: sd_lane_20 */ 2364 + { TARGET_SD_LANE + 21, 0x570000 }, /* 0x610d78000: sd_lane_21 */ 2365 + { TARGET_SD_LANE + 22, 0x578000 }, /* 0x610d80000: sd_lane_22 */ 2366 + { TARGET_SD_LANE + 23, 0x580000 }, /* 0x610d88000: sd_lane_23 */ 2367 + { TARGET_SD_LANE + 24, 0x588000 }, /* 0x610d90000: sd_lane_24 */ 2368 + { TARGET_SD_LANE_25G, 0x590000 }, /* 0x610d98000: sd_lane_25g_25 */ 2369 + { TARGET_SD_LANE_25G + 1, 0x598000 }, /* 0x610da0000: sd_lane_25g_26 */ 2370 + { TARGET_SD_LANE_25G + 2, 0x5a0000 }, /* 0x610da8000: sd_lane_25g_27 */ 2371 + { TARGET_SD_LANE_25G + 3, 0x5a8000 }, /* 0x610db0000: sd_lane_25g_28 */ 2372 + { TARGET_SD_LANE_25G + 4, 0x5b0000 }, /* 0x610db8000: sd_lane_25g_29 */ 2373 + { TARGET_SD_LANE_25G + 5, 0x5b8000 }, /* 0x610dc0000: sd_lane_25g_30 */ 2374 + { TARGET_SD_LANE_25G + 6, 0x5c0000 }, /* 0x610dc8000: sd_lane_25g_31 */ 2375 + { TARGET_SD_LANE_25G + 7, 0x5c8000 }, /* 0x610dd0000: sd_lane_25g_32 */ 2376 + }; 2377 + 2378 + /* Client lookup function, uses serdes index */ 2379 + static struct phy *sparx5_serdes_xlate(struct device *dev, 2380 + struct of_phandle_args *args) 2381 + { 2382 + struct sparx5_serdes_private *priv = dev_get_drvdata(dev); 2383 + int idx; 2384 + unsigned int sidx; 2385 + 2386 + if (args->args_count != 1) 2387 + return ERR_PTR(-EINVAL); 2388 + 2389 + sidx = args->args[0]; 2390 + 2391 + /* Check validity: ERR_PTR(-ENODEV) if not valid */ 2392 + for (idx = 0; idx < SPX5_SERDES_MAX; idx++) { 2393 + struct sparx5_serdes_macro *macro = 2394 + phy_get_drvdata(priv->phys[idx]); 2395 + 2396 + if (sidx != macro->sidx) 2397 + continue; 2398 + 2399 + return priv->phys[idx]; 2400 + } 2401 + return ERR_PTR(-ENODEV); 2402 + } 2403 + 2404 + static int sparx5_serdes_probe(struct platform_device *pdev) 2405 + { 2406 + struct device_node *np = pdev->dev.of_node; 2407 + struct sparx5_serdes_private *priv; 2408 + struct phy_provider *provider; 2409 + struct resource *iores; 2410 + void __iomem *iomem; 2411 + unsigned long clock; 2412 + struct clk *clk; 2413 + int idx; 2414 + int err; 2415 + 2416 + if (!np && !pdev->dev.platform_data) 2417 + return -ENODEV; 2418 + 2419 + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); 2420 + if (!priv) 2421 + return -ENOMEM; 2422 + 2423 + platform_set_drvdata(pdev, priv); 2424 + priv->dev = &pdev->dev; 2425 + 2426 + /* Get coreclock */ 2427 + clk = devm_clk_get(priv->dev, NULL); 2428 + if (IS_ERR(clk)) { 2429 + dev_err(priv->dev, "Failed to get coreclock\n"); 2430 + return PTR_ERR(clk); 2431 + } 2432 + clock = clk_get_rate(clk); 2433 + if (clock == 0) { 2434 + dev_err(priv->dev, "Invalid coreclock %lu\n", clock); 2435 + return -EINVAL; 2436 + } 2437 + priv->coreclock = clock; 2438 + 2439 + iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); 2440 + iomem = devm_ioremap(priv->dev, iores->start, iores->end - iores->start + 1); 2441 + if (IS_ERR(iomem)) { 2442 + dev_err(priv->dev, "Unable to get serdes registers: %s\n", 2443 + iores->name); 2444 + return PTR_ERR(iomem); 2445 + } 2446 + for (idx = 0; idx < ARRAY_SIZE(sparx5_serdes_iomap); idx++) { 2447 + struct sparx5_serdes_io_resource *iomap = &sparx5_serdes_iomap[idx]; 2448 + 2449 + priv->regs[iomap->id] = iomem + iomap->offset; 2450 + } 2451 + for (idx = 0; idx < SPX5_SERDES_MAX; idx++) { 2452 + err = sparx5_phy_create(priv, idx, &priv->phys[idx]); 2453 + if (err) 2454 + return err; 2455 + } 2456 + 2457 + provider = devm_of_phy_provider_register(priv->dev, sparx5_serdes_xlate); 2458 + 2459 + return PTR_ERR_OR_ZERO(provider); 2460 + } 2461 + 2462 + static const struct of_device_id sparx5_serdes_match[] = { 2463 + { .compatible = "microchip,sparx5-serdes" }, 2464 + { } 2465 + }; 2466 + MODULE_DEVICE_TABLE(of, sparx5_serdes_match); 2467 + 2468 + static struct platform_driver sparx5_serdes_driver = { 2469 + .probe = sparx5_serdes_probe, 2470 + .driver = { 2471 + .name = "sparx5-serdes", 2472 + .of_match_table = sparx5_serdes_match, 2473 + }, 2474 + }; 2475 + 2476 + module_platform_driver(sparx5_serdes_driver); 2477 + 2478 + MODULE_DESCRIPTION("Microchip Sparx5 switch serdes driver"); 2479 + MODULE_AUTHOR("Steen Hegelund <steen.hegelund@microchip.com>"); 2480 + MODULE_LICENSE("GPL v2");
+136
drivers/phy/microchip/sparx5_serdes.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0+ 2 + * Microchip Sparx5 SerDes driver 3 + * 4 + * Copyright (c) 2020 Microchip Technology Inc. 5 + */ 6 + 7 + #ifndef _SPARX5_SERDES_H_ 8 + #define _SPARX5_SERDES_H_ 9 + 10 + #include "sparx5_serdes_regs.h" 11 + 12 + #define SPX5_SERDES_MAX 33 13 + 14 + enum sparx5_serdes_type { 15 + SPX5_SDT_6G = 6, 16 + SPX5_SDT_10G = 10, 17 + SPX5_SDT_25G = 25, 18 + }; 19 + 20 + enum sparx5_serdes_mode { 21 + SPX5_SD_MODE_NONE, 22 + SPX5_SD_MODE_2G5, 23 + SPX5_SD_MODE_QSGMII, 24 + SPX5_SD_MODE_100FX, 25 + SPX5_SD_MODE_1000BASEX, 26 + SPX5_SD_MODE_SFI, 27 + }; 28 + 29 + struct sparx5_serdes_private { 30 + struct device *dev; 31 + void __iomem *regs[NUM_TARGETS]; 32 + struct phy *phys[SPX5_SERDES_MAX]; 33 + bool cmu_enabled; 34 + unsigned long coreclock; 35 + }; 36 + 37 + struct sparx5_serdes_macro { 38 + struct sparx5_serdes_private *priv; 39 + u32 sidx; 40 + u32 stpidx; 41 + enum sparx5_serdes_type serdestype; 42 + enum sparx5_serdes_mode serdesmode; 43 + phy_interface_t portmode; 44 + int speed; 45 + enum phy_media media; 46 + }; 47 + 48 + /* Read, Write and modify registers content. 49 + * The register definition macros start at the id 50 + */ 51 + static inline void __iomem *sdx5_addr(void __iomem *base[], 52 + int id, int tinst, int tcnt, 53 + int gbase, int ginst, 54 + int gcnt, int gwidth, 55 + int raddr, int rinst, 56 + int rcnt, int rwidth) 57 + { 58 + WARN_ON((tinst) >= tcnt); 59 + WARN_ON((ginst) >= gcnt); 60 + WARN_ON((rinst) >= rcnt); 61 + return base[id + (tinst)] + 62 + gbase + ((ginst) * gwidth) + 63 + raddr + ((rinst) * rwidth); 64 + } 65 + 66 + static inline void __iomem *sdx5_inst_baseaddr(void __iomem *base, 67 + int gbase, int ginst, 68 + int gcnt, int gwidth, 69 + int raddr, int rinst, 70 + int rcnt, int rwidth) 71 + { 72 + WARN_ON((ginst) >= gcnt); 73 + WARN_ON((rinst) >= rcnt); 74 + return base + 75 + gbase + ((ginst) * gwidth) + 76 + raddr + ((rinst) * rwidth); 77 + } 78 + 79 + static inline void sdx5_rmw(u32 val, u32 mask, struct sparx5_serdes_private *priv, 80 + int id, int tinst, int tcnt, 81 + int gbase, int ginst, int gcnt, int gwidth, 82 + int raddr, int rinst, int rcnt, int rwidth) 83 + { 84 + u32 nval; 85 + void __iomem *addr = 86 + sdx5_addr(priv->regs, id, tinst, tcnt, 87 + gbase, ginst, gcnt, gwidth, 88 + raddr, rinst, rcnt, rwidth); 89 + nval = readl(addr); 90 + nval = (nval & ~mask) | (val & mask); 91 + writel(nval, addr); 92 + } 93 + 94 + static inline void sdx5_inst_rmw(u32 val, u32 mask, void __iomem *iomem, 95 + int id, int tinst, int tcnt, 96 + int gbase, int ginst, int gcnt, int gwidth, 97 + int raddr, int rinst, int rcnt, int rwidth) 98 + { 99 + u32 nval; 100 + void __iomem *addr = 101 + sdx5_inst_baseaddr(iomem, 102 + gbase, ginst, gcnt, gwidth, 103 + raddr, rinst, rcnt, rwidth); 104 + nval = readl(addr); 105 + nval = (nval & ~mask) | (val & mask); 106 + writel(nval, addr); 107 + } 108 + 109 + static inline void sdx5_rmw_addr(u32 val, u32 mask, void __iomem *addr) 110 + { 111 + u32 nval; 112 + 113 + nval = readl(addr); 114 + nval = (nval & ~mask) | (val & mask); 115 + writel(nval, addr); 116 + } 117 + 118 + static inline void __iomem *sdx5_inst_get(struct sparx5_serdes_private *priv, 119 + int id, int tinst) 120 + { 121 + return priv->regs[id + tinst]; 122 + } 123 + 124 + static inline void __iomem *sdx5_inst_addr(void __iomem *iomem, 125 + int id, int tinst, int tcnt, 126 + int gbase, 127 + int ginst, int gcnt, int gwidth, 128 + int raddr, 129 + int rinst, int rcnt, int rwidth) 130 + { 131 + return sdx5_inst_baseaddr(iomem, gbase, ginst, gcnt, gwidth, 132 + raddr, rinst, rcnt, rwidth); 133 + } 134 + 135 + 136 + #endif /* _SPARX5_SERDES_REGS_H_ */
+2695
drivers/phy/microchip/sparx5_serdes_regs.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0+ 2 + * Microchip Sparx5 SerDes driver 3 + * 4 + * Copyright (c) 2020 Microchip Technology Inc. 5 + */ 6 + 7 + /* This file is autogenerated by cml-utils 2020-11-16 13:11:27 +0100. 8 + * Commit ID: 13bdf073131d8bf40c54901df6988ae4e9c8f29f 9 + */ 10 + 11 + #ifndef _SPARX5_SERDES_REGS_H_ 12 + #define _SPARX5_SERDES_REGS_H_ 13 + 14 + #include <linux/bitfield.h> 15 + #include <linux/types.h> 16 + #include <linux/bug.h> 17 + 18 + enum sparx5_serdes_target { 19 + TARGET_SD10G_LANE = 200, 20 + TARGET_SD25G_LANE = 212, 21 + TARGET_SD6G_LANE = 233, 22 + TARGET_SD_CMU = 248, 23 + TARGET_SD_CMU_CFG = 262, 24 + TARGET_SD_LANE = 276, 25 + TARGET_SD_LANE_25G = 301, 26 + NUM_TARGETS = 332 27 + }; 28 + 29 + #define __REG(...) __VA_ARGS__ 30 + 31 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_01 */ 32 + #define SD10G_LANE_LANE_01(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 4, 0, 1, 4) 33 + 34 + #define SD10G_LANE_LANE_01_CFG_PMA_TX_CK_BITWIDTH_2_0 GENMASK(2, 0) 35 + #define SD10G_LANE_LANE_01_CFG_PMA_TX_CK_BITWIDTH_2_0_SET(x)\ 36 + FIELD_PREP(SD10G_LANE_LANE_01_CFG_PMA_TX_CK_BITWIDTH_2_0, x) 37 + #define SD10G_LANE_LANE_01_CFG_PMA_TX_CK_BITWIDTH_2_0_GET(x)\ 38 + FIELD_GET(SD10G_LANE_LANE_01_CFG_PMA_TX_CK_BITWIDTH_2_0, x) 39 + 40 + #define SD10G_LANE_LANE_01_CFG_RXDET_EN BIT(4) 41 + #define SD10G_LANE_LANE_01_CFG_RXDET_EN_SET(x)\ 42 + FIELD_PREP(SD10G_LANE_LANE_01_CFG_RXDET_EN, x) 43 + #define SD10G_LANE_LANE_01_CFG_RXDET_EN_GET(x)\ 44 + FIELD_GET(SD10G_LANE_LANE_01_CFG_RXDET_EN, x) 45 + 46 + #define SD10G_LANE_LANE_01_CFG_RXDET_STR BIT(5) 47 + #define SD10G_LANE_LANE_01_CFG_RXDET_STR_SET(x)\ 48 + FIELD_PREP(SD10G_LANE_LANE_01_CFG_RXDET_STR, x) 49 + #define SD10G_LANE_LANE_01_CFG_RXDET_STR_GET(x)\ 50 + FIELD_GET(SD10G_LANE_LANE_01_CFG_RXDET_STR, x) 51 + 52 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_02 */ 53 + #define SD10G_LANE_LANE_02(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 8, 0, 1, 4) 54 + 55 + #define SD10G_LANE_LANE_02_CFG_EN_ADV BIT(0) 56 + #define SD10G_LANE_LANE_02_CFG_EN_ADV_SET(x)\ 57 + FIELD_PREP(SD10G_LANE_LANE_02_CFG_EN_ADV, x) 58 + #define SD10G_LANE_LANE_02_CFG_EN_ADV_GET(x)\ 59 + FIELD_GET(SD10G_LANE_LANE_02_CFG_EN_ADV, x) 60 + 61 + #define SD10G_LANE_LANE_02_CFG_EN_MAIN BIT(1) 62 + #define SD10G_LANE_LANE_02_CFG_EN_MAIN_SET(x)\ 63 + FIELD_PREP(SD10G_LANE_LANE_02_CFG_EN_MAIN, x) 64 + #define SD10G_LANE_LANE_02_CFG_EN_MAIN_GET(x)\ 65 + FIELD_GET(SD10G_LANE_LANE_02_CFG_EN_MAIN, x) 66 + 67 + #define SD10G_LANE_LANE_02_CFG_EN_DLY BIT(2) 68 + #define SD10G_LANE_LANE_02_CFG_EN_DLY_SET(x)\ 69 + FIELD_PREP(SD10G_LANE_LANE_02_CFG_EN_DLY, x) 70 + #define SD10G_LANE_LANE_02_CFG_EN_DLY_GET(x)\ 71 + FIELD_GET(SD10G_LANE_LANE_02_CFG_EN_DLY, x) 72 + 73 + #define SD10G_LANE_LANE_02_CFG_EN_DLY2 BIT(3) 74 + #define SD10G_LANE_LANE_02_CFG_EN_DLY2_SET(x)\ 75 + FIELD_PREP(SD10G_LANE_LANE_02_CFG_EN_DLY2, x) 76 + #define SD10G_LANE_LANE_02_CFG_EN_DLY2_GET(x)\ 77 + FIELD_GET(SD10G_LANE_LANE_02_CFG_EN_DLY2, x) 78 + 79 + #define SD10G_LANE_LANE_02_CFG_TAP_ADV_3_0 GENMASK(7, 4) 80 + #define SD10G_LANE_LANE_02_CFG_TAP_ADV_3_0_SET(x)\ 81 + FIELD_PREP(SD10G_LANE_LANE_02_CFG_TAP_ADV_3_0, x) 82 + #define SD10G_LANE_LANE_02_CFG_TAP_ADV_3_0_GET(x)\ 83 + FIELD_GET(SD10G_LANE_LANE_02_CFG_TAP_ADV_3_0, x) 84 + 85 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_03 */ 86 + #define SD10G_LANE_LANE_03(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 12, 0, 1, 4) 87 + 88 + #define SD10G_LANE_LANE_03_CFG_TAP_MAIN BIT(0) 89 + #define SD10G_LANE_LANE_03_CFG_TAP_MAIN_SET(x)\ 90 + FIELD_PREP(SD10G_LANE_LANE_03_CFG_TAP_MAIN, x) 91 + #define SD10G_LANE_LANE_03_CFG_TAP_MAIN_GET(x)\ 92 + FIELD_GET(SD10G_LANE_LANE_03_CFG_TAP_MAIN, x) 93 + 94 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_04 */ 95 + #define SD10G_LANE_LANE_04(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 16, 0, 1, 4) 96 + 97 + #define SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0 GENMASK(4, 0) 98 + #define SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0_SET(x)\ 99 + FIELD_PREP(SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0, x) 100 + #define SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0_GET(x)\ 101 + FIELD_GET(SD10G_LANE_LANE_04_CFG_TAP_DLY_4_0, x) 102 + 103 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_06 */ 104 + #define SD10G_LANE_LANE_06(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 24, 0, 1, 4) 105 + 106 + #define SD10G_LANE_LANE_06_CFG_PD_DRIVER BIT(0) 107 + #define SD10G_LANE_LANE_06_CFG_PD_DRIVER_SET(x)\ 108 + FIELD_PREP(SD10G_LANE_LANE_06_CFG_PD_DRIVER, x) 109 + #define SD10G_LANE_LANE_06_CFG_PD_DRIVER_GET(x)\ 110 + FIELD_GET(SD10G_LANE_LANE_06_CFG_PD_DRIVER, x) 111 + 112 + #define SD10G_LANE_LANE_06_CFG_PD_CLK BIT(1) 113 + #define SD10G_LANE_LANE_06_CFG_PD_CLK_SET(x)\ 114 + FIELD_PREP(SD10G_LANE_LANE_06_CFG_PD_CLK, x) 115 + #define SD10G_LANE_LANE_06_CFG_PD_CLK_GET(x)\ 116 + FIELD_GET(SD10G_LANE_LANE_06_CFG_PD_CLK, x) 117 + 118 + #define SD10G_LANE_LANE_06_CFG_PD_CML BIT(2) 119 + #define SD10G_LANE_LANE_06_CFG_PD_CML_SET(x)\ 120 + FIELD_PREP(SD10G_LANE_LANE_06_CFG_PD_CML, x) 121 + #define SD10G_LANE_LANE_06_CFG_PD_CML_GET(x)\ 122 + FIELD_GET(SD10G_LANE_LANE_06_CFG_PD_CML, x) 123 + 124 + #define SD10G_LANE_LANE_06_CFG_TX2RX_LP_EN BIT(3) 125 + #define SD10G_LANE_LANE_06_CFG_TX2RX_LP_EN_SET(x)\ 126 + FIELD_PREP(SD10G_LANE_LANE_06_CFG_TX2RX_LP_EN, x) 127 + #define SD10G_LANE_LANE_06_CFG_TX2RX_LP_EN_GET(x)\ 128 + FIELD_GET(SD10G_LANE_LANE_06_CFG_TX2RX_LP_EN, x) 129 + 130 + #define SD10G_LANE_LANE_06_CFG_RX2TX_LP_EN BIT(4) 131 + #define SD10G_LANE_LANE_06_CFG_RX2TX_LP_EN_SET(x)\ 132 + FIELD_PREP(SD10G_LANE_LANE_06_CFG_RX2TX_LP_EN, x) 133 + #define SD10G_LANE_LANE_06_CFG_RX2TX_LP_EN_GET(x)\ 134 + FIELD_GET(SD10G_LANE_LANE_06_CFG_RX2TX_LP_EN, x) 135 + 136 + #define SD10G_LANE_LANE_06_CFG_EN_PREEMPH BIT(5) 137 + #define SD10G_LANE_LANE_06_CFG_EN_PREEMPH_SET(x)\ 138 + FIELD_PREP(SD10G_LANE_LANE_06_CFG_EN_PREEMPH, x) 139 + #define SD10G_LANE_LANE_06_CFG_EN_PREEMPH_GET(x)\ 140 + FIELD_GET(SD10G_LANE_LANE_06_CFG_EN_PREEMPH, x) 141 + 142 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0B */ 143 + #define SD10G_LANE_LANE_0B(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 44, 0, 1, 4) 144 + 145 + #define SD10G_LANE_LANE_0B_CFG_EQ_RES_3_0 GENMASK(3, 0) 146 + #define SD10G_LANE_LANE_0B_CFG_EQ_RES_3_0_SET(x)\ 147 + FIELD_PREP(SD10G_LANE_LANE_0B_CFG_EQ_RES_3_0, x) 148 + #define SD10G_LANE_LANE_0B_CFG_EQ_RES_3_0_GET(x)\ 149 + FIELD_GET(SD10G_LANE_LANE_0B_CFG_EQ_RES_3_0, x) 150 + 151 + #define SD10G_LANE_LANE_0B_CFG_PD_CTLE BIT(4) 152 + #define SD10G_LANE_LANE_0B_CFG_PD_CTLE_SET(x)\ 153 + FIELD_PREP(SD10G_LANE_LANE_0B_CFG_PD_CTLE, x) 154 + #define SD10G_LANE_LANE_0B_CFG_PD_CTLE_GET(x)\ 155 + FIELD_GET(SD10G_LANE_LANE_0B_CFG_PD_CTLE, x) 156 + 157 + #define SD10G_LANE_LANE_0B_CFG_CTLE_TP_EN BIT(5) 158 + #define SD10G_LANE_LANE_0B_CFG_CTLE_TP_EN_SET(x)\ 159 + FIELD_PREP(SD10G_LANE_LANE_0B_CFG_CTLE_TP_EN, x) 160 + #define SD10G_LANE_LANE_0B_CFG_CTLE_TP_EN_GET(x)\ 161 + FIELD_GET(SD10G_LANE_LANE_0B_CFG_CTLE_TP_EN, x) 162 + 163 + #define SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_AFE BIT(6) 164 + #define SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_AFE_SET(x)\ 165 + FIELD_PREP(SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_AFE, x) 166 + #define SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_AFE_GET(x)\ 167 + FIELD_GET(SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_AFE, x) 168 + 169 + #define SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_SQ BIT(7) 170 + #define SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_SQ_SET(x)\ 171 + FIELD_PREP(SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_SQ, x) 172 + #define SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_SQ_GET(x)\ 173 + FIELD_GET(SD10G_LANE_LANE_0B_CFG_RESETB_OSCAL_SQ, x) 174 + 175 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0C */ 176 + #define SD10G_LANE_LANE_0C(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 48, 0, 1, 4) 177 + 178 + #define SD10G_LANE_LANE_0C_CFG_OSCAL_AFE BIT(0) 179 + #define SD10G_LANE_LANE_0C_CFG_OSCAL_AFE_SET(x)\ 180 + FIELD_PREP(SD10G_LANE_LANE_0C_CFG_OSCAL_AFE, x) 181 + #define SD10G_LANE_LANE_0C_CFG_OSCAL_AFE_GET(x)\ 182 + FIELD_GET(SD10G_LANE_LANE_0C_CFG_OSCAL_AFE, x) 183 + 184 + #define SD10G_LANE_LANE_0C_CFG_OSCAL_SQ BIT(1) 185 + #define SD10G_LANE_LANE_0C_CFG_OSCAL_SQ_SET(x)\ 186 + FIELD_PREP(SD10G_LANE_LANE_0C_CFG_OSCAL_SQ, x) 187 + #define SD10G_LANE_LANE_0C_CFG_OSCAL_SQ_GET(x)\ 188 + FIELD_GET(SD10G_LANE_LANE_0C_CFG_OSCAL_SQ, x) 189 + 190 + #define SD10G_LANE_LANE_0C_CFG_OSDAC_2X_AFE BIT(2) 191 + #define SD10G_LANE_LANE_0C_CFG_OSDAC_2X_AFE_SET(x)\ 192 + FIELD_PREP(SD10G_LANE_LANE_0C_CFG_OSDAC_2X_AFE, x) 193 + #define SD10G_LANE_LANE_0C_CFG_OSDAC_2X_AFE_GET(x)\ 194 + FIELD_GET(SD10G_LANE_LANE_0C_CFG_OSDAC_2X_AFE, x) 195 + 196 + #define SD10G_LANE_LANE_0C_CFG_OSDAC_2X_SQ BIT(3) 197 + #define SD10G_LANE_LANE_0C_CFG_OSDAC_2X_SQ_SET(x)\ 198 + FIELD_PREP(SD10G_LANE_LANE_0C_CFG_OSDAC_2X_SQ, x) 199 + #define SD10G_LANE_LANE_0C_CFG_OSDAC_2X_SQ_GET(x)\ 200 + FIELD_GET(SD10G_LANE_LANE_0C_CFG_OSDAC_2X_SQ, x) 201 + 202 + #define SD10G_LANE_LANE_0C_CFG_PD_OSDAC_AFE BIT(4) 203 + #define SD10G_LANE_LANE_0C_CFG_PD_OSDAC_AFE_SET(x)\ 204 + FIELD_PREP(SD10G_LANE_LANE_0C_CFG_PD_OSDAC_AFE, x) 205 + #define SD10G_LANE_LANE_0C_CFG_PD_OSDAC_AFE_GET(x)\ 206 + FIELD_GET(SD10G_LANE_LANE_0C_CFG_PD_OSDAC_AFE, x) 207 + 208 + #define SD10G_LANE_LANE_0C_CFG_PD_OSDAC_SQ BIT(5) 209 + #define SD10G_LANE_LANE_0C_CFG_PD_OSDAC_SQ_SET(x)\ 210 + FIELD_PREP(SD10G_LANE_LANE_0C_CFG_PD_OSDAC_SQ, x) 211 + #define SD10G_LANE_LANE_0C_CFG_PD_OSDAC_SQ_GET(x)\ 212 + FIELD_GET(SD10G_LANE_LANE_0C_CFG_PD_OSDAC_SQ, x) 213 + 214 + #define SD10G_LANE_LANE_0C_CFG_PD_RX_LS BIT(6) 215 + #define SD10G_LANE_LANE_0C_CFG_PD_RX_LS_SET(x)\ 216 + FIELD_PREP(SD10G_LANE_LANE_0C_CFG_PD_RX_LS, x) 217 + #define SD10G_LANE_LANE_0C_CFG_PD_RX_LS_GET(x)\ 218 + FIELD_GET(SD10G_LANE_LANE_0C_CFG_PD_RX_LS, x) 219 + 220 + #define SD10G_LANE_LANE_0C_CFG_RX_PCIE_GEN12 BIT(7) 221 + #define SD10G_LANE_LANE_0C_CFG_RX_PCIE_GEN12_SET(x)\ 222 + FIELD_PREP(SD10G_LANE_LANE_0C_CFG_RX_PCIE_GEN12, x) 223 + #define SD10G_LANE_LANE_0C_CFG_RX_PCIE_GEN12_GET(x)\ 224 + FIELD_GET(SD10G_LANE_LANE_0C_CFG_RX_PCIE_GEN12, x) 225 + 226 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0D */ 227 + #define SD10G_LANE_LANE_0D(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 52, 0, 1, 4) 228 + 229 + #define SD10G_LANE_LANE_0D_CFG_CTLE_M_THR_1_0 GENMASK(1, 0) 230 + #define SD10G_LANE_LANE_0D_CFG_CTLE_M_THR_1_0_SET(x)\ 231 + FIELD_PREP(SD10G_LANE_LANE_0D_CFG_CTLE_M_THR_1_0, x) 232 + #define SD10G_LANE_LANE_0D_CFG_CTLE_M_THR_1_0_GET(x)\ 233 + FIELD_GET(SD10G_LANE_LANE_0D_CFG_CTLE_M_THR_1_0, x) 234 + 235 + #define SD10G_LANE_LANE_0D_CFG_EQR_BYP BIT(4) 236 + #define SD10G_LANE_LANE_0D_CFG_EQR_BYP_SET(x)\ 237 + FIELD_PREP(SD10G_LANE_LANE_0D_CFG_EQR_BYP, x) 238 + #define SD10G_LANE_LANE_0D_CFG_EQR_BYP_GET(x)\ 239 + FIELD_GET(SD10G_LANE_LANE_0D_CFG_EQR_BYP, x) 240 + 241 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0E */ 242 + #define SD10G_LANE_LANE_0E(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 56, 0, 1, 4) 243 + 244 + #define SD10G_LANE_LANE_0E_CFG_EQC_FORCE_3_0 GENMASK(3, 0) 245 + #define SD10G_LANE_LANE_0E_CFG_EQC_FORCE_3_0_SET(x)\ 246 + FIELD_PREP(SD10G_LANE_LANE_0E_CFG_EQC_FORCE_3_0, x) 247 + #define SD10G_LANE_LANE_0E_CFG_EQC_FORCE_3_0_GET(x)\ 248 + FIELD_GET(SD10G_LANE_LANE_0E_CFG_EQC_FORCE_3_0, x) 249 + 250 + #define SD10G_LANE_LANE_0E_CFG_RXLB_EN BIT(4) 251 + #define SD10G_LANE_LANE_0E_CFG_RXLB_EN_SET(x)\ 252 + FIELD_PREP(SD10G_LANE_LANE_0E_CFG_RXLB_EN, x) 253 + #define SD10G_LANE_LANE_0E_CFG_RXLB_EN_GET(x)\ 254 + FIELD_GET(SD10G_LANE_LANE_0E_CFG_RXLB_EN, x) 255 + 256 + #define SD10G_LANE_LANE_0E_CFG_TXLB_EN BIT(5) 257 + #define SD10G_LANE_LANE_0E_CFG_TXLB_EN_SET(x)\ 258 + FIELD_PREP(SD10G_LANE_LANE_0E_CFG_TXLB_EN, x) 259 + #define SD10G_LANE_LANE_0E_CFG_TXLB_EN_GET(x)\ 260 + FIELD_GET(SD10G_LANE_LANE_0E_CFG_TXLB_EN, x) 261 + 262 + #define SD10G_LANE_LANE_0E_CFG_SUM_SETCM_EN BIT(6) 263 + #define SD10G_LANE_LANE_0E_CFG_SUM_SETCM_EN_SET(x)\ 264 + FIELD_PREP(SD10G_LANE_LANE_0E_CFG_SUM_SETCM_EN, x) 265 + #define SD10G_LANE_LANE_0E_CFG_SUM_SETCM_EN_GET(x)\ 266 + FIELD_GET(SD10G_LANE_LANE_0E_CFG_SUM_SETCM_EN, x) 267 + 268 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_0F */ 269 + #define SD10G_LANE_LANE_0F(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 60, 0, 1, 4) 270 + 271 + #define SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0 GENMASK(7, 0) 272 + #define SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0_SET(x)\ 273 + FIELD_PREP(SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0, x) 274 + #define SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0_GET(x)\ 275 + FIELD_GET(SD10G_LANE_LANE_0F_R_CDR_M_GEN1_7_0, x) 276 + 277 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_13 */ 278 + #define SD10G_LANE_LANE_13(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 76, 0, 1, 4) 279 + 280 + #define SD10G_LANE_LANE_13_CFG_DCDR_PD BIT(0) 281 + #define SD10G_LANE_LANE_13_CFG_DCDR_PD_SET(x)\ 282 + FIELD_PREP(SD10G_LANE_LANE_13_CFG_DCDR_PD, x) 283 + #define SD10G_LANE_LANE_13_CFG_DCDR_PD_GET(x)\ 284 + FIELD_GET(SD10G_LANE_LANE_13_CFG_DCDR_PD, x) 285 + 286 + #define SD10G_LANE_LANE_13_CFG_PHID_1T BIT(1) 287 + #define SD10G_LANE_LANE_13_CFG_PHID_1T_SET(x)\ 288 + FIELD_PREP(SD10G_LANE_LANE_13_CFG_PHID_1T, x) 289 + #define SD10G_LANE_LANE_13_CFG_PHID_1T_GET(x)\ 290 + FIELD_GET(SD10G_LANE_LANE_13_CFG_PHID_1T, x) 291 + 292 + #define SD10G_LANE_LANE_13_CFG_CDRCK_EN BIT(2) 293 + #define SD10G_LANE_LANE_13_CFG_CDRCK_EN_SET(x)\ 294 + FIELD_PREP(SD10G_LANE_LANE_13_CFG_CDRCK_EN, x) 295 + #define SD10G_LANE_LANE_13_CFG_CDRCK_EN_GET(x)\ 296 + FIELD_GET(SD10G_LANE_LANE_13_CFG_CDRCK_EN, x) 297 + 298 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_14 */ 299 + #define SD10G_LANE_LANE_14(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 80, 0, 1, 4) 300 + 301 + #define SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0 GENMASK(7, 0) 302 + #define SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0_SET(x)\ 303 + FIELD_PREP(SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0, x) 304 + #define SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0_GET(x)\ 305 + FIELD_GET(SD10G_LANE_LANE_14_CFG_PI_EXT_DAC_7_0, x) 306 + 307 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_15 */ 308 + #define SD10G_LANE_LANE_15(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 84, 0, 1, 4) 309 + 310 + #define SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8 GENMASK(7, 0) 311 + #define SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8_SET(x)\ 312 + FIELD_PREP(SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8, x) 313 + #define SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8_GET(x)\ 314 + FIELD_GET(SD10G_LANE_LANE_15_CFG_PI_EXT_DAC_15_8, x) 315 + 316 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_16 */ 317 + #define SD10G_LANE_LANE_16(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 88, 0, 1, 4) 318 + 319 + #define SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16 GENMASK(7, 0) 320 + #define SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16_SET(x)\ 321 + FIELD_PREP(SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16, x) 322 + #define SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16_GET(x)\ 323 + FIELD_GET(SD10G_LANE_LANE_16_CFG_PI_EXT_DAC_23_16, x) 324 + 325 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_1A */ 326 + #define SD10G_LANE_LANE_1A(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 104, 0, 1, 4) 327 + 328 + #define SD10G_LANE_LANE_1A_CFG_PI_R_SCAN_EN BIT(0) 329 + #define SD10G_LANE_LANE_1A_CFG_PI_R_SCAN_EN_SET(x)\ 330 + FIELD_PREP(SD10G_LANE_LANE_1A_CFG_PI_R_SCAN_EN, x) 331 + #define SD10G_LANE_LANE_1A_CFG_PI_R_SCAN_EN_GET(x)\ 332 + FIELD_GET(SD10G_LANE_LANE_1A_CFG_PI_R_SCAN_EN, x) 333 + 334 + #define SD10G_LANE_LANE_1A_CFG_PI_EN BIT(1) 335 + #define SD10G_LANE_LANE_1A_CFG_PI_EN_SET(x)\ 336 + FIELD_PREP(SD10G_LANE_LANE_1A_CFG_PI_EN, x) 337 + #define SD10G_LANE_LANE_1A_CFG_PI_EN_GET(x)\ 338 + FIELD_GET(SD10G_LANE_LANE_1A_CFG_PI_EN, x) 339 + 340 + #define SD10G_LANE_LANE_1A_CFG_PI_DFE_EN BIT(2) 341 + #define SD10G_LANE_LANE_1A_CFG_PI_DFE_EN_SET(x)\ 342 + FIELD_PREP(SD10G_LANE_LANE_1A_CFG_PI_DFE_EN, x) 343 + #define SD10G_LANE_LANE_1A_CFG_PI_DFE_EN_GET(x)\ 344 + FIELD_GET(SD10G_LANE_LANE_1A_CFG_PI_DFE_EN, x) 345 + 346 + #define SD10G_LANE_LANE_1A_CFG_PI_STEPS BIT(3) 347 + #define SD10G_LANE_LANE_1A_CFG_PI_STEPS_SET(x)\ 348 + FIELD_PREP(SD10G_LANE_LANE_1A_CFG_PI_STEPS, x) 349 + #define SD10G_LANE_LANE_1A_CFG_PI_STEPS_GET(x)\ 350 + FIELD_GET(SD10G_LANE_LANE_1A_CFG_PI_STEPS, x) 351 + 352 + #define SD10G_LANE_LANE_1A_CFG_PI_FLOOP_STEPS_1_0 GENMASK(5, 4) 353 + #define SD10G_LANE_LANE_1A_CFG_PI_FLOOP_STEPS_1_0_SET(x)\ 354 + FIELD_PREP(SD10G_LANE_LANE_1A_CFG_PI_FLOOP_STEPS_1_0, x) 355 + #define SD10G_LANE_LANE_1A_CFG_PI_FLOOP_STEPS_1_0_GET(x)\ 356 + FIELD_GET(SD10G_LANE_LANE_1A_CFG_PI_FLOOP_STEPS_1_0, x) 357 + 358 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_22 */ 359 + #define SD10G_LANE_LANE_22(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 136, 0, 1, 4) 360 + 361 + #define SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1 GENMASK(4, 0) 362 + #define SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1_SET(x)\ 363 + FIELD_PREP(SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1, x) 364 + #define SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1_GET(x)\ 365 + FIELD_GET(SD10G_LANE_LANE_22_CFG_DFETAP_EN_5_1, x) 366 + 367 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_23 */ 368 + #define SD10G_LANE_LANE_23(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 140, 0, 1, 4) 369 + 370 + #define SD10G_LANE_LANE_23_CFG_DFE_PD BIT(0) 371 + #define SD10G_LANE_LANE_23_CFG_DFE_PD_SET(x)\ 372 + FIELD_PREP(SD10G_LANE_LANE_23_CFG_DFE_PD, x) 373 + #define SD10G_LANE_LANE_23_CFG_DFE_PD_GET(x)\ 374 + FIELD_GET(SD10G_LANE_LANE_23_CFG_DFE_PD, x) 375 + 376 + #define SD10G_LANE_LANE_23_CFG_EN_DFEDIG BIT(1) 377 + #define SD10G_LANE_LANE_23_CFG_EN_DFEDIG_SET(x)\ 378 + FIELD_PREP(SD10G_LANE_LANE_23_CFG_EN_DFEDIG, x) 379 + #define SD10G_LANE_LANE_23_CFG_EN_DFEDIG_GET(x)\ 380 + FIELD_GET(SD10G_LANE_LANE_23_CFG_EN_DFEDIG, x) 381 + 382 + #define SD10G_LANE_LANE_23_CFG_DFECK_EN BIT(2) 383 + #define SD10G_LANE_LANE_23_CFG_DFECK_EN_SET(x)\ 384 + FIELD_PREP(SD10G_LANE_LANE_23_CFG_DFECK_EN, x) 385 + #define SD10G_LANE_LANE_23_CFG_DFECK_EN_GET(x)\ 386 + FIELD_GET(SD10G_LANE_LANE_23_CFG_DFECK_EN, x) 387 + 388 + #define SD10G_LANE_LANE_23_CFG_ERRAMP_PD BIT(3) 389 + #define SD10G_LANE_LANE_23_CFG_ERRAMP_PD_SET(x)\ 390 + FIELD_PREP(SD10G_LANE_LANE_23_CFG_ERRAMP_PD, x) 391 + #define SD10G_LANE_LANE_23_CFG_ERRAMP_PD_GET(x)\ 392 + FIELD_GET(SD10G_LANE_LANE_23_CFG_ERRAMP_PD, x) 393 + 394 + #define SD10G_LANE_LANE_23_CFG_DFEDIG_M_2_0 GENMASK(6, 4) 395 + #define SD10G_LANE_LANE_23_CFG_DFEDIG_M_2_0_SET(x)\ 396 + FIELD_PREP(SD10G_LANE_LANE_23_CFG_DFEDIG_M_2_0, x) 397 + #define SD10G_LANE_LANE_23_CFG_DFEDIG_M_2_0_GET(x)\ 398 + FIELD_GET(SD10G_LANE_LANE_23_CFG_DFEDIG_M_2_0, x) 399 + 400 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_24 */ 401 + #define SD10G_LANE_LANE_24(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 144, 0, 1, 4) 402 + 403 + #define SD10G_LANE_LANE_24_CFG_PI_BW_GEN1_3_0 GENMASK(3, 0) 404 + #define SD10G_LANE_LANE_24_CFG_PI_BW_GEN1_3_0_SET(x)\ 405 + FIELD_PREP(SD10G_LANE_LANE_24_CFG_PI_BW_GEN1_3_0, x) 406 + #define SD10G_LANE_LANE_24_CFG_PI_BW_GEN1_3_0_GET(x)\ 407 + FIELD_GET(SD10G_LANE_LANE_24_CFG_PI_BW_GEN1_3_0, x) 408 + 409 + #define SD10G_LANE_LANE_24_CFG_PI_BW_GEN2_3_0 GENMASK(7, 4) 410 + #define SD10G_LANE_LANE_24_CFG_PI_BW_GEN2_3_0_SET(x)\ 411 + FIELD_PREP(SD10G_LANE_LANE_24_CFG_PI_BW_GEN2_3_0, x) 412 + #define SD10G_LANE_LANE_24_CFG_PI_BW_GEN2_3_0_GET(x)\ 413 + FIELD_GET(SD10G_LANE_LANE_24_CFG_PI_BW_GEN2_3_0, x) 414 + 415 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_26 */ 416 + #define SD10G_LANE_LANE_26(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 152, 0, 1, 4) 417 + 418 + #define SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0 GENMASK(7, 0) 419 + #define SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0_SET(x)\ 420 + FIELD_PREP(SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0, x) 421 + #define SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0_GET(x)\ 422 + FIELD_GET(SD10G_LANE_LANE_26_CFG_ISCAN_EXT_DAC_7_0, x) 423 + 424 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_2F */ 425 + #define SD10G_LANE_LANE_2F(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 188, 0, 1, 4) 426 + 427 + #define SD10G_LANE_LANE_2F_CFG_VGA_CP_2_0 GENMASK(2, 0) 428 + #define SD10G_LANE_LANE_2F_CFG_VGA_CP_2_0_SET(x)\ 429 + FIELD_PREP(SD10G_LANE_LANE_2F_CFG_VGA_CP_2_0, x) 430 + #define SD10G_LANE_LANE_2F_CFG_VGA_CP_2_0_GET(x)\ 431 + FIELD_GET(SD10G_LANE_LANE_2F_CFG_VGA_CP_2_0, x) 432 + 433 + #define SD10G_LANE_LANE_2F_CFG_VGA_CTRL_3_0 GENMASK(7, 4) 434 + #define SD10G_LANE_LANE_2F_CFG_VGA_CTRL_3_0_SET(x)\ 435 + FIELD_PREP(SD10G_LANE_LANE_2F_CFG_VGA_CTRL_3_0, x) 436 + #define SD10G_LANE_LANE_2F_CFG_VGA_CTRL_3_0_GET(x)\ 437 + FIELD_GET(SD10G_LANE_LANE_2F_CFG_VGA_CTRL_3_0, x) 438 + 439 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_30 */ 440 + #define SD10G_LANE_LANE_30(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 192, 0, 1, 4) 441 + 442 + #define SD10G_LANE_LANE_30_CFG_SUMMER_EN BIT(0) 443 + #define SD10G_LANE_LANE_30_CFG_SUMMER_EN_SET(x)\ 444 + FIELD_PREP(SD10G_LANE_LANE_30_CFG_SUMMER_EN, x) 445 + #define SD10G_LANE_LANE_30_CFG_SUMMER_EN_GET(x)\ 446 + FIELD_GET(SD10G_LANE_LANE_30_CFG_SUMMER_EN, x) 447 + 448 + #define SD10G_LANE_LANE_30_CFG_RXDIV_SEL_2_0 GENMASK(6, 4) 449 + #define SD10G_LANE_LANE_30_CFG_RXDIV_SEL_2_0_SET(x)\ 450 + FIELD_PREP(SD10G_LANE_LANE_30_CFG_RXDIV_SEL_2_0, x) 451 + #define SD10G_LANE_LANE_30_CFG_RXDIV_SEL_2_0_GET(x)\ 452 + FIELD_GET(SD10G_LANE_LANE_30_CFG_RXDIV_SEL_2_0, x) 453 + 454 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_31 */ 455 + #define SD10G_LANE_LANE_31(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 196, 0, 1, 4) 456 + 457 + #define SD10G_LANE_LANE_31_CFG_PI_RSTN BIT(0) 458 + #define SD10G_LANE_LANE_31_CFG_PI_RSTN_SET(x)\ 459 + FIELD_PREP(SD10G_LANE_LANE_31_CFG_PI_RSTN, x) 460 + #define SD10G_LANE_LANE_31_CFG_PI_RSTN_GET(x)\ 461 + FIELD_GET(SD10G_LANE_LANE_31_CFG_PI_RSTN, x) 462 + 463 + #define SD10G_LANE_LANE_31_CFG_CDR_RSTN BIT(1) 464 + #define SD10G_LANE_LANE_31_CFG_CDR_RSTN_SET(x)\ 465 + FIELD_PREP(SD10G_LANE_LANE_31_CFG_CDR_RSTN, x) 466 + #define SD10G_LANE_LANE_31_CFG_CDR_RSTN_GET(x)\ 467 + FIELD_GET(SD10G_LANE_LANE_31_CFG_CDR_RSTN, x) 468 + 469 + #define SD10G_LANE_LANE_31_CFG_RSTN_DFEDIG BIT(2) 470 + #define SD10G_LANE_LANE_31_CFG_RSTN_DFEDIG_SET(x)\ 471 + FIELD_PREP(SD10G_LANE_LANE_31_CFG_RSTN_DFEDIG, x) 472 + #define SD10G_LANE_LANE_31_CFG_RSTN_DFEDIG_GET(x)\ 473 + FIELD_GET(SD10G_LANE_LANE_31_CFG_RSTN_DFEDIG, x) 474 + 475 + #define SD10G_LANE_LANE_31_CFG_CTLE_RSTN BIT(3) 476 + #define SD10G_LANE_LANE_31_CFG_CTLE_RSTN_SET(x)\ 477 + FIELD_PREP(SD10G_LANE_LANE_31_CFG_CTLE_RSTN, x) 478 + #define SD10G_LANE_LANE_31_CFG_CTLE_RSTN_GET(x)\ 479 + FIELD_GET(SD10G_LANE_LANE_31_CFG_CTLE_RSTN, x) 480 + 481 + #define SD10G_LANE_LANE_31_CFG_RSTN_DIV5_8 BIT(4) 482 + #define SD10G_LANE_LANE_31_CFG_RSTN_DIV5_8_SET(x)\ 483 + FIELD_PREP(SD10G_LANE_LANE_31_CFG_RSTN_DIV5_8, x) 484 + #define SD10G_LANE_LANE_31_CFG_RSTN_DIV5_8_GET(x)\ 485 + FIELD_GET(SD10G_LANE_LANE_31_CFG_RSTN_DIV5_8, x) 486 + 487 + #define SD10G_LANE_LANE_31_CFG_R50_EN BIT(5) 488 + #define SD10G_LANE_LANE_31_CFG_R50_EN_SET(x)\ 489 + FIELD_PREP(SD10G_LANE_LANE_31_CFG_R50_EN, x) 490 + #define SD10G_LANE_LANE_31_CFG_R50_EN_GET(x)\ 491 + FIELD_GET(SD10G_LANE_LANE_31_CFG_R50_EN, x) 492 + 493 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_32 */ 494 + #define SD10G_LANE_LANE_32(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 200, 0, 1, 4) 495 + 496 + #define SD10G_LANE_LANE_32_CFG_ITX_IPCLK_BASE_1_0 GENMASK(1, 0) 497 + #define SD10G_LANE_LANE_32_CFG_ITX_IPCLK_BASE_1_0_SET(x)\ 498 + FIELD_PREP(SD10G_LANE_LANE_32_CFG_ITX_IPCLK_BASE_1_0, x) 499 + #define SD10G_LANE_LANE_32_CFG_ITX_IPCLK_BASE_1_0_GET(x)\ 500 + FIELD_GET(SD10G_LANE_LANE_32_CFG_ITX_IPCLK_BASE_1_0, x) 501 + 502 + #define SD10G_LANE_LANE_32_CFG_ITX_IPCML_BASE_1_0 GENMASK(5, 4) 503 + #define SD10G_LANE_LANE_32_CFG_ITX_IPCML_BASE_1_0_SET(x)\ 504 + FIELD_PREP(SD10G_LANE_LANE_32_CFG_ITX_IPCML_BASE_1_0, x) 505 + #define SD10G_LANE_LANE_32_CFG_ITX_IPCML_BASE_1_0_GET(x)\ 506 + FIELD_GET(SD10G_LANE_LANE_32_CFG_ITX_IPCML_BASE_1_0, x) 507 + 508 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_33 */ 509 + #define SD10G_LANE_LANE_33(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 204, 0, 1, 4) 510 + 511 + #define SD10G_LANE_LANE_33_CFG_ITX_IPDRIVER_BASE_2_0 GENMASK(2, 0) 512 + #define SD10G_LANE_LANE_33_CFG_ITX_IPDRIVER_BASE_2_0_SET(x)\ 513 + FIELD_PREP(SD10G_LANE_LANE_33_CFG_ITX_IPDRIVER_BASE_2_0, x) 514 + #define SD10G_LANE_LANE_33_CFG_ITX_IPDRIVER_BASE_2_0_GET(x)\ 515 + FIELD_GET(SD10G_LANE_LANE_33_CFG_ITX_IPDRIVER_BASE_2_0, x) 516 + 517 + #define SD10G_LANE_LANE_33_CFG_ITX_IPPREEMP_BASE_1_0 GENMASK(5, 4) 518 + #define SD10G_LANE_LANE_33_CFG_ITX_IPPREEMP_BASE_1_0_SET(x)\ 519 + FIELD_PREP(SD10G_LANE_LANE_33_CFG_ITX_IPPREEMP_BASE_1_0, x) 520 + #define SD10G_LANE_LANE_33_CFG_ITX_IPPREEMP_BASE_1_0_GET(x)\ 521 + FIELD_GET(SD10G_LANE_LANE_33_CFG_ITX_IPPREEMP_BASE_1_0, x) 522 + 523 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_35 */ 524 + #define SD10G_LANE_LANE_35(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 212, 0, 1, 4) 525 + 526 + #define SD10G_LANE_LANE_35_CFG_TXRATE_1_0 GENMASK(1, 0) 527 + #define SD10G_LANE_LANE_35_CFG_TXRATE_1_0_SET(x)\ 528 + FIELD_PREP(SD10G_LANE_LANE_35_CFG_TXRATE_1_0, x) 529 + #define SD10G_LANE_LANE_35_CFG_TXRATE_1_0_GET(x)\ 530 + FIELD_GET(SD10G_LANE_LANE_35_CFG_TXRATE_1_0, x) 531 + 532 + #define SD10G_LANE_LANE_35_CFG_RXRATE_1_0 GENMASK(5, 4) 533 + #define SD10G_LANE_LANE_35_CFG_RXRATE_1_0_SET(x)\ 534 + FIELD_PREP(SD10G_LANE_LANE_35_CFG_RXRATE_1_0, x) 535 + #define SD10G_LANE_LANE_35_CFG_RXRATE_1_0_GET(x)\ 536 + FIELD_GET(SD10G_LANE_LANE_35_CFG_RXRATE_1_0, x) 537 + 538 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_36 */ 539 + #define SD10G_LANE_LANE_36(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 216, 0, 1, 4) 540 + 541 + #define SD10G_LANE_LANE_36_CFG_PREDRV_SLEWRATE_1_0 GENMASK(1, 0) 542 + #define SD10G_LANE_LANE_36_CFG_PREDRV_SLEWRATE_1_0_SET(x)\ 543 + FIELD_PREP(SD10G_LANE_LANE_36_CFG_PREDRV_SLEWRATE_1_0, x) 544 + #define SD10G_LANE_LANE_36_CFG_PREDRV_SLEWRATE_1_0_GET(x)\ 545 + FIELD_GET(SD10G_LANE_LANE_36_CFG_PREDRV_SLEWRATE_1_0, x) 546 + 547 + #define SD10G_LANE_LANE_36_CFG_EID_LP BIT(4) 548 + #define SD10G_LANE_LANE_36_CFG_EID_LP_SET(x)\ 549 + FIELD_PREP(SD10G_LANE_LANE_36_CFG_EID_LP, x) 550 + #define SD10G_LANE_LANE_36_CFG_EID_LP_GET(x)\ 551 + FIELD_GET(SD10G_LANE_LANE_36_CFG_EID_LP, x) 552 + 553 + #define SD10G_LANE_LANE_36_CFG_EN_PREDRV_EMPH BIT(5) 554 + #define SD10G_LANE_LANE_36_CFG_EN_PREDRV_EMPH_SET(x)\ 555 + FIELD_PREP(SD10G_LANE_LANE_36_CFG_EN_PREDRV_EMPH, x) 556 + #define SD10G_LANE_LANE_36_CFG_EN_PREDRV_EMPH_GET(x)\ 557 + FIELD_GET(SD10G_LANE_LANE_36_CFG_EN_PREDRV_EMPH, x) 558 + 559 + #define SD10G_LANE_LANE_36_CFG_PRBS_SEL BIT(6) 560 + #define SD10G_LANE_LANE_36_CFG_PRBS_SEL_SET(x)\ 561 + FIELD_PREP(SD10G_LANE_LANE_36_CFG_PRBS_SEL, x) 562 + #define SD10G_LANE_LANE_36_CFG_PRBS_SEL_GET(x)\ 563 + FIELD_GET(SD10G_LANE_LANE_36_CFG_PRBS_SEL, x) 564 + 565 + #define SD10G_LANE_LANE_36_CFG_PRBS_SETB BIT(7) 566 + #define SD10G_LANE_LANE_36_CFG_PRBS_SETB_SET(x)\ 567 + FIELD_PREP(SD10G_LANE_LANE_36_CFG_PRBS_SETB, x) 568 + #define SD10G_LANE_LANE_36_CFG_PRBS_SETB_GET(x)\ 569 + FIELD_GET(SD10G_LANE_LANE_36_CFG_PRBS_SETB, x) 570 + 571 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_37 */ 572 + #define SD10G_LANE_LANE_37(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 220, 0, 1, 4) 573 + 574 + #define SD10G_LANE_LANE_37_CFG_RXDET_COMP_PD BIT(0) 575 + #define SD10G_LANE_LANE_37_CFG_RXDET_COMP_PD_SET(x)\ 576 + FIELD_PREP(SD10G_LANE_LANE_37_CFG_RXDET_COMP_PD, x) 577 + #define SD10G_LANE_LANE_37_CFG_RXDET_COMP_PD_GET(x)\ 578 + FIELD_GET(SD10G_LANE_LANE_37_CFG_RXDET_COMP_PD, x) 579 + 580 + #define SD10G_LANE_LANE_37_CFG_PD_RX_CKTREE BIT(1) 581 + #define SD10G_LANE_LANE_37_CFG_PD_RX_CKTREE_SET(x)\ 582 + FIELD_PREP(SD10G_LANE_LANE_37_CFG_PD_RX_CKTREE, x) 583 + #define SD10G_LANE_LANE_37_CFG_PD_RX_CKTREE_GET(x)\ 584 + FIELD_GET(SD10G_LANE_LANE_37_CFG_PD_RX_CKTREE, x) 585 + 586 + #define SD10G_LANE_LANE_37_CFG_TXSWING_HALF BIT(2) 587 + #define SD10G_LANE_LANE_37_CFG_TXSWING_HALF_SET(x)\ 588 + FIELD_PREP(SD10G_LANE_LANE_37_CFG_TXSWING_HALF, x) 589 + #define SD10G_LANE_LANE_37_CFG_TXSWING_HALF_GET(x)\ 590 + FIELD_GET(SD10G_LANE_LANE_37_CFG_TXSWING_HALF, x) 591 + 592 + #define SD10G_LANE_LANE_37_CFG_IP_PRE_BASE_1_0 GENMASK(5, 4) 593 + #define SD10G_LANE_LANE_37_CFG_IP_PRE_BASE_1_0_SET(x)\ 594 + FIELD_PREP(SD10G_LANE_LANE_37_CFG_IP_PRE_BASE_1_0, x) 595 + #define SD10G_LANE_LANE_37_CFG_IP_PRE_BASE_1_0_GET(x)\ 596 + FIELD_GET(SD10G_LANE_LANE_37_CFG_IP_PRE_BASE_1_0, x) 597 + 598 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_39 */ 599 + #define SD10G_LANE_LANE_39(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 228, 0, 1, 4) 600 + 601 + #define SD10G_LANE_LANE_39_CFG_RXFILT_Y_2_0 GENMASK(2, 0) 602 + #define SD10G_LANE_LANE_39_CFG_RXFILT_Y_2_0_SET(x)\ 603 + FIELD_PREP(SD10G_LANE_LANE_39_CFG_RXFILT_Y_2_0, x) 604 + #define SD10G_LANE_LANE_39_CFG_RXFILT_Y_2_0_GET(x)\ 605 + FIELD_GET(SD10G_LANE_LANE_39_CFG_RXFILT_Y_2_0, x) 606 + 607 + #define SD10G_LANE_LANE_39_CFG_RX_SSC_LH BIT(4) 608 + #define SD10G_LANE_LANE_39_CFG_RX_SSC_LH_SET(x)\ 609 + FIELD_PREP(SD10G_LANE_LANE_39_CFG_RX_SSC_LH, x) 610 + #define SD10G_LANE_LANE_39_CFG_RX_SSC_LH_GET(x)\ 611 + FIELD_GET(SD10G_LANE_LANE_39_CFG_RX_SSC_LH, x) 612 + 613 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_3A */ 614 + #define SD10G_LANE_LANE_3A(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 232, 0, 1, 4) 615 + 616 + #define SD10G_LANE_LANE_3A_CFG_MP_MIN_3_0 GENMASK(3, 0) 617 + #define SD10G_LANE_LANE_3A_CFG_MP_MIN_3_0_SET(x)\ 618 + FIELD_PREP(SD10G_LANE_LANE_3A_CFG_MP_MIN_3_0, x) 619 + #define SD10G_LANE_LANE_3A_CFG_MP_MIN_3_0_GET(x)\ 620 + FIELD_GET(SD10G_LANE_LANE_3A_CFG_MP_MIN_3_0, x) 621 + 622 + #define SD10G_LANE_LANE_3A_CFG_MP_MAX_3_0 GENMASK(7, 4) 623 + #define SD10G_LANE_LANE_3A_CFG_MP_MAX_3_0_SET(x)\ 624 + FIELD_PREP(SD10G_LANE_LANE_3A_CFG_MP_MAX_3_0, x) 625 + #define SD10G_LANE_LANE_3A_CFG_MP_MAX_3_0_GET(x)\ 626 + FIELD_GET(SD10G_LANE_LANE_3A_CFG_MP_MAX_3_0, x) 627 + 628 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_3C */ 629 + #define SD10G_LANE_LANE_3C(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 240, 0, 1, 4) 630 + 631 + #define SD10G_LANE_LANE_3C_CFG_DIS_ACC BIT(0) 632 + #define SD10G_LANE_LANE_3C_CFG_DIS_ACC_SET(x)\ 633 + FIELD_PREP(SD10G_LANE_LANE_3C_CFG_DIS_ACC, x) 634 + #define SD10G_LANE_LANE_3C_CFG_DIS_ACC_GET(x)\ 635 + FIELD_GET(SD10G_LANE_LANE_3C_CFG_DIS_ACC, x) 636 + 637 + #define SD10G_LANE_LANE_3C_CFG_DIS_2NDORDER BIT(1) 638 + #define SD10G_LANE_LANE_3C_CFG_DIS_2NDORDER_SET(x)\ 639 + FIELD_PREP(SD10G_LANE_LANE_3C_CFG_DIS_2NDORDER, x) 640 + #define SD10G_LANE_LANE_3C_CFG_DIS_2NDORDER_GET(x)\ 641 + FIELD_GET(SD10G_LANE_LANE_3C_CFG_DIS_2NDORDER, x) 642 + 643 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_40 */ 644 + #define SD10G_LANE_LANE_40(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 256, 0, 1, 4) 645 + 646 + #define SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0 GENMASK(7, 0) 647 + #define SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0_SET(x)\ 648 + FIELD_PREP(SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0, x) 649 + #define SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0_GET(x)\ 650 + FIELD_GET(SD10G_LANE_LANE_40_CFG_LANE_RESERVE_7_0, x) 651 + 652 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_41 */ 653 + #define SD10G_LANE_LANE_41(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 260, 0, 1, 4) 654 + 655 + #define SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8 GENMASK(7, 0) 656 + #define SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8_SET(x)\ 657 + FIELD_PREP(SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8, x) 658 + #define SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8_GET(x)\ 659 + FIELD_GET(SD10G_LANE_LANE_41_CFG_LANE_RESERVE_15_8, x) 660 + 661 + /* SD10G_LANE_TARGET:LANE_GRP_0:LANE_42 */ 662 + #define SD10G_LANE_LANE_42(t) __REG(TARGET_SD10G_LANE, t, 12, 0, 0, 1, 288, 264, 0, 1, 4) 663 + 664 + #define SD10G_LANE_LANE_42_CFG_CDR_KF_GEN1_2_0 GENMASK(2, 0) 665 + #define SD10G_LANE_LANE_42_CFG_CDR_KF_GEN1_2_0_SET(x)\ 666 + FIELD_PREP(SD10G_LANE_LANE_42_CFG_CDR_KF_GEN1_2_0, x) 667 + #define SD10G_LANE_LANE_42_CFG_CDR_KF_GEN1_2_0_GET(x)\ 668 + FIELD_GET(SD10G_LANE_LANE_42_CFG_CDR_KF_GEN1_2_0, x) 669 + 670 + #define SD10G_LANE_LANE_42_CFG_CDR_KF_GEN2_2_0 GENMASK(6, 4) 671 + #define SD10G_LANE_LANE_42_CFG_CDR_KF_GEN2_2_0_SET(x)\ 672 + FIELD_PREP(SD10G_LANE_LANE_42_CFG_CDR_KF_GEN2_2_0, x) 673 + #define SD10G_LANE_LANE_42_CFG_CDR_KF_GEN2_2_0_GET(x)\ 674 + FIELD_GET(SD10G_LANE_LANE_42_CFG_CDR_KF_GEN2_2_0, x) 675 + 676 + /* SD10G_LANE_TARGET:LANE_GRP_1:LANE_48 */ 677 + #define SD10G_LANE_LANE_48(t) __REG(TARGET_SD10G_LANE, t, 12, 288, 0, 1, 40, 0, 0, 1, 4) 678 + 679 + #define SD10G_LANE_LANE_48_CFG_ALOS_THR_3_0 GENMASK(3, 0) 680 + #define SD10G_LANE_LANE_48_CFG_ALOS_THR_3_0_SET(x)\ 681 + FIELD_PREP(SD10G_LANE_LANE_48_CFG_ALOS_THR_3_0, x) 682 + #define SD10G_LANE_LANE_48_CFG_ALOS_THR_3_0_GET(x)\ 683 + FIELD_GET(SD10G_LANE_LANE_48_CFG_ALOS_THR_3_0, x) 684 + 685 + #define SD10G_LANE_LANE_48_CFG_AUX_RXCK_SEL BIT(4) 686 + #define SD10G_LANE_LANE_48_CFG_AUX_RXCK_SEL_SET(x)\ 687 + FIELD_PREP(SD10G_LANE_LANE_48_CFG_AUX_RXCK_SEL, x) 688 + #define SD10G_LANE_LANE_48_CFG_AUX_RXCK_SEL_GET(x)\ 689 + FIELD_GET(SD10G_LANE_LANE_48_CFG_AUX_RXCK_SEL, x) 690 + 691 + #define SD10G_LANE_LANE_48_CFG_CLK_ENQ BIT(5) 692 + #define SD10G_LANE_LANE_48_CFG_CLK_ENQ_SET(x)\ 693 + FIELD_PREP(SD10G_LANE_LANE_48_CFG_CLK_ENQ, x) 694 + #define SD10G_LANE_LANE_48_CFG_CLK_ENQ_GET(x)\ 695 + FIELD_GET(SD10G_LANE_LANE_48_CFG_CLK_ENQ, x) 696 + 697 + /* SD10G_LANE_TARGET:LANE_GRP_1:LANE_50 */ 698 + #define SD10G_LANE_LANE_50(t) __REG(TARGET_SD10G_LANE, t, 12, 288, 0, 1, 40, 32, 0, 1, 4) 699 + 700 + #define SD10G_LANE_LANE_50_CFG_SSC_PI_STEP_1_0 GENMASK(1, 0) 701 + #define SD10G_LANE_LANE_50_CFG_SSC_PI_STEP_1_0_SET(x)\ 702 + FIELD_PREP(SD10G_LANE_LANE_50_CFG_SSC_PI_STEP_1_0, x) 703 + #define SD10G_LANE_LANE_50_CFG_SSC_PI_STEP_1_0_GET(x)\ 704 + FIELD_GET(SD10G_LANE_LANE_50_CFG_SSC_PI_STEP_1_0, x) 705 + 706 + #define SD10G_LANE_LANE_50_CFG_SSC_RESETB BIT(4) 707 + #define SD10G_LANE_LANE_50_CFG_SSC_RESETB_SET(x)\ 708 + FIELD_PREP(SD10G_LANE_LANE_50_CFG_SSC_RESETB, x) 709 + #define SD10G_LANE_LANE_50_CFG_SSC_RESETB_GET(x)\ 710 + FIELD_GET(SD10G_LANE_LANE_50_CFG_SSC_RESETB, x) 711 + 712 + #define SD10G_LANE_LANE_50_CFG_SSC_RTL_CLK_SEL BIT(5) 713 + #define SD10G_LANE_LANE_50_CFG_SSC_RTL_CLK_SEL_SET(x)\ 714 + FIELD_PREP(SD10G_LANE_LANE_50_CFG_SSC_RTL_CLK_SEL, x) 715 + #define SD10G_LANE_LANE_50_CFG_SSC_RTL_CLK_SEL_GET(x)\ 716 + FIELD_GET(SD10G_LANE_LANE_50_CFG_SSC_RTL_CLK_SEL, x) 717 + 718 + #define SD10G_LANE_LANE_50_CFG_AUX_TXCK_SEL BIT(6) 719 + #define SD10G_LANE_LANE_50_CFG_AUX_TXCK_SEL_SET(x)\ 720 + FIELD_PREP(SD10G_LANE_LANE_50_CFG_AUX_TXCK_SEL, x) 721 + #define SD10G_LANE_LANE_50_CFG_AUX_TXCK_SEL_GET(x)\ 722 + FIELD_GET(SD10G_LANE_LANE_50_CFG_AUX_TXCK_SEL, x) 723 + 724 + #define SD10G_LANE_LANE_50_CFG_JT_EN BIT(7) 725 + #define SD10G_LANE_LANE_50_CFG_JT_EN_SET(x)\ 726 + FIELD_PREP(SD10G_LANE_LANE_50_CFG_JT_EN, x) 727 + #define SD10G_LANE_LANE_50_CFG_JT_EN_GET(x)\ 728 + FIELD_GET(SD10G_LANE_LANE_50_CFG_JT_EN, x) 729 + 730 + /* SD10G_LANE_TARGET:LANE_GRP_2:LANE_52 */ 731 + #define SD10G_LANE_LANE_52(t) __REG(TARGET_SD10G_LANE, t, 12, 328, 0, 1, 24, 0, 0, 1, 4) 732 + 733 + #define SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0 GENMASK(5, 0) 734 + #define SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0_SET(x)\ 735 + FIELD_PREP(SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0, x) 736 + #define SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0_GET(x)\ 737 + FIELD_GET(SD10G_LANE_LANE_52_CFG_IBIAS_TUNE_RESERVE_5_0, x) 738 + 739 + /* SD10G_LANE_TARGET:LANE_GRP_4:LANE_83 */ 740 + #define SD10G_LANE_LANE_83(t) __REG(TARGET_SD10G_LANE, t, 12, 464, 0, 1, 112, 60, 0, 1, 4) 741 + 742 + #define SD10G_LANE_LANE_83_R_TX_BIT_REVERSE BIT(0) 743 + #define SD10G_LANE_LANE_83_R_TX_BIT_REVERSE_SET(x)\ 744 + FIELD_PREP(SD10G_LANE_LANE_83_R_TX_BIT_REVERSE, x) 745 + #define SD10G_LANE_LANE_83_R_TX_BIT_REVERSE_GET(x)\ 746 + FIELD_GET(SD10G_LANE_LANE_83_R_TX_BIT_REVERSE, x) 747 + 748 + #define SD10G_LANE_LANE_83_R_TX_POL_INV BIT(1) 749 + #define SD10G_LANE_LANE_83_R_TX_POL_INV_SET(x)\ 750 + FIELD_PREP(SD10G_LANE_LANE_83_R_TX_POL_INV, x) 751 + #define SD10G_LANE_LANE_83_R_TX_POL_INV_GET(x)\ 752 + FIELD_GET(SD10G_LANE_LANE_83_R_TX_POL_INV, x) 753 + 754 + #define SD10G_LANE_LANE_83_R_RX_BIT_REVERSE BIT(2) 755 + #define SD10G_LANE_LANE_83_R_RX_BIT_REVERSE_SET(x)\ 756 + FIELD_PREP(SD10G_LANE_LANE_83_R_RX_BIT_REVERSE, x) 757 + #define SD10G_LANE_LANE_83_R_RX_BIT_REVERSE_GET(x)\ 758 + FIELD_GET(SD10G_LANE_LANE_83_R_RX_BIT_REVERSE, x) 759 + 760 + #define SD10G_LANE_LANE_83_R_RX_POL_INV BIT(3) 761 + #define SD10G_LANE_LANE_83_R_RX_POL_INV_SET(x)\ 762 + FIELD_PREP(SD10G_LANE_LANE_83_R_RX_POL_INV, x) 763 + #define SD10G_LANE_LANE_83_R_RX_POL_INV_GET(x)\ 764 + FIELD_GET(SD10G_LANE_LANE_83_R_RX_POL_INV, x) 765 + 766 + #define SD10G_LANE_LANE_83_R_DFE_RSTN BIT(4) 767 + #define SD10G_LANE_LANE_83_R_DFE_RSTN_SET(x)\ 768 + FIELD_PREP(SD10G_LANE_LANE_83_R_DFE_RSTN, x) 769 + #define SD10G_LANE_LANE_83_R_DFE_RSTN_GET(x)\ 770 + FIELD_GET(SD10G_LANE_LANE_83_R_DFE_RSTN, x) 771 + 772 + #define SD10G_LANE_LANE_83_R_CDR_RSTN BIT(5) 773 + #define SD10G_LANE_LANE_83_R_CDR_RSTN_SET(x)\ 774 + FIELD_PREP(SD10G_LANE_LANE_83_R_CDR_RSTN, x) 775 + #define SD10G_LANE_LANE_83_R_CDR_RSTN_GET(x)\ 776 + FIELD_GET(SD10G_LANE_LANE_83_R_CDR_RSTN, x) 777 + 778 + #define SD10G_LANE_LANE_83_R_CTLE_RSTN BIT(6) 779 + #define SD10G_LANE_LANE_83_R_CTLE_RSTN_SET(x)\ 780 + FIELD_PREP(SD10G_LANE_LANE_83_R_CTLE_RSTN, x) 781 + #define SD10G_LANE_LANE_83_R_CTLE_RSTN_GET(x)\ 782 + FIELD_GET(SD10G_LANE_LANE_83_R_CTLE_RSTN, x) 783 + 784 + /* SD10G_LANE_TARGET:LANE_GRP_5:LANE_93 */ 785 + #define SD10G_LANE_LANE_93(t) __REG(TARGET_SD10G_LANE, t, 12, 576, 0, 1, 64, 12, 0, 1, 4) 786 + 787 + #define SD10G_LANE_LANE_93_R_RXEI_FIFO_RST_EN BIT(0) 788 + #define SD10G_LANE_LANE_93_R_RXEI_FIFO_RST_EN_SET(x)\ 789 + FIELD_PREP(SD10G_LANE_LANE_93_R_RXEI_FIFO_RST_EN, x) 790 + #define SD10G_LANE_LANE_93_R_RXEI_FIFO_RST_EN_GET(x)\ 791 + FIELD_GET(SD10G_LANE_LANE_93_R_RXEI_FIFO_RST_EN, x) 792 + 793 + #define SD10G_LANE_LANE_93_R_DWIDTHCTRL_FROM_HWT BIT(1) 794 + #define SD10G_LANE_LANE_93_R_DWIDTHCTRL_FROM_HWT_SET(x)\ 795 + FIELD_PREP(SD10G_LANE_LANE_93_R_DWIDTHCTRL_FROM_HWT, x) 796 + #define SD10G_LANE_LANE_93_R_DWIDTHCTRL_FROM_HWT_GET(x)\ 797 + FIELD_GET(SD10G_LANE_LANE_93_R_DWIDTHCTRL_FROM_HWT, x) 798 + 799 + #define SD10G_LANE_LANE_93_R_DIS_RESTORE_DFE BIT(2) 800 + #define SD10G_LANE_LANE_93_R_DIS_RESTORE_DFE_SET(x)\ 801 + FIELD_PREP(SD10G_LANE_LANE_93_R_DIS_RESTORE_DFE, x) 802 + #define SD10G_LANE_LANE_93_R_DIS_RESTORE_DFE_GET(x)\ 803 + FIELD_GET(SD10G_LANE_LANE_93_R_DIS_RESTORE_DFE, x) 804 + 805 + #define SD10G_LANE_LANE_93_R_EN_RATECHG_CTRL BIT(3) 806 + #define SD10G_LANE_LANE_93_R_EN_RATECHG_CTRL_SET(x)\ 807 + FIELD_PREP(SD10G_LANE_LANE_93_R_EN_RATECHG_CTRL, x) 808 + #define SD10G_LANE_LANE_93_R_EN_RATECHG_CTRL_GET(x)\ 809 + FIELD_GET(SD10G_LANE_LANE_93_R_EN_RATECHG_CTRL, x) 810 + 811 + #define SD10G_LANE_LANE_93_R_REG_MANUAL BIT(4) 812 + #define SD10G_LANE_LANE_93_R_REG_MANUAL_SET(x)\ 813 + FIELD_PREP(SD10G_LANE_LANE_93_R_REG_MANUAL, x) 814 + #define SD10G_LANE_LANE_93_R_REG_MANUAL_GET(x)\ 815 + FIELD_GET(SD10G_LANE_LANE_93_R_REG_MANUAL, x) 816 + 817 + #define SD10G_LANE_LANE_93_R_AUXCKSEL_FROM_HWT BIT(5) 818 + #define SD10G_LANE_LANE_93_R_AUXCKSEL_FROM_HWT_SET(x)\ 819 + FIELD_PREP(SD10G_LANE_LANE_93_R_AUXCKSEL_FROM_HWT, x) 820 + #define SD10G_LANE_LANE_93_R_AUXCKSEL_FROM_HWT_GET(x)\ 821 + FIELD_GET(SD10G_LANE_LANE_93_R_AUXCKSEL_FROM_HWT, x) 822 + 823 + #define SD10G_LANE_LANE_93_R_LANE_ID_FROM_HWT BIT(6) 824 + #define SD10G_LANE_LANE_93_R_LANE_ID_FROM_HWT_SET(x)\ 825 + FIELD_PREP(SD10G_LANE_LANE_93_R_LANE_ID_FROM_HWT, x) 826 + #define SD10G_LANE_LANE_93_R_LANE_ID_FROM_HWT_GET(x)\ 827 + FIELD_GET(SD10G_LANE_LANE_93_R_LANE_ID_FROM_HWT, x) 828 + 829 + #define SD10G_LANE_LANE_93_R_RX_PCIE_GEN12_FROM_HWT BIT(7) 830 + #define SD10G_LANE_LANE_93_R_RX_PCIE_GEN12_FROM_HWT_SET(x)\ 831 + FIELD_PREP(SD10G_LANE_LANE_93_R_RX_PCIE_GEN12_FROM_HWT, x) 832 + #define SD10G_LANE_LANE_93_R_RX_PCIE_GEN12_FROM_HWT_GET(x)\ 833 + FIELD_GET(SD10G_LANE_LANE_93_R_RX_PCIE_GEN12_FROM_HWT, x) 834 + 835 + /* SD10G_LANE_TARGET:LANE_GRP_5:LANE_94 */ 836 + #define SD10G_LANE_LANE_94(t) __REG(TARGET_SD10G_LANE, t, 12, 576, 0, 1, 64, 16, 0, 1, 4) 837 + 838 + #define SD10G_LANE_LANE_94_R_DWIDTHCTRL_2_0 GENMASK(2, 0) 839 + #define SD10G_LANE_LANE_94_R_DWIDTHCTRL_2_0_SET(x)\ 840 + FIELD_PREP(SD10G_LANE_LANE_94_R_DWIDTHCTRL_2_0, x) 841 + #define SD10G_LANE_LANE_94_R_DWIDTHCTRL_2_0_GET(x)\ 842 + FIELD_GET(SD10G_LANE_LANE_94_R_DWIDTHCTRL_2_0, x) 843 + 844 + #define SD10G_LANE_LANE_94_R_ISCAN_REG BIT(4) 845 + #define SD10G_LANE_LANE_94_R_ISCAN_REG_SET(x)\ 846 + FIELD_PREP(SD10G_LANE_LANE_94_R_ISCAN_REG, x) 847 + #define SD10G_LANE_LANE_94_R_ISCAN_REG_GET(x)\ 848 + FIELD_GET(SD10G_LANE_LANE_94_R_ISCAN_REG, x) 849 + 850 + #define SD10G_LANE_LANE_94_R_TXEQ_REG BIT(5) 851 + #define SD10G_LANE_LANE_94_R_TXEQ_REG_SET(x)\ 852 + FIELD_PREP(SD10G_LANE_LANE_94_R_TXEQ_REG, x) 853 + #define SD10G_LANE_LANE_94_R_TXEQ_REG_GET(x)\ 854 + FIELD_GET(SD10G_LANE_LANE_94_R_TXEQ_REG, x) 855 + 856 + #define SD10G_LANE_LANE_94_R_MISC_REG BIT(6) 857 + #define SD10G_LANE_LANE_94_R_MISC_REG_SET(x)\ 858 + FIELD_PREP(SD10G_LANE_LANE_94_R_MISC_REG, x) 859 + #define SD10G_LANE_LANE_94_R_MISC_REG_GET(x)\ 860 + FIELD_GET(SD10G_LANE_LANE_94_R_MISC_REG, x) 861 + 862 + #define SD10G_LANE_LANE_94_R_SWING_REG BIT(7) 863 + #define SD10G_LANE_LANE_94_R_SWING_REG_SET(x)\ 864 + FIELD_PREP(SD10G_LANE_LANE_94_R_SWING_REG, x) 865 + #define SD10G_LANE_LANE_94_R_SWING_REG_GET(x)\ 866 + FIELD_GET(SD10G_LANE_LANE_94_R_SWING_REG, x) 867 + 868 + /* SD10G_LANE_TARGET:LANE_GRP_5:LANE_9E */ 869 + #define SD10G_LANE_LANE_9E(t) __REG(TARGET_SD10G_LANE, t, 12, 576, 0, 1, 64, 56, 0, 1, 4) 870 + 871 + #define SD10G_LANE_LANE_9E_R_RXEQ_REG BIT(0) 872 + #define SD10G_LANE_LANE_9E_R_RXEQ_REG_SET(x)\ 873 + FIELD_PREP(SD10G_LANE_LANE_9E_R_RXEQ_REG, x) 874 + #define SD10G_LANE_LANE_9E_R_RXEQ_REG_GET(x)\ 875 + FIELD_GET(SD10G_LANE_LANE_9E_R_RXEQ_REG, x) 876 + 877 + #define SD10G_LANE_LANE_9E_R_AUTO_RST_TREE_PD_MAN BIT(1) 878 + #define SD10G_LANE_LANE_9E_R_AUTO_RST_TREE_PD_MAN_SET(x)\ 879 + FIELD_PREP(SD10G_LANE_LANE_9E_R_AUTO_RST_TREE_PD_MAN, x) 880 + #define SD10G_LANE_LANE_9E_R_AUTO_RST_TREE_PD_MAN_GET(x)\ 881 + FIELD_GET(SD10G_LANE_LANE_9E_R_AUTO_RST_TREE_PD_MAN, x) 882 + 883 + #define SD10G_LANE_LANE_9E_R_EN_AUTO_CDR_RSTN BIT(2) 884 + #define SD10G_LANE_LANE_9E_R_EN_AUTO_CDR_RSTN_SET(x)\ 885 + FIELD_PREP(SD10G_LANE_LANE_9E_R_EN_AUTO_CDR_RSTN, x) 886 + #define SD10G_LANE_LANE_9E_R_EN_AUTO_CDR_RSTN_GET(x)\ 887 + FIELD_GET(SD10G_LANE_LANE_9E_R_EN_AUTO_CDR_RSTN, x) 888 + 889 + /* SD10G_LANE_TARGET:LANE_GRP_6:LANE_A1 */ 890 + #define SD10G_LANE_LANE_A1(t) __REG(TARGET_SD10G_LANE, t, 12, 640, 0, 1, 128, 4, 0, 1, 4) 891 + 892 + #define SD10G_LANE_LANE_A1_R_PMA_TXCK_DIV_SEL_1_0 GENMASK(1, 0) 893 + #define SD10G_LANE_LANE_A1_R_PMA_TXCK_DIV_SEL_1_0_SET(x)\ 894 + FIELD_PREP(SD10G_LANE_LANE_A1_R_PMA_TXCK_DIV_SEL_1_0, x) 895 + #define SD10G_LANE_LANE_A1_R_PMA_TXCK_DIV_SEL_1_0_GET(x)\ 896 + FIELD_GET(SD10G_LANE_LANE_A1_R_PMA_TXCK_DIV_SEL_1_0, x) 897 + 898 + #define SD10G_LANE_LANE_A1_R_SSC_FROM_HWT BIT(4) 899 + #define SD10G_LANE_LANE_A1_R_SSC_FROM_HWT_SET(x)\ 900 + FIELD_PREP(SD10G_LANE_LANE_A1_R_SSC_FROM_HWT, x) 901 + #define SD10G_LANE_LANE_A1_R_SSC_FROM_HWT_GET(x)\ 902 + FIELD_GET(SD10G_LANE_LANE_A1_R_SSC_FROM_HWT, x) 903 + 904 + #define SD10G_LANE_LANE_A1_R_CDR_FROM_HWT BIT(5) 905 + #define SD10G_LANE_LANE_A1_R_CDR_FROM_HWT_SET(x)\ 906 + FIELD_PREP(SD10G_LANE_LANE_A1_R_CDR_FROM_HWT, x) 907 + #define SD10G_LANE_LANE_A1_R_CDR_FROM_HWT_GET(x)\ 908 + FIELD_GET(SD10G_LANE_LANE_A1_R_CDR_FROM_HWT, x) 909 + 910 + #define SD10G_LANE_LANE_A1_R_PCLK_GATING_FROM_HWT BIT(6) 911 + #define SD10G_LANE_LANE_A1_R_PCLK_GATING_FROM_HWT_SET(x)\ 912 + FIELD_PREP(SD10G_LANE_LANE_A1_R_PCLK_GATING_FROM_HWT, x) 913 + #define SD10G_LANE_LANE_A1_R_PCLK_GATING_FROM_HWT_GET(x)\ 914 + FIELD_GET(SD10G_LANE_LANE_A1_R_PCLK_GATING_FROM_HWT, x) 915 + 916 + #define SD10G_LANE_LANE_A1_R_PCLK_GATING BIT(7) 917 + #define SD10G_LANE_LANE_A1_R_PCLK_GATING_SET(x)\ 918 + FIELD_PREP(SD10G_LANE_LANE_A1_R_PCLK_GATING, x) 919 + #define SD10G_LANE_LANE_A1_R_PCLK_GATING_GET(x)\ 920 + FIELD_GET(SD10G_LANE_LANE_A1_R_PCLK_GATING, x) 921 + 922 + /* SD10G_LANE_TARGET:LANE_GRP_6:LANE_A2 */ 923 + #define SD10G_LANE_LANE_A2(t) __REG(TARGET_SD10G_LANE, t, 12, 640, 0, 1, 128, 8, 0, 1, 4) 924 + 925 + #define SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0 GENMASK(4, 0) 926 + #define SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0_SET(x)\ 927 + FIELD_PREP(SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0, x) 928 + #define SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0_GET(x)\ 929 + FIELD_GET(SD10G_LANE_LANE_A2_R_PCS2PMA_PHYMODE_4_0, x) 930 + 931 + /* SD10G_LANE_TARGET:LANE_GRP_8:LANE_DF */ 932 + #define SD10G_LANE_LANE_DF(t) __REG(TARGET_SD10G_LANE, t, 12, 832, 0, 1, 84, 60, 0, 1, 4) 933 + 934 + #define SD10G_LANE_LANE_DF_LOL_UDL BIT(0) 935 + #define SD10G_LANE_LANE_DF_LOL_UDL_SET(x)\ 936 + FIELD_PREP(SD10G_LANE_LANE_DF_LOL_UDL, x) 937 + #define SD10G_LANE_LANE_DF_LOL_UDL_GET(x)\ 938 + FIELD_GET(SD10G_LANE_LANE_DF_LOL_UDL, x) 939 + 940 + #define SD10G_LANE_LANE_DF_LOL BIT(1) 941 + #define SD10G_LANE_LANE_DF_LOL_SET(x)\ 942 + FIELD_PREP(SD10G_LANE_LANE_DF_LOL, x) 943 + #define SD10G_LANE_LANE_DF_LOL_GET(x)\ 944 + FIELD_GET(SD10G_LANE_LANE_DF_LOL, x) 945 + 946 + #define SD10G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED BIT(2) 947 + #define SD10G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED_SET(x)\ 948 + FIELD_PREP(SD10G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED, x) 949 + #define SD10G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED_GET(x)\ 950 + FIELD_GET(SD10G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED, x) 951 + 952 + #define SD10G_LANE_LANE_DF_SQUELCH BIT(3) 953 + #define SD10G_LANE_LANE_DF_SQUELCH_SET(x)\ 954 + FIELD_PREP(SD10G_LANE_LANE_DF_SQUELCH, x) 955 + #define SD10G_LANE_LANE_DF_SQUELCH_GET(x)\ 956 + FIELD_GET(SD10G_LANE_LANE_DF_SQUELCH, x) 957 + 958 + /* SD25G_TARGET:CMU_GRP_0:CMU_09 */ 959 + #define SD25G_LANE_CMU_09(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 36, 0, 1, 4) 960 + 961 + #define SD25G_LANE_CMU_09_CFG_REFCK_TERM_EN BIT(0) 962 + #define SD25G_LANE_CMU_09_CFG_REFCK_TERM_EN_SET(x)\ 963 + FIELD_PREP(SD25G_LANE_CMU_09_CFG_REFCK_TERM_EN, x) 964 + #define SD25G_LANE_CMU_09_CFG_REFCK_TERM_EN_GET(x)\ 965 + FIELD_GET(SD25G_LANE_CMU_09_CFG_REFCK_TERM_EN, x) 966 + 967 + #define SD25G_LANE_CMU_09_CFG_EN_DUMMY BIT(1) 968 + #define SD25G_LANE_CMU_09_CFG_EN_DUMMY_SET(x)\ 969 + FIELD_PREP(SD25G_LANE_CMU_09_CFG_EN_DUMMY, x) 970 + #define SD25G_LANE_CMU_09_CFG_EN_DUMMY_GET(x)\ 971 + FIELD_GET(SD25G_LANE_CMU_09_CFG_EN_DUMMY, x) 972 + 973 + #define SD25G_LANE_CMU_09_CFG_PLL_LOS_SET BIT(2) 974 + #define SD25G_LANE_CMU_09_CFG_PLL_LOS_SET_SET(x)\ 975 + FIELD_PREP(SD25G_LANE_CMU_09_CFG_PLL_LOS_SET, x) 976 + #define SD25G_LANE_CMU_09_CFG_PLL_LOS_SET_GET(x)\ 977 + FIELD_GET(SD25G_LANE_CMU_09_CFG_PLL_LOS_SET, x) 978 + 979 + #define SD25G_LANE_CMU_09_CFG_CTRL_LOGIC_PD BIT(3) 980 + #define SD25G_LANE_CMU_09_CFG_CTRL_LOGIC_PD_SET(x)\ 981 + FIELD_PREP(SD25G_LANE_CMU_09_CFG_CTRL_LOGIC_PD, x) 982 + #define SD25G_LANE_CMU_09_CFG_CTRL_LOGIC_PD_GET(x)\ 983 + FIELD_GET(SD25G_LANE_CMU_09_CFG_CTRL_LOGIC_PD, x) 984 + 985 + #define SD25G_LANE_CMU_09_CFG_PLL_TP_SEL_1_0 GENMASK(5, 4) 986 + #define SD25G_LANE_CMU_09_CFG_PLL_TP_SEL_1_0_SET(x)\ 987 + FIELD_PREP(SD25G_LANE_CMU_09_CFG_PLL_TP_SEL_1_0, x) 988 + #define SD25G_LANE_CMU_09_CFG_PLL_TP_SEL_1_0_GET(x)\ 989 + FIELD_GET(SD25G_LANE_CMU_09_CFG_PLL_TP_SEL_1_0, x) 990 + 991 + /* SD25G_TARGET:CMU_GRP_0:CMU_0B */ 992 + #define SD25G_LANE_CMU_0B(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 44, 0, 1, 4) 993 + 994 + #define SD25G_LANE_CMU_0B_CFG_FORCE_RX_FILT BIT(0) 995 + #define SD25G_LANE_CMU_0B_CFG_FORCE_RX_FILT_SET(x)\ 996 + FIELD_PREP(SD25G_LANE_CMU_0B_CFG_FORCE_RX_FILT, x) 997 + #define SD25G_LANE_CMU_0B_CFG_FORCE_RX_FILT_GET(x)\ 998 + FIELD_GET(SD25G_LANE_CMU_0B_CFG_FORCE_RX_FILT, x) 999 + 1000 + #define SD25G_LANE_CMU_0B_CFG_DISLOL BIT(1) 1001 + #define SD25G_LANE_CMU_0B_CFG_DISLOL_SET(x)\ 1002 + FIELD_PREP(SD25G_LANE_CMU_0B_CFG_DISLOL, x) 1003 + #define SD25G_LANE_CMU_0B_CFG_DISLOL_GET(x)\ 1004 + FIELD_GET(SD25G_LANE_CMU_0B_CFG_DISLOL, x) 1005 + 1006 + #define SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN_EN BIT(2) 1007 + #define SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN_EN_SET(x)\ 1008 + FIELD_PREP(SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN_EN, x) 1009 + #define SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN_EN_GET(x)\ 1010 + FIELD_GET(SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN_EN, x) 1011 + 1012 + #define SD25G_LANE_CMU_0B_CFG_VCO_CAL_RESETN BIT(3) 1013 + #define SD25G_LANE_CMU_0B_CFG_VCO_CAL_RESETN_SET(x)\ 1014 + FIELD_PREP(SD25G_LANE_CMU_0B_CFG_VCO_CAL_RESETN, x) 1015 + #define SD25G_LANE_CMU_0B_CFG_VCO_CAL_RESETN_GET(x)\ 1016 + FIELD_GET(SD25G_LANE_CMU_0B_CFG_VCO_CAL_RESETN, x) 1017 + 1018 + #define SD25G_LANE_CMU_0B_CFG_VFILT2PAD BIT(4) 1019 + #define SD25G_LANE_CMU_0B_CFG_VFILT2PAD_SET(x)\ 1020 + FIELD_PREP(SD25G_LANE_CMU_0B_CFG_VFILT2PAD, x) 1021 + #define SD25G_LANE_CMU_0B_CFG_VFILT2PAD_GET(x)\ 1022 + FIELD_GET(SD25G_LANE_CMU_0B_CFG_VFILT2PAD, x) 1023 + 1024 + #define SD25G_LANE_CMU_0B_CFG_DISLOS BIT(5) 1025 + #define SD25G_LANE_CMU_0B_CFG_DISLOS_SET(x)\ 1026 + FIELD_PREP(SD25G_LANE_CMU_0B_CFG_DISLOS, x) 1027 + #define SD25G_LANE_CMU_0B_CFG_DISLOS_GET(x)\ 1028 + FIELD_GET(SD25G_LANE_CMU_0B_CFG_DISLOS, x) 1029 + 1030 + #define SD25G_LANE_CMU_0B_CFG_DCLOL BIT(6) 1031 + #define SD25G_LANE_CMU_0B_CFG_DCLOL_SET(x)\ 1032 + FIELD_PREP(SD25G_LANE_CMU_0B_CFG_DCLOL, x) 1033 + #define SD25G_LANE_CMU_0B_CFG_DCLOL_GET(x)\ 1034 + FIELD_GET(SD25G_LANE_CMU_0B_CFG_DCLOL, x) 1035 + 1036 + #define SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN BIT(7) 1037 + #define SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN_SET(x)\ 1038 + FIELD_PREP(SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN, x) 1039 + #define SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN_GET(x)\ 1040 + FIELD_GET(SD25G_LANE_CMU_0B_CFG_RST_TREE_PD_MAN, x) 1041 + 1042 + /* SD25G_TARGET:CMU_GRP_0:CMU_0C */ 1043 + #define SD25G_LANE_CMU_0C(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 48, 0, 1, 4) 1044 + 1045 + #define SD25G_LANE_CMU_0C_CFG_PLL_LOL_SET BIT(0) 1046 + #define SD25G_LANE_CMU_0C_CFG_PLL_LOL_SET_SET(x)\ 1047 + FIELD_PREP(SD25G_LANE_CMU_0C_CFG_PLL_LOL_SET, x) 1048 + #define SD25G_LANE_CMU_0C_CFG_PLL_LOL_SET_GET(x)\ 1049 + FIELD_GET(SD25G_LANE_CMU_0C_CFG_PLL_LOL_SET, x) 1050 + 1051 + #define SD25G_LANE_CMU_0C_CFG_EN_TX_CK_DN BIT(1) 1052 + #define SD25G_LANE_CMU_0C_CFG_EN_TX_CK_DN_SET(x)\ 1053 + FIELD_PREP(SD25G_LANE_CMU_0C_CFG_EN_TX_CK_DN, x) 1054 + #define SD25G_LANE_CMU_0C_CFG_EN_TX_CK_DN_GET(x)\ 1055 + FIELD_GET(SD25G_LANE_CMU_0C_CFG_EN_TX_CK_DN, x) 1056 + 1057 + #define SD25G_LANE_CMU_0C_CFG_VCO_PD BIT(2) 1058 + #define SD25G_LANE_CMU_0C_CFG_VCO_PD_SET(x)\ 1059 + FIELD_PREP(SD25G_LANE_CMU_0C_CFG_VCO_PD, x) 1060 + #define SD25G_LANE_CMU_0C_CFG_VCO_PD_GET(x)\ 1061 + FIELD_GET(SD25G_LANE_CMU_0C_CFG_VCO_PD, x) 1062 + 1063 + #define SD25G_LANE_CMU_0C_CFG_EN_TX_CK_UP BIT(3) 1064 + #define SD25G_LANE_CMU_0C_CFG_EN_TX_CK_UP_SET(x)\ 1065 + FIELD_PREP(SD25G_LANE_CMU_0C_CFG_EN_TX_CK_UP, x) 1066 + #define SD25G_LANE_CMU_0C_CFG_EN_TX_CK_UP_GET(x)\ 1067 + FIELD_GET(SD25G_LANE_CMU_0C_CFG_EN_TX_CK_UP, x) 1068 + 1069 + #define SD25G_LANE_CMU_0C_CFG_VCO_DIV_MODE_1_0 GENMASK(5, 4) 1070 + #define SD25G_LANE_CMU_0C_CFG_VCO_DIV_MODE_1_0_SET(x)\ 1071 + FIELD_PREP(SD25G_LANE_CMU_0C_CFG_VCO_DIV_MODE_1_0, x) 1072 + #define SD25G_LANE_CMU_0C_CFG_VCO_DIV_MODE_1_0_GET(x)\ 1073 + FIELD_GET(SD25G_LANE_CMU_0C_CFG_VCO_DIV_MODE_1_0, x) 1074 + 1075 + /* SD25G_TARGET:CMU_GRP_0:CMU_0D */ 1076 + #define SD25G_LANE_CMU_0D(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 52, 0, 1, 4) 1077 + 1078 + #define SD25G_LANE_CMU_0D_CFG_CK_TREE_PD BIT(0) 1079 + #define SD25G_LANE_CMU_0D_CFG_CK_TREE_PD_SET(x)\ 1080 + FIELD_PREP(SD25G_LANE_CMU_0D_CFG_CK_TREE_PD, x) 1081 + #define SD25G_LANE_CMU_0D_CFG_CK_TREE_PD_GET(x)\ 1082 + FIELD_GET(SD25G_LANE_CMU_0D_CFG_CK_TREE_PD, x) 1083 + 1084 + #define SD25G_LANE_CMU_0D_CFG_EN_RX_CK_DN BIT(1) 1085 + #define SD25G_LANE_CMU_0D_CFG_EN_RX_CK_DN_SET(x)\ 1086 + FIELD_PREP(SD25G_LANE_CMU_0D_CFG_EN_RX_CK_DN, x) 1087 + #define SD25G_LANE_CMU_0D_CFG_EN_RX_CK_DN_GET(x)\ 1088 + FIELD_GET(SD25G_LANE_CMU_0D_CFG_EN_RX_CK_DN, x) 1089 + 1090 + #define SD25G_LANE_CMU_0D_CFG_EN_RX_CK_UP BIT(2) 1091 + #define SD25G_LANE_CMU_0D_CFG_EN_RX_CK_UP_SET(x)\ 1092 + FIELD_PREP(SD25G_LANE_CMU_0D_CFG_EN_RX_CK_UP, x) 1093 + #define SD25G_LANE_CMU_0D_CFG_EN_RX_CK_UP_GET(x)\ 1094 + FIELD_GET(SD25G_LANE_CMU_0D_CFG_EN_RX_CK_UP, x) 1095 + 1096 + #define SD25G_LANE_CMU_0D_CFG_VCO_CAL_BYP BIT(3) 1097 + #define SD25G_LANE_CMU_0D_CFG_VCO_CAL_BYP_SET(x)\ 1098 + FIELD_PREP(SD25G_LANE_CMU_0D_CFG_VCO_CAL_BYP, x) 1099 + #define SD25G_LANE_CMU_0D_CFG_VCO_CAL_BYP_GET(x)\ 1100 + FIELD_GET(SD25G_LANE_CMU_0D_CFG_VCO_CAL_BYP, x) 1101 + 1102 + #define SD25G_LANE_CMU_0D_CFG_PRE_DIVSEL_1_0 GENMASK(5, 4) 1103 + #define SD25G_LANE_CMU_0D_CFG_PRE_DIVSEL_1_0_SET(x)\ 1104 + FIELD_PREP(SD25G_LANE_CMU_0D_CFG_PRE_DIVSEL_1_0, x) 1105 + #define SD25G_LANE_CMU_0D_CFG_PRE_DIVSEL_1_0_GET(x)\ 1106 + FIELD_GET(SD25G_LANE_CMU_0D_CFG_PRE_DIVSEL_1_0, x) 1107 + 1108 + /* SD25G_TARGET:CMU_GRP_0:CMU_0E */ 1109 + #define SD25G_LANE_CMU_0E(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 56, 0, 1, 4) 1110 + 1111 + #define SD25G_LANE_CMU_0E_CFG_SEL_DIV_3_0 GENMASK(3, 0) 1112 + #define SD25G_LANE_CMU_0E_CFG_SEL_DIV_3_0_SET(x)\ 1113 + FIELD_PREP(SD25G_LANE_CMU_0E_CFG_SEL_DIV_3_0, x) 1114 + #define SD25G_LANE_CMU_0E_CFG_SEL_DIV_3_0_GET(x)\ 1115 + FIELD_GET(SD25G_LANE_CMU_0E_CFG_SEL_DIV_3_0, x) 1116 + 1117 + #define SD25G_LANE_CMU_0E_CFG_PMAA_CENTR_CK_PD BIT(4) 1118 + #define SD25G_LANE_CMU_0E_CFG_PMAA_CENTR_CK_PD_SET(x)\ 1119 + FIELD_PREP(SD25G_LANE_CMU_0E_CFG_PMAA_CENTR_CK_PD, x) 1120 + #define SD25G_LANE_CMU_0E_CFG_PMAA_CENTR_CK_PD_GET(x)\ 1121 + FIELD_GET(SD25G_LANE_CMU_0E_CFG_PMAA_CENTR_CK_PD, x) 1122 + 1123 + /* SD25G_TARGET:CMU_GRP_0:CMU_13 */ 1124 + #define SD25G_LANE_CMU_13(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 76, 0, 1, 4) 1125 + 1126 + #define SD25G_LANE_CMU_13_CFG_PLL_RESERVE_3_0 GENMASK(3, 0) 1127 + #define SD25G_LANE_CMU_13_CFG_PLL_RESERVE_3_0_SET(x)\ 1128 + FIELD_PREP(SD25G_LANE_CMU_13_CFG_PLL_RESERVE_3_0, x) 1129 + #define SD25G_LANE_CMU_13_CFG_PLL_RESERVE_3_0_GET(x)\ 1130 + FIELD_GET(SD25G_LANE_CMU_13_CFG_PLL_RESERVE_3_0, x) 1131 + 1132 + #define SD25G_LANE_CMU_13_CFG_JT_EN BIT(4) 1133 + #define SD25G_LANE_CMU_13_CFG_JT_EN_SET(x)\ 1134 + FIELD_PREP(SD25G_LANE_CMU_13_CFG_JT_EN, x) 1135 + #define SD25G_LANE_CMU_13_CFG_JT_EN_GET(x)\ 1136 + FIELD_GET(SD25G_LANE_CMU_13_CFG_JT_EN, x) 1137 + 1138 + /* SD25G_TARGET:CMU_GRP_0:CMU_18 */ 1139 + #define SD25G_LANE_CMU_18(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 96, 0, 1, 4) 1140 + 1141 + #define SD25G_LANE_CMU_18_R_PLL_RSTN BIT(0) 1142 + #define SD25G_LANE_CMU_18_R_PLL_RSTN_SET(x)\ 1143 + FIELD_PREP(SD25G_LANE_CMU_18_R_PLL_RSTN, x) 1144 + #define SD25G_LANE_CMU_18_R_PLL_RSTN_GET(x)\ 1145 + FIELD_GET(SD25G_LANE_CMU_18_R_PLL_RSTN, x) 1146 + 1147 + #define SD25G_LANE_CMU_18_R_PLL_LOL_SET BIT(1) 1148 + #define SD25G_LANE_CMU_18_R_PLL_LOL_SET_SET(x)\ 1149 + FIELD_PREP(SD25G_LANE_CMU_18_R_PLL_LOL_SET, x) 1150 + #define SD25G_LANE_CMU_18_R_PLL_LOL_SET_GET(x)\ 1151 + FIELD_GET(SD25G_LANE_CMU_18_R_PLL_LOL_SET, x) 1152 + 1153 + #define SD25G_LANE_CMU_18_R_PLL_LOS_SET BIT(2) 1154 + #define SD25G_LANE_CMU_18_R_PLL_LOS_SET_SET(x)\ 1155 + FIELD_PREP(SD25G_LANE_CMU_18_R_PLL_LOS_SET, x) 1156 + #define SD25G_LANE_CMU_18_R_PLL_LOS_SET_GET(x)\ 1157 + FIELD_GET(SD25G_LANE_CMU_18_R_PLL_LOS_SET, x) 1158 + 1159 + #define SD25G_LANE_CMU_18_R_PLL_TP_SEL_1_0 GENMASK(5, 4) 1160 + #define SD25G_LANE_CMU_18_R_PLL_TP_SEL_1_0_SET(x)\ 1161 + FIELD_PREP(SD25G_LANE_CMU_18_R_PLL_TP_SEL_1_0, x) 1162 + #define SD25G_LANE_CMU_18_R_PLL_TP_SEL_1_0_GET(x)\ 1163 + FIELD_GET(SD25G_LANE_CMU_18_R_PLL_TP_SEL_1_0, x) 1164 + 1165 + /* SD25G_TARGET:CMU_GRP_0:CMU_19 */ 1166 + #define SD25G_LANE_CMU_19(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 100, 0, 1, 4) 1167 + 1168 + #define SD25G_LANE_CMU_19_R_CK_RESETB BIT(0) 1169 + #define SD25G_LANE_CMU_19_R_CK_RESETB_SET(x)\ 1170 + FIELD_PREP(SD25G_LANE_CMU_19_R_CK_RESETB, x) 1171 + #define SD25G_LANE_CMU_19_R_CK_RESETB_GET(x)\ 1172 + FIELD_GET(SD25G_LANE_CMU_19_R_CK_RESETB, x) 1173 + 1174 + #define SD25G_LANE_CMU_19_R_PLL_DLOL_EN BIT(1) 1175 + #define SD25G_LANE_CMU_19_R_PLL_DLOL_EN_SET(x)\ 1176 + FIELD_PREP(SD25G_LANE_CMU_19_R_PLL_DLOL_EN, x) 1177 + #define SD25G_LANE_CMU_19_R_PLL_DLOL_EN_GET(x)\ 1178 + FIELD_GET(SD25G_LANE_CMU_19_R_PLL_DLOL_EN, x) 1179 + 1180 + /* SD25G_TARGET:CMU_GRP_0:CMU_1A */ 1181 + #define SD25G_LANE_CMU_1A(t) __REG(TARGET_SD25G_LANE, t, 8, 0, 0, 1, 132, 104, 0, 1, 4) 1182 + 1183 + #define SD25G_LANE_CMU_1A_R_DWIDTHCTRL_2_0 GENMASK(2, 0) 1184 + #define SD25G_LANE_CMU_1A_R_DWIDTHCTRL_2_0_SET(x)\ 1185 + FIELD_PREP(SD25G_LANE_CMU_1A_R_DWIDTHCTRL_2_0, x) 1186 + #define SD25G_LANE_CMU_1A_R_DWIDTHCTRL_2_0_GET(x)\ 1187 + FIELD_GET(SD25G_LANE_CMU_1A_R_DWIDTHCTRL_2_0, x) 1188 + 1189 + #define SD25G_LANE_CMU_1A_R_DWIDTHCTRL_FROM_HWT BIT(4) 1190 + #define SD25G_LANE_CMU_1A_R_DWIDTHCTRL_FROM_HWT_SET(x)\ 1191 + FIELD_PREP(SD25G_LANE_CMU_1A_R_DWIDTHCTRL_FROM_HWT, x) 1192 + #define SD25G_LANE_CMU_1A_R_DWIDTHCTRL_FROM_HWT_GET(x)\ 1193 + FIELD_GET(SD25G_LANE_CMU_1A_R_DWIDTHCTRL_FROM_HWT, x) 1194 + 1195 + #define SD25G_LANE_CMU_1A_R_MASK_EI_SOURCE BIT(5) 1196 + #define SD25G_LANE_CMU_1A_R_MASK_EI_SOURCE_SET(x)\ 1197 + FIELD_PREP(SD25G_LANE_CMU_1A_R_MASK_EI_SOURCE, x) 1198 + #define SD25G_LANE_CMU_1A_R_MASK_EI_SOURCE_GET(x)\ 1199 + FIELD_GET(SD25G_LANE_CMU_1A_R_MASK_EI_SOURCE, x) 1200 + 1201 + #define SD25G_LANE_CMU_1A_R_REG_MANUAL BIT(6) 1202 + #define SD25G_LANE_CMU_1A_R_REG_MANUAL_SET(x)\ 1203 + FIELD_PREP(SD25G_LANE_CMU_1A_R_REG_MANUAL, x) 1204 + #define SD25G_LANE_CMU_1A_R_REG_MANUAL_GET(x)\ 1205 + FIELD_GET(SD25G_LANE_CMU_1A_R_REG_MANUAL, x) 1206 + 1207 + /* SD25G_TARGET:CMU_GRP_1:CMU_2A */ 1208 + #define SD25G_LANE_CMU_2A(t) __REG(TARGET_SD25G_LANE, t, 8, 132, 0, 1, 124, 36, 0, 1, 4) 1209 + 1210 + #define SD25G_LANE_CMU_2A_R_DBG_SEL_1_0 GENMASK(1, 0) 1211 + #define SD25G_LANE_CMU_2A_R_DBG_SEL_1_0_SET(x)\ 1212 + FIELD_PREP(SD25G_LANE_CMU_2A_R_DBG_SEL_1_0, x) 1213 + #define SD25G_LANE_CMU_2A_R_DBG_SEL_1_0_GET(x)\ 1214 + FIELD_GET(SD25G_LANE_CMU_2A_R_DBG_SEL_1_0, x) 1215 + 1216 + #define SD25G_LANE_CMU_2A_R_DBG_LINK_LANE BIT(4) 1217 + #define SD25G_LANE_CMU_2A_R_DBG_LINK_LANE_SET(x)\ 1218 + FIELD_PREP(SD25G_LANE_CMU_2A_R_DBG_LINK_LANE, x) 1219 + #define SD25G_LANE_CMU_2A_R_DBG_LINK_LANE_GET(x)\ 1220 + FIELD_GET(SD25G_LANE_CMU_2A_R_DBG_LINK_LANE, x) 1221 + 1222 + #define SD25G_LANE_CMU_2A_R_DBG_LOL_STATUS BIT(5) 1223 + #define SD25G_LANE_CMU_2A_R_DBG_LOL_STATUS_SET(x)\ 1224 + FIELD_PREP(SD25G_LANE_CMU_2A_R_DBG_LOL_STATUS, x) 1225 + #define SD25G_LANE_CMU_2A_R_DBG_LOL_STATUS_GET(x)\ 1226 + FIELD_GET(SD25G_LANE_CMU_2A_R_DBG_LOL_STATUS, x) 1227 + 1228 + /* SD25G_TARGET:CMU_GRP_1:CMU_30 */ 1229 + #define SD25G_LANE_CMU_30(t) __REG(TARGET_SD25G_LANE, t, 8, 132, 0, 1, 124, 60, 0, 1, 4) 1230 + 1231 + #define SD25G_LANE_CMU_30_R_TXFIFO_CK_DIV_PMAD_2_0 GENMASK(2, 0) 1232 + #define SD25G_LANE_CMU_30_R_TXFIFO_CK_DIV_PMAD_2_0_SET(x)\ 1233 + FIELD_PREP(SD25G_LANE_CMU_30_R_TXFIFO_CK_DIV_PMAD_2_0, x) 1234 + #define SD25G_LANE_CMU_30_R_TXFIFO_CK_DIV_PMAD_2_0_GET(x)\ 1235 + FIELD_GET(SD25G_LANE_CMU_30_R_TXFIFO_CK_DIV_PMAD_2_0, x) 1236 + 1237 + #define SD25G_LANE_CMU_30_R_RXFIFO_CK_DIV_PMAD_2_0 GENMASK(6, 4) 1238 + #define SD25G_LANE_CMU_30_R_RXFIFO_CK_DIV_PMAD_2_0_SET(x)\ 1239 + FIELD_PREP(SD25G_LANE_CMU_30_R_RXFIFO_CK_DIV_PMAD_2_0, x) 1240 + #define SD25G_LANE_CMU_30_R_RXFIFO_CK_DIV_PMAD_2_0_GET(x)\ 1241 + FIELD_GET(SD25G_LANE_CMU_30_R_RXFIFO_CK_DIV_PMAD_2_0, x) 1242 + 1243 + /* SD25G_TARGET:CMU_GRP_1:CMU_31 */ 1244 + #define SD25G_LANE_CMU_31(t) __REG(TARGET_SD25G_LANE, t, 8, 132, 0, 1, 124, 64, 0, 1, 4) 1245 + 1246 + #define SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0 GENMASK(7, 0) 1247 + #define SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0_SET(x)\ 1248 + FIELD_PREP(SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0, x) 1249 + #define SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0_GET(x)\ 1250 + FIELD_GET(SD25G_LANE_CMU_31_CFG_COMMON_RESERVE_7_0, x) 1251 + 1252 + /* SD25G_TARGET:CMU_GRP_2:CMU_40 */ 1253 + #define SD25G_LANE_CMU_40(t) __REG(TARGET_SD25G_LANE, t, 8, 256, 0, 1, 512, 0, 0, 1, 4) 1254 + 1255 + #define SD25G_LANE_CMU_40_L0_CFG_CKSKEW_CTRL BIT(0) 1256 + #define SD25G_LANE_CMU_40_L0_CFG_CKSKEW_CTRL_SET(x)\ 1257 + FIELD_PREP(SD25G_LANE_CMU_40_L0_CFG_CKSKEW_CTRL, x) 1258 + #define SD25G_LANE_CMU_40_L0_CFG_CKSKEW_CTRL_GET(x)\ 1259 + FIELD_GET(SD25G_LANE_CMU_40_L0_CFG_CKSKEW_CTRL, x) 1260 + 1261 + #define SD25G_LANE_CMU_40_L0_CFG_ISCAN_HOLD BIT(1) 1262 + #define SD25G_LANE_CMU_40_L0_CFG_ISCAN_HOLD_SET(x)\ 1263 + FIELD_PREP(SD25G_LANE_CMU_40_L0_CFG_ISCAN_HOLD, x) 1264 + #define SD25G_LANE_CMU_40_L0_CFG_ISCAN_HOLD_GET(x)\ 1265 + FIELD_GET(SD25G_LANE_CMU_40_L0_CFG_ISCAN_HOLD, x) 1266 + 1267 + #define SD25G_LANE_CMU_40_L0_CFG_PD_CLK BIT(2) 1268 + #define SD25G_LANE_CMU_40_L0_CFG_PD_CLK_SET(x)\ 1269 + FIELD_PREP(SD25G_LANE_CMU_40_L0_CFG_PD_CLK, x) 1270 + #define SD25G_LANE_CMU_40_L0_CFG_PD_CLK_GET(x)\ 1271 + FIELD_GET(SD25G_LANE_CMU_40_L0_CFG_PD_CLK, x) 1272 + 1273 + #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_EN BIT(3) 1274 + #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_EN_SET(x)\ 1275 + FIELD_PREP(SD25G_LANE_CMU_40_L0_CFG_TXCAL_EN, x) 1276 + #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_EN_GET(x)\ 1277 + FIELD_GET(SD25G_LANE_CMU_40_L0_CFG_TXCAL_EN, x) 1278 + 1279 + #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_MAN_EN BIT(4) 1280 + #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_MAN_EN_SET(x)\ 1281 + FIELD_PREP(SD25G_LANE_CMU_40_L0_CFG_TXCAL_MAN_EN, x) 1282 + #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_MAN_EN_GET(x)\ 1283 + FIELD_GET(SD25G_LANE_CMU_40_L0_CFG_TXCAL_MAN_EN, x) 1284 + 1285 + #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_RST BIT(5) 1286 + #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_RST_SET(x)\ 1287 + FIELD_PREP(SD25G_LANE_CMU_40_L0_CFG_TXCAL_RST, x) 1288 + #define SD25G_LANE_CMU_40_L0_CFG_TXCAL_RST_GET(x)\ 1289 + FIELD_GET(SD25G_LANE_CMU_40_L0_CFG_TXCAL_RST, x) 1290 + 1291 + /* SD25G_TARGET:CMU_GRP_2:CMU_45 */ 1292 + #define SD25G_LANE_CMU_45(t) __REG(TARGET_SD25G_LANE, t, 8, 256, 0, 1, 512, 20, 0, 1, 4) 1293 + 1294 + #define SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0 GENMASK(7, 0) 1295 + #define SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0_SET(x)\ 1296 + FIELD_PREP(SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0, x) 1297 + #define SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0_GET(x)\ 1298 + FIELD_GET(SD25G_LANE_CMU_45_L0_CFG_TX_RESERVE_7_0, x) 1299 + 1300 + /* SD25G_TARGET:CMU_GRP_2:CMU_46 */ 1301 + #define SD25G_LANE_CMU_46(t) __REG(TARGET_SD25G_LANE, t, 8, 256, 0, 1, 512, 24, 0, 1, 4) 1302 + 1303 + #define SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8 GENMASK(7, 0) 1304 + #define SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8_SET(x)\ 1305 + FIELD_PREP(SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8, x) 1306 + #define SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8_GET(x)\ 1307 + FIELD_GET(SD25G_LANE_CMU_46_L0_CFG_TX_RESERVE_15_8, x) 1308 + 1309 + /* SD25G_TARGET:CMU_GRP_3:CMU_C0 */ 1310 + #define SD25G_LANE_CMU_C0(t) __REG(TARGET_SD25G_LANE, t, 8, 768, 0, 1, 252, 0, 0, 1, 4) 1311 + 1312 + #define SD25G_LANE_CMU_C0_READ_VCO_CTUNE_3_0 GENMASK(3, 0) 1313 + #define SD25G_LANE_CMU_C0_READ_VCO_CTUNE_3_0_SET(x)\ 1314 + FIELD_PREP(SD25G_LANE_CMU_C0_READ_VCO_CTUNE_3_0, x) 1315 + #define SD25G_LANE_CMU_C0_READ_VCO_CTUNE_3_0_GET(x)\ 1316 + FIELD_GET(SD25G_LANE_CMU_C0_READ_VCO_CTUNE_3_0, x) 1317 + 1318 + #define SD25G_LANE_CMU_C0_PLL_LOL_UDL BIT(4) 1319 + #define SD25G_LANE_CMU_C0_PLL_LOL_UDL_SET(x)\ 1320 + FIELD_PREP(SD25G_LANE_CMU_C0_PLL_LOL_UDL, x) 1321 + #define SD25G_LANE_CMU_C0_PLL_LOL_UDL_GET(x)\ 1322 + FIELD_GET(SD25G_LANE_CMU_C0_PLL_LOL_UDL, x) 1323 + 1324 + /* SD25G_TARGET:CMU_GRP_4:CMU_FF */ 1325 + #define SD25G_LANE_CMU_FF(t) __REG(TARGET_SD25G_LANE, t, 8, 1020, 0, 1, 4, 0, 0, 1, 4) 1326 + 1327 + #define SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX GENMASK(7, 0) 1328 + #define SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX_SET(x)\ 1329 + FIELD_PREP(SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX, x) 1330 + #define SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX_GET(x)\ 1331 + FIELD_GET(SD25G_LANE_CMU_FF_REGISTER_TABLE_INDEX, x) 1332 + 1333 + /* SD25G_TARGET:LANE_GRP_0:LANE_00 */ 1334 + #define SD25G_LANE_LANE_00(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 0, 0, 1, 4) 1335 + 1336 + #define SD25G_LANE_LANE_00_LN_CFG_ITX_VC_DRIVER_3_0 GENMASK(3, 0) 1337 + #define SD25G_LANE_LANE_00_LN_CFG_ITX_VC_DRIVER_3_0_SET(x)\ 1338 + FIELD_PREP(SD25G_LANE_LANE_00_LN_CFG_ITX_VC_DRIVER_3_0, x) 1339 + #define SD25G_LANE_LANE_00_LN_CFG_ITX_VC_DRIVER_3_0_GET(x)\ 1340 + FIELD_GET(SD25G_LANE_LANE_00_LN_CFG_ITX_VC_DRIVER_3_0, x) 1341 + 1342 + #define SD25G_LANE_LANE_00_LN_CFG_ITX_IPCML_BASE_1_0 GENMASK(5, 4) 1343 + #define SD25G_LANE_LANE_00_LN_CFG_ITX_IPCML_BASE_1_0_SET(x)\ 1344 + FIELD_PREP(SD25G_LANE_LANE_00_LN_CFG_ITX_IPCML_BASE_1_0, x) 1345 + #define SD25G_LANE_LANE_00_LN_CFG_ITX_IPCML_BASE_1_0_GET(x)\ 1346 + FIELD_GET(SD25G_LANE_LANE_00_LN_CFG_ITX_IPCML_BASE_1_0, x) 1347 + 1348 + /* SD25G_TARGET:LANE_GRP_0:LANE_01 */ 1349 + #define SD25G_LANE_LANE_01(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 4, 0, 1, 4) 1350 + 1351 + #define SD25G_LANE_LANE_01_LN_CFG_ITX_IPDRIVER_BASE_2_0 GENMASK(2, 0) 1352 + #define SD25G_LANE_LANE_01_LN_CFG_ITX_IPDRIVER_BASE_2_0_SET(x)\ 1353 + FIELD_PREP(SD25G_LANE_LANE_01_LN_CFG_ITX_IPDRIVER_BASE_2_0, x) 1354 + #define SD25G_LANE_LANE_01_LN_CFG_ITX_IPDRIVER_BASE_2_0_GET(x)\ 1355 + FIELD_GET(SD25G_LANE_LANE_01_LN_CFG_ITX_IPDRIVER_BASE_2_0, x) 1356 + 1357 + #define SD25G_LANE_LANE_01_LN_CFG_TX_PREDIV_1_0 GENMASK(5, 4) 1358 + #define SD25G_LANE_LANE_01_LN_CFG_TX_PREDIV_1_0_SET(x)\ 1359 + FIELD_PREP(SD25G_LANE_LANE_01_LN_CFG_TX_PREDIV_1_0, x) 1360 + #define SD25G_LANE_LANE_01_LN_CFG_TX_PREDIV_1_0_GET(x)\ 1361 + FIELD_GET(SD25G_LANE_LANE_01_LN_CFG_TX_PREDIV_1_0, x) 1362 + 1363 + /* SD25G_TARGET:LANE_GRP_0:LANE_03 */ 1364 + #define SD25G_LANE_LANE_03(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 12, 0, 1, 4) 1365 + 1366 + #define SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0 GENMASK(4, 0) 1367 + #define SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0_SET(x)\ 1368 + FIELD_PREP(SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0, x) 1369 + #define SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0_GET(x)\ 1370 + FIELD_GET(SD25G_LANE_LANE_03_LN_CFG_TAP_DLY_4_0, x) 1371 + 1372 + /* SD25G_TARGET:LANE_GRP_0:LANE_04 */ 1373 + #define SD25G_LANE_LANE_04(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 16, 0, 1, 4) 1374 + 1375 + #define SD25G_LANE_LANE_04_LN_CFG_TX2RX_LP_EN BIT(0) 1376 + #define SD25G_LANE_LANE_04_LN_CFG_TX2RX_LP_EN_SET(x)\ 1377 + FIELD_PREP(SD25G_LANE_LANE_04_LN_CFG_TX2RX_LP_EN, x) 1378 + #define SD25G_LANE_LANE_04_LN_CFG_TX2RX_LP_EN_GET(x)\ 1379 + FIELD_GET(SD25G_LANE_LANE_04_LN_CFG_TX2RX_LP_EN, x) 1380 + 1381 + #define SD25G_LANE_LANE_04_LN_CFG_RX2TX_LP_EN BIT(1) 1382 + #define SD25G_LANE_LANE_04_LN_CFG_RX2TX_LP_EN_SET(x)\ 1383 + FIELD_PREP(SD25G_LANE_LANE_04_LN_CFG_RX2TX_LP_EN, x) 1384 + #define SD25G_LANE_LANE_04_LN_CFG_RX2TX_LP_EN_GET(x)\ 1385 + FIELD_GET(SD25G_LANE_LANE_04_LN_CFG_RX2TX_LP_EN, x) 1386 + 1387 + #define SD25G_LANE_LANE_04_LN_CFG_PD_CML BIT(2) 1388 + #define SD25G_LANE_LANE_04_LN_CFG_PD_CML_SET(x)\ 1389 + FIELD_PREP(SD25G_LANE_LANE_04_LN_CFG_PD_CML, x) 1390 + #define SD25G_LANE_LANE_04_LN_CFG_PD_CML_GET(x)\ 1391 + FIELD_GET(SD25G_LANE_LANE_04_LN_CFG_PD_CML, x) 1392 + 1393 + #define SD25G_LANE_LANE_04_LN_CFG_PD_CLK BIT(3) 1394 + #define SD25G_LANE_LANE_04_LN_CFG_PD_CLK_SET(x)\ 1395 + FIELD_PREP(SD25G_LANE_LANE_04_LN_CFG_PD_CLK, x) 1396 + #define SD25G_LANE_LANE_04_LN_CFG_PD_CLK_GET(x)\ 1397 + FIELD_GET(SD25G_LANE_LANE_04_LN_CFG_PD_CLK, x) 1398 + 1399 + #define SD25G_LANE_LANE_04_LN_CFG_PD_DRIVER BIT(4) 1400 + #define SD25G_LANE_LANE_04_LN_CFG_PD_DRIVER_SET(x)\ 1401 + FIELD_PREP(SD25G_LANE_LANE_04_LN_CFG_PD_DRIVER, x) 1402 + #define SD25G_LANE_LANE_04_LN_CFG_PD_DRIVER_GET(x)\ 1403 + FIELD_GET(SD25G_LANE_LANE_04_LN_CFG_PD_DRIVER, x) 1404 + 1405 + #define SD25G_LANE_LANE_04_LN_CFG_TAP_MAIN BIT(5) 1406 + #define SD25G_LANE_LANE_04_LN_CFG_TAP_MAIN_SET(x)\ 1407 + FIELD_PREP(SD25G_LANE_LANE_04_LN_CFG_TAP_MAIN, x) 1408 + #define SD25G_LANE_LANE_04_LN_CFG_TAP_MAIN_GET(x)\ 1409 + FIELD_GET(SD25G_LANE_LANE_04_LN_CFG_TAP_MAIN, x) 1410 + 1411 + /* SD25G_TARGET:LANE_GRP_0:LANE_05 */ 1412 + #define SD25G_LANE_LANE_05(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 20, 0, 1, 4) 1413 + 1414 + #define SD25G_LANE_LANE_05_LN_CFG_TAP_DLY2_3_0 GENMASK(3, 0) 1415 + #define SD25G_LANE_LANE_05_LN_CFG_TAP_DLY2_3_0_SET(x)\ 1416 + FIELD_PREP(SD25G_LANE_LANE_05_LN_CFG_TAP_DLY2_3_0, x) 1417 + #define SD25G_LANE_LANE_05_LN_CFG_TAP_DLY2_3_0_GET(x)\ 1418 + FIELD_GET(SD25G_LANE_LANE_05_LN_CFG_TAP_DLY2_3_0, x) 1419 + 1420 + #define SD25G_LANE_LANE_05_LN_CFG_BW_1_0 GENMASK(5, 4) 1421 + #define SD25G_LANE_LANE_05_LN_CFG_BW_1_0_SET(x)\ 1422 + FIELD_PREP(SD25G_LANE_LANE_05_LN_CFG_BW_1_0, x) 1423 + #define SD25G_LANE_LANE_05_LN_CFG_BW_1_0_GET(x)\ 1424 + FIELD_GET(SD25G_LANE_LANE_05_LN_CFG_BW_1_0, x) 1425 + 1426 + /* SD25G_TARGET:LANE_GRP_0:LANE_06 */ 1427 + #define SD25G_LANE_LANE_06(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 24, 0, 1, 4) 1428 + 1429 + #define SD25G_LANE_LANE_06_LN_CFG_EN_MAIN BIT(0) 1430 + #define SD25G_LANE_LANE_06_LN_CFG_EN_MAIN_SET(x)\ 1431 + FIELD_PREP(SD25G_LANE_LANE_06_LN_CFG_EN_MAIN, x) 1432 + #define SD25G_LANE_LANE_06_LN_CFG_EN_MAIN_GET(x)\ 1433 + FIELD_GET(SD25G_LANE_LANE_06_LN_CFG_EN_MAIN, x) 1434 + 1435 + #define SD25G_LANE_LANE_06_LN_CFG_TAP_ADV_3_0 GENMASK(7, 4) 1436 + #define SD25G_LANE_LANE_06_LN_CFG_TAP_ADV_3_0_SET(x)\ 1437 + FIELD_PREP(SD25G_LANE_LANE_06_LN_CFG_TAP_ADV_3_0, x) 1438 + #define SD25G_LANE_LANE_06_LN_CFG_TAP_ADV_3_0_GET(x)\ 1439 + FIELD_GET(SD25G_LANE_LANE_06_LN_CFG_TAP_ADV_3_0, x) 1440 + 1441 + /* SD25G_TARGET:LANE_GRP_0:LANE_07 */ 1442 + #define SD25G_LANE_LANE_07(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 28, 0, 1, 4) 1443 + 1444 + #define SD25G_LANE_LANE_07_LN_CFG_EN_ADV BIT(0) 1445 + #define SD25G_LANE_LANE_07_LN_CFG_EN_ADV_SET(x)\ 1446 + FIELD_PREP(SD25G_LANE_LANE_07_LN_CFG_EN_ADV, x) 1447 + #define SD25G_LANE_LANE_07_LN_CFG_EN_ADV_GET(x)\ 1448 + FIELD_GET(SD25G_LANE_LANE_07_LN_CFG_EN_ADV, x) 1449 + 1450 + #define SD25G_LANE_LANE_07_LN_CFG_EN_DLY2 BIT(1) 1451 + #define SD25G_LANE_LANE_07_LN_CFG_EN_DLY2_SET(x)\ 1452 + FIELD_PREP(SD25G_LANE_LANE_07_LN_CFG_EN_DLY2, x) 1453 + #define SD25G_LANE_LANE_07_LN_CFG_EN_DLY2_GET(x)\ 1454 + FIELD_GET(SD25G_LANE_LANE_07_LN_CFG_EN_DLY2, x) 1455 + 1456 + #define SD25G_LANE_LANE_07_LN_CFG_EN_DLY BIT(2) 1457 + #define SD25G_LANE_LANE_07_LN_CFG_EN_DLY_SET(x)\ 1458 + FIELD_PREP(SD25G_LANE_LANE_07_LN_CFG_EN_DLY, x) 1459 + #define SD25G_LANE_LANE_07_LN_CFG_EN_DLY_GET(x)\ 1460 + FIELD_GET(SD25G_LANE_LANE_07_LN_CFG_EN_DLY, x) 1461 + 1462 + /* SD25G_TARGET:LANE_GRP_0:LANE_09 */ 1463 + #define SD25G_LANE_LANE_09(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 36, 0, 1, 4) 1464 + 1465 + #define SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0 GENMASK(3, 0) 1466 + #define SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0_SET(x)\ 1467 + FIELD_PREP(SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0, x) 1468 + #define SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0_GET(x)\ 1469 + FIELD_GET(SD25G_LANE_LANE_09_LN_CFG_TXCAL_VALID_SEL_3_0, x) 1470 + 1471 + /* SD25G_TARGET:LANE_GRP_0:LANE_0A */ 1472 + #define SD25G_LANE_LANE_0A(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 40, 0, 1, 4) 1473 + 1474 + #define SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0 GENMASK(5, 0) 1475 + #define SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0_SET(x)\ 1476 + FIELD_PREP(SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0, x) 1477 + #define SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0_GET(x)\ 1478 + FIELD_GET(SD25G_LANE_LANE_0A_LN_CFG_TXCAL_SHIFT_CODE_5_0, x) 1479 + 1480 + /* SD25G_TARGET:LANE_GRP_0:LANE_0B */ 1481 + #define SD25G_LANE_LANE_0B(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 44, 0, 1, 4) 1482 + 1483 + #define SD25G_LANE_LANE_0B_LN_CFG_TXCAL_MAN_EN BIT(0) 1484 + #define SD25G_LANE_LANE_0B_LN_CFG_TXCAL_MAN_EN_SET(x)\ 1485 + FIELD_PREP(SD25G_LANE_LANE_0B_LN_CFG_TXCAL_MAN_EN, x) 1486 + #define SD25G_LANE_LANE_0B_LN_CFG_TXCAL_MAN_EN_GET(x)\ 1487 + FIELD_GET(SD25G_LANE_LANE_0B_LN_CFG_TXCAL_MAN_EN, x) 1488 + 1489 + #define SD25G_LANE_LANE_0B_LN_CFG_TXCAL_RST BIT(1) 1490 + #define SD25G_LANE_LANE_0B_LN_CFG_TXCAL_RST_SET(x)\ 1491 + FIELD_PREP(SD25G_LANE_LANE_0B_LN_CFG_TXCAL_RST, x) 1492 + #define SD25G_LANE_LANE_0B_LN_CFG_TXCAL_RST_GET(x)\ 1493 + FIELD_GET(SD25G_LANE_LANE_0B_LN_CFG_TXCAL_RST, x) 1494 + 1495 + #define SD25G_LANE_LANE_0B_LN_CFG_QUAD_MAN_1_0 GENMASK(5, 4) 1496 + #define SD25G_LANE_LANE_0B_LN_CFG_QUAD_MAN_1_0_SET(x)\ 1497 + FIELD_PREP(SD25G_LANE_LANE_0B_LN_CFG_QUAD_MAN_1_0, x) 1498 + #define SD25G_LANE_LANE_0B_LN_CFG_QUAD_MAN_1_0_GET(x)\ 1499 + FIELD_GET(SD25G_LANE_LANE_0B_LN_CFG_QUAD_MAN_1_0, x) 1500 + 1501 + /* SD25G_TARGET:LANE_GRP_0:LANE_0C */ 1502 + #define SD25G_LANE_LANE_0C(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 48, 0, 1, 4) 1503 + 1504 + #define SD25G_LANE_LANE_0C_LN_CFG_PMA_TX_CK_BITWIDTH_2_0 GENMASK(2, 0) 1505 + #define SD25G_LANE_LANE_0C_LN_CFG_PMA_TX_CK_BITWIDTH_2_0_SET(x)\ 1506 + FIELD_PREP(SD25G_LANE_LANE_0C_LN_CFG_PMA_TX_CK_BITWIDTH_2_0, x) 1507 + #define SD25G_LANE_LANE_0C_LN_CFG_PMA_TX_CK_BITWIDTH_2_0_GET(x)\ 1508 + FIELD_GET(SD25G_LANE_LANE_0C_LN_CFG_PMA_TX_CK_BITWIDTH_2_0, x) 1509 + 1510 + #define SD25G_LANE_LANE_0C_LN_CFG_TXCAL_EN BIT(4) 1511 + #define SD25G_LANE_LANE_0C_LN_CFG_TXCAL_EN_SET(x)\ 1512 + FIELD_PREP(SD25G_LANE_LANE_0C_LN_CFG_TXCAL_EN, x) 1513 + #define SD25G_LANE_LANE_0C_LN_CFG_TXCAL_EN_GET(x)\ 1514 + FIELD_GET(SD25G_LANE_LANE_0C_LN_CFG_TXCAL_EN, x) 1515 + 1516 + #define SD25G_LANE_LANE_0C_LN_CFG_RXTERM_PD BIT(5) 1517 + #define SD25G_LANE_LANE_0C_LN_CFG_RXTERM_PD_SET(x)\ 1518 + FIELD_PREP(SD25G_LANE_LANE_0C_LN_CFG_RXTERM_PD, x) 1519 + #define SD25G_LANE_LANE_0C_LN_CFG_RXTERM_PD_GET(x)\ 1520 + FIELD_GET(SD25G_LANE_LANE_0C_LN_CFG_RXTERM_PD, x) 1521 + 1522 + /* SD25G_TARGET:LANE_GRP_0:LANE_0D */ 1523 + #define SD25G_LANE_LANE_0D(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 52, 0, 1, 4) 1524 + 1525 + #define SD25G_LANE_LANE_0D_LN_CFG_RXTERM_2_0 GENMASK(2, 0) 1526 + #define SD25G_LANE_LANE_0D_LN_CFG_RXTERM_2_0_SET(x)\ 1527 + FIELD_PREP(SD25G_LANE_LANE_0D_LN_CFG_RXTERM_2_0, x) 1528 + #define SD25G_LANE_LANE_0D_LN_CFG_RXTERM_2_0_GET(x)\ 1529 + FIELD_GET(SD25G_LANE_LANE_0D_LN_CFG_RXTERM_2_0, x) 1530 + 1531 + #define SD25G_LANE_LANE_0D_LN_CFG_RSTN_DIV5_8 BIT(4) 1532 + #define SD25G_LANE_LANE_0D_LN_CFG_RSTN_DIV5_8_SET(x)\ 1533 + FIELD_PREP(SD25G_LANE_LANE_0D_LN_CFG_RSTN_DIV5_8, x) 1534 + #define SD25G_LANE_LANE_0D_LN_CFG_RSTN_DIV5_8_GET(x)\ 1535 + FIELD_GET(SD25G_LANE_LANE_0D_LN_CFG_RSTN_DIV5_8, x) 1536 + 1537 + #define SD25G_LANE_LANE_0D_LN_CFG_SUMMER_EN BIT(5) 1538 + #define SD25G_LANE_LANE_0D_LN_CFG_SUMMER_EN_SET(x)\ 1539 + FIELD_PREP(SD25G_LANE_LANE_0D_LN_CFG_SUMMER_EN, x) 1540 + #define SD25G_LANE_LANE_0D_LN_CFG_SUMMER_EN_GET(x)\ 1541 + FIELD_GET(SD25G_LANE_LANE_0D_LN_CFG_SUMMER_EN, x) 1542 + 1543 + #define SD25G_LANE_LANE_0D_LN_CFG_DMUX_PD BIT(6) 1544 + #define SD25G_LANE_LANE_0D_LN_CFG_DMUX_PD_SET(x)\ 1545 + FIELD_PREP(SD25G_LANE_LANE_0D_LN_CFG_DMUX_PD, x) 1546 + #define SD25G_LANE_LANE_0D_LN_CFG_DMUX_PD_GET(x)\ 1547 + FIELD_GET(SD25G_LANE_LANE_0D_LN_CFG_DMUX_PD, x) 1548 + 1549 + #define SD25G_LANE_LANE_0D_LN_CFG_DFECK_EN BIT(7) 1550 + #define SD25G_LANE_LANE_0D_LN_CFG_DFECK_EN_SET(x)\ 1551 + FIELD_PREP(SD25G_LANE_LANE_0D_LN_CFG_DFECK_EN, x) 1552 + #define SD25G_LANE_LANE_0D_LN_CFG_DFECK_EN_GET(x)\ 1553 + FIELD_GET(SD25G_LANE_LANE_0D_LN_CFG_DFECK_EN, x) 1554 + 1555 + /* SD25G_TARGET:LANE_GRP_0:LANE_0E */ 1556 + #define SD25G_LANE_LANE_0E(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 56, 0, 1, 4) 1557 + 1558 + #define SD25G_LANE_LANE_0E_LN_CFG_ISCAN_EN BIT(0) 1559 + #define SD25G_LANE_LANE_0E_LN_CFG_ISCAN_EN_SET(x)\ 1560 + FIELD_PREP(SD25G_LANE_LANE_0E_LN_CFG_ISCAN_EN, x) 1561 + #define SD25G_LANE_LANE_0E_LN_CFG_ISCAN_EN_GET(x)\ 1562 + FIELD_GET(SD25G_LANE_LANE_0E_LN_CFG_ISCAN_EN, x) 1563 + 1564 + #define SD25G_LANE_LANE_0E_LN_CFG_DMUX_CLK_PD BIT(1) 1565 + #define SD25G_LANE_LANE_0E_LN_CFG_DMUX_CLK_PD_SET(x)\ 1566 + FIELD_PREP(SD25G_LANE_LANE_0E_LN_CFG_DMUX_CLK_PD, x) 1567 + #define SD25G_LANE_LANE_0E_LN_CFG_DMUX_CLK_PD_GET(x)\ 1568 + FIELD_GET(SD25G_LANE_LANE_0E_LN_CFG_DMUX_CLK_PD, x) 1569 + 1570 + #define SD25G_LANE_LANE_0E_LN_CFG_EN_DFEDIG BIT(2) 1571 + #define SD25G_LANE_LANE_0E_LN_CFG_EN_DFEDIG_SET(x)\ 1572 + FIELD_PREP(SD25G_LANE_LANE_0E_LN_CFG_EN_DFEDIG, x) 1573 + #define SD25G_LANE_LANE_0E_LN_CFG_EN_DFEDIG_GET(x)\ 1574 + FIELD_GET(SD25G_LANE_LANE_0E_LN_CFG_EN_DFEDIG, x) 1575 + 1576 + #define SD25G_LANE_LANE_0E_LN_CFG_DFEDIG_M_2_0 GENMASK(6, 4) 1577 + #define SD25G_LANE_LANE_0E_LN_CFG_DFEDIG_M_2_0_SET(x)\ 1578 + FIELD_PREP(SD25G_LANE_LANE_0E_LN_CFG_DFEDIG_M_2_0, x) 1579 + #define SD25G_LANE_LANE_0E_LN_CFG_DFEDIG_M_2_0_GET(x)\ 1580 + FIELD_GET(SD25G_LANE_LANE_0E_LN_CFG_DFEDIG_M_2_0, x) 1581 + 1582 + /* SD25G_TARGET:LANE_GRP_0:LANE_0F */ 1583 + #define SD25G_LANE_LANE_0F(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 60, 0, 1, 4) 1584 + 1585 + #define SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1 GENMASK(4, 0) 1586 + #define SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1_SET(x)\ 1587 + FIELD_PREP(SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1, x) 1588 + #define SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1_GET(x)\ 1589 + FIELD_GET(SD25G_LANE_LANE_0F_LN_CFG_DFETAP_EN_5_1, x) 1590 + 1591 + /* SD25G_TARGET:LANE_GRP_0:LANE_18 */ 1592 + #define SD25G_LANE_LANE_18(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 96, 0, 1, 4) 1593 + 1594 + #define SD25G_LANE_LANE_18_LN_CFG_CDRCK_EN BIT(0) 1595 + #define SD25G_LANE_LANE_18_LN_CFG_CDRCK_EN_SET(x)\ 1596 + FIELD_PREP(SD25G_LANE_LANE_18_LN_CFG_CDRCK_EN, x) 1597 + #define SD25G_LANE_LANE_18_LN_CFG_CDRCK_EN_GET(x)\ 1598 + FIELD_GET(SD25G_LANE_LANE_18_LN_CFG_CDRCK_EN, x) 1599 + 1600 + #define SD25G_LANE_LANE_18_LN_CFG_ADD_VOLT BIT(1) 1601 + #define SD25G_LANE_LANE_18_LN_CFG_ADD_VOLT_SET(x)\ 1602 + FIELD_PREP(SD25G_LANE_LANE_18_LN_CFG_ADD_VOLT, x) 1603 + #define SD25G_LANE_LANE_18_LN_CFG_ADD_VOLT_GET(x)\ 1604 + FIELD_GET(SD25G_LANE_LANE_18_LN_CFG_ADD_VOLT, x) 1605 + 1606 + #define SD25G_LANE_LANE_18_LN_CFG_MAN_VOLT_EN BIT(2) 1607 + #define SD25G_LANE_LANE_18_LN_CFG_MAN_VOLT_EN_SET(x)\ 1608 + FIELD_PREP(SD25G_LANE_LANE_18_LN_CFG_MAN_VOLT_EN, x) 1609 + #define SD25G_LANE_LANE_18_LN_CFG_MAN_VOLT_EN_GET(x)\ 1610 + FIELD_GET(SD25G_LANE_LANE_18_LN_CFG_MAN_VOLT_EN, x) 1611 + 1612 + #define SD25G_LANE_LANE_18_LN_CFG_ERRAMP_PD BIT(3) 1613 + #define SD25G_LANE_LANE_18_LN_CFG_ERRAMP_PD_SET(x)\ 1614 + FIELD_PREP(SD25G_LANE_LANE_18_LN_CFG_ERRAMP_PD, x) 1615 + #define SD25G_LANE_LANE_18_LN_CFG_ERRAMP_PD_GET(x)\ 1616 + FIELD_GET(SD25G_LANE_LANE_18_LN_CFG_ERRAMP_PD, x) 1617 + 1618 + #define SD25G_LANE_LANE_18_LN_CFG_RXDIV_SEL_2_0 GENMASK(6, 4) 1619 + #define SD25G_LANE_LANE_18_LN_CFG_RXDIV_SEL_2_0_SET(x)\ 1620 + FIELD_PREP(SD25G_LANE_LANE_18_LN_CFG_RXDIV_SEL_2_0, x) 1621 + #define SD25G_LANE_LANE_18_LN_CFG_RXDIV_SEL_2_0_GET(x)\ 1622 + FIELD_GET(SD25G_LANE_LANE_18_LN_CFG_RXDIV_SEL_2_0, x) 1623 + 1624 + /* SD25G_TARGET:LANE_GRP_0:LANE_19 */ 1625 + #define SD25G_LANE_LANE_19(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 100, 0, 1, 4) 1626 + 1627 + #define SD25G_LANE_LANE_19_LN_CFG_DCDR_PD BIT(0) 1628 + #define SD25G_LANE_LANE_19_LN_CFG_DCDR_PD_SET(x)\ 1629 + FIELD_PREP(SD25G_LANE_LANE_19_LN_CFG_DCDR_PD, x) 1630 + #define SD25G_LANE_LANE_19_LN_CFG_DCDR_PD_GET(x)\ 1631 + FIELD_GET(SD25G_LANE_LANE_19_LN_CFG_DCDR_PD, x) 1632 + 1633 + #define SD25G_LANE_LANE_19_LN_CFG_ECDR_PD BIT(1) 1634 + #define SD25G_LANE_LANE_19_LN_CFG_ECDR_PD_SET(x)\ 1635 + FIELD_PREP(SD25G_LANE_LANE_19_LN_CFG_ECDR_PD, x) 1636 + #define SD25G_LANE_LANE_19_LN_CFG_ECDR_PD_GET(x)\ 1637 + FIELD_GET(SD25G_LANE_LANE_19_LN_CFG_ECDR_PD, x) 1638 + 1639 + #define SD25G_LANE_LANE_19_LN_CFG_ISCAN_SEL BIT(2) 1640 + #define SD25G_LANE_LANE_19_LN_CFG_ISCAN_SEL_SET(x)\ 1641 + FIELD_PREP(SD25G_LANE_LANE_19_LN_CFG_ISCAN_SEL, x) 1642 + #define SD25G_LANE_LANE_19_LN_CFG_ISCAN_SEL_GET(x)\ 1643 + FIELD_GET(SD25G_LANE_LANE_19_LN_CFG_ISCAN_SEL, x) 1644 + 1645 + #define SD25G_LANE_LANE_19_LN_CFG_TXLB_EN BIT(3) 1646 + #define SD25G_LANE_LANE_19_LN_CFG_TXLB_EN_SET(x)\ 1647 + FIELD_PREP(SD25G_LANE_LANE_19_LN_CFG_TXLB_EN, x) 1648 + #define SD25G_LANE_LANE_19_LN_CFG_TXLB_EN_GET(x)\ 1649 + FIELD_GET(SD25G_LANE_LANE_19_LN_CFG_TXLB_EN, x) 1650 + 1651 + #define SD25G_LANE_LANE_19_LN_CFG_RX_REG_PU BIT(4) 1652 + #define SD25G_LANE_LANE_19_LN_CFG_RX_REG_PU_SET(x)\ 1653 + FIELD_PREP(SD25G_LANE_LANE_19_LN_CFG_RX_REG_PU, x) 1654 + #define SD25G_LANE_LANE_19_LN_CFG_RX_REG_PU_GET(x)\ 1655 + FIELD_GET(SD25G_LANE_LANE_19_LN_CFG_RX_REG_PU, x) 1656 + 1657 + #define SD25G_LANE_LANE_19_LN_CFG_RX_REG_BYP BIT(5) 1658 + #define SD25G_LANE_LANE_19_LN_CFG_RX_REG_BYP_SET(x)\ 1659 + FIELD_PREP(SD25G_LANE_LANE_19_LN_CFG_RX_REG_BYP, x) 1660 + #define SD25G_LANE_LANE_19_LN_CFG_RX_REG_BYP_GET(x)\ 1661 + FIELD_GET(SD25G_LANE_LANE_19_LN_CFG_RX_REG_BYP, x) 1662 + 1663 + #define SD25G_LANE_LANE_19_LN_CFG_PD_RMS_DET BIT(6) 1664 + #define SD25G_LANE_LANE_19_LN_CFG_PD_RMS_DET_SET(x)\ 1665 + FIELD_PREP(SD25G_LANE_LANE_19_LN_CFG_PD_RMS_DET, x) 1666 + #define SD25G_LANE_LANE_19_LN_CFG_PD_RMS_DET_GET(x)\ 1667 + FIELD_GET(SD25G_LANE_LANE_19_LN_CFG_PD_RMS_DET, x) 1668 + 1669 + #define SD25G_LANE_LANE_19_LN_CFG_PD_CTLE BIT(7) 1670 + #define SD25G_LANE_LANE_19_LN_CFG_PD_CTLE_SET(x)\ 1671 + FIELD_PREP(SD25G_LANE_LANE_19_LN_CFG_PD_CTLE, x) 1672 + #define SD25G_LANE_LANE_19_LN_CFG_PD_CTLE_GET(x)\ 1673 + FIELD_GET(SD25G_LANE_LANE_19_LN_CFG_PD_CTLE, x) 1674 + 1675 + /* SD25G_TARGET:LANE_GRP_0:LANE_1A */ 1676 + #define SD25G_LANE_LANE_1A(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 104, 0, 1, 4) 1677 + 1678 + #define SD25G_LANE_LANE_1A_LN_CFG_CTLE_TP_EN BIT(0) 1679 + #define SD25G_LANE_LANE_1A_LN_CFG_CTLE_TP_EN_SET(x)\ 1680 + FIELD_PREP(SD25G_LANE_LANE_1A_LN_CFG_CTLE_TP_EN, x) 1681 + #define SD25G_LANE_LANE_1A_LN_CFG_CTLE_TP_EN_GET(x)\ 1682 + FIELD_GET(SD25G_LANE_LANE_1A_LN_CFG_CTLE_TP_EN, x) 1683 + 1684 + #define SD25G_LANE_LANE_1A_LN_CFG_CDR_KF_2_0 GENMASK(6, 4) 1685 + #define SD25G_LANE_LANE_1A_LN_CFG_CDR_KF_2_0_SET(x)\ 1686 + FIELD_PREP(SD25G_LANE_LANE_1A_LN_CFG_CDR_KF_2_0, x) 1687 + #define SD25G_LANE_LANE_1A_LN_CFG_CDR_KF_2_0_GET(x)\ 1688 + FIELD_GET(SD25G_LANE_LANE_1A_LN_CFG_CDR_KF_2_0, x) 1689 + 1690 + /* SD25G_TARGET:LANE_GRP_0:LANE_1B */ 1691 + #define SD25G_LANE_LANE_1B(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 108, 0, 1, 4) 1692 + 1693 + #define SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0 GENMASK(7, 0) 1694 + #define SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0_SET(x)\ 1695 + FIELD_PREP(SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0, x) 1696 + #define SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0_GET(x)\ 1697 + FIELD_GET(SD25G_LANE_LANE_1B_LN_CFG_CDR_M_7_0, x) 1698 + 1699 + /* SD25G_TARGET:LANE_GRP_0:LANE_1C */ 1700 + #define SD25G_LANE_LANE_1C(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 112, 0, 1, 4) 1701 + 1702 + #define SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN BIT(0) 1703 + #define SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN_SET(x)\ 1704 + FIELD_PREP(SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN, x) 1705 + #define SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN_GET(x)\ 1706 + FIELD_GET(SD25G_LANE_LANE_1C_LN_CFG_CDR_RSTN, x) 1707 + 1708 + #define SD25G_LANE_LANE_1C_LN_CFG_DFE_PD BIT(1) 1709 + #define SD25G_LANE_LANE_1C_LN_CFG_DFE_PD_SET(x)\ 1710 + FIELD_PREP(SD25G_LANE_LANE_1C_LN_CFG_DFE_PD, x) 1711 + #define SD25G_LANE_LANE_1C_LN_CFG_DFE_PD_GET(x)\ 1712 + FIELD_GET(SD25G_LANE_LANE_1C_LN_CFG_DFE_PD, x) 1713 + 1714 + #define SD25G_LANE_LANE_1C_LN_CFG_DFEDMX_PD BIT(2) 1715 + #define SD25G_LANE_LANE_1C_LN_CFG_DFEDMX_PD_SET(x)\ 1716 + FIELD_PREP(SD25G_LANE_LANE_1C_LN_CFG_DFEDMX_PD, x) 1717 + #define SD25G_LANE_LANE_1C_LN_CFG_DFEDMX_PD_GET(x)\ 1718 + FIELD_GET(SD25G_LANE_LANE_1C_LN_CFG_DFEDMX_PD, x) 1719 + 1720 + #define SD25G_LANE_LANE_1C_LN_CFG_EQC_FORCE_3_0 GENMASK(7, 4) 1721 + #define SD25G_LANE_LANE_1C_LN_CFG_EQC_FORCE_3_0_SET(x)\ 1722 + FIELD_PREP(SD25G_LANE_LANE_1C_LN_CFG_EQC_FORCE_3_0, x) 1723 + #define SD25G_LANE_LANE_1C_LN_CFG_EQC_FORCE_3_0_GET(x)\ 1724 + FIELD_GET(SD25G_LANE_LANE_1C_LN_CFG_EQC_FORCE_3_0, x) 1725 + 1726 + /* SD25G_TARGET:LANE_GRP_0:LANE_1D */ 1727 + #define SD25G_LANE_LANE_1D(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 116, 0, 1, 4) 1728 + 1729 + #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_EXT_OVR BIT(0) 1730 + #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_EXT_OVR_SET(x)\ 1731 + FIELD_PREP(SD25G_LANE_LANE_1D_LN_CFG_ISCAN_EXT_OVR, x) 1732 + #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_EXT_OVR_GET(x)\ 1733 + FIELD_GET(SD25G_LANE_LANE_1D_LN_CFG_ISCAN_EXT_OVR, x) 1734 + 1735 + #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_HOLD BIT(1) 1736 + #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_HOLD_SET(x)\ 1737 + FIELD_PREP(SD25G_LANE_LANE_1D_LN_CFG_ISCAN_HOLD, x) 1738 + #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_HOLD_GET(x)\ 1739 + FIELD_GET(SD25G_LANE_LANE_1D_LN_CFG_ISCAN_HOLD, x) 1740 + 1741 + #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_RSTN BIT(2) 1742 + #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_RSTN_SET(x)\ 1743 + FIELD_PREP(SD25G_LANE_LANE_1D_LN_CFG_ISCAN_RSTN, x) 1744 + #define SD25G_LANE_LANE_1D_LN_CFG_ISCAN_RSTN_GET(x)\ 1745 + FIELD_GET(SD25G_LANE_LANE_1D_LN_CFG_ISCAN_RSTN, x) 1746 + 1747 + #define SD25G_LANE_LANE_1D_LN_CFG_AGC_ADPT_BYP BIT(3) 1748 + #define SD25G_LANE_LANE_1D_LN_CFG_AGC_ADPT_BYP_SET(x)\ 1749 + FIELD_PREP(SD25G_LANE_LANE_1D_LN_CFG_AGC_ADPT_BYP, x) 1750 + #define SD25G_LANE_LANE_1D_LN_CFG_AGC_ADPT_BYP_GET(x)\ 1751 + FIELD_GET(SD25G_LANE_LANE_1D_LN_CFG_AGC_ADPT_BYP, x) 1752 + 1753 + #define SD25G_LANE_LANE_1D_LN_CFG_PHID_1T BIT(4) 1754 + #define SD25G_LANE_LANE_1D_LN_CFG_PHID_1T_SET(x)\ 1755 + FIELD_PREP(SD25G_LANE_LANE_1D_LN_CFG_PHID_1T, x) 1756 + #define SD25G_LANE_LANE_1D_LN_CFG_PHID_1T_GET(x)\ 1757 + FIELD_GET(SD25G_LANE_LANE_1D_LN_CFG_PHID_1T, x) 1758 + 1759 + #define SD25G_LANE_LANE_1D_LN_CFG_PI_DFE_EN BIT(5) 1760 + #define SD25G_LANE_LANE_1D_LN_CFG_PI_DFE_EN_SET(x)\ 1761 + FIELD_PREP(SD25G_LANE_LANE_1D_LN_CFG_PI_DFE_EN, x) 1762 + #define SD25G_LANE_LANE_1D_LN_CFG_PI_DFE_EN_GET(x)\ 1763 + FIELD_GET(SD25G_LANE_LANE_1D_LN_CFG_PI_DFE_EN, x) 1764 + 1765 + #define SD25G_LANE_LANE_1D_LN_CFG_PI_EXT_OVR BIT(6) 1766 + #define SD25G_LANE_LANE_1D_LN_CFG_PI_EXT_OVR_SET(x)\ 1767 + FIELD_PREP(SD25G_LANE_LANE_1D_LN_CFG_PI_EXT_OVR, x) 1768 + #define SD25G_LANE_LANE_1D_LN_CFG_PI_EXT_OVR_GET(x)\ 1769 + FIELD_GET(SD25G_LANE_LANE_1D_LN_CFG_PI_EXT_OVR, x) 1770 + 1771 + #define SD25G_LANE_LANE_1D_LN_CFG_PI_HOLD BIT(7) 1772 + #define SD25G_LANE_LANE_1D_LN_CFG_PI_HOLD_SET(x)\ 1773 + FIELD_PREP(SD25G_LANE_LANE_1D_LN_CFG_PI_HOLD, x) 1774 + #define SD25G_LANE_LANE_1D_LN_CFG_PI_HOLD_GET(x)\ 1775 + FIELD_GET(SD25G_LANE_LANE_1D_LN_CFG_PI_HOLD, x) 1776 + 1777 + /* SD25G_TARGET:LANE_GRP_0:LANE_1E */ 1778 + #define SD25G_LANE_LANE_1E(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 120, 0, 1, 4) 1779 + 1780 + #define SD25G_LANE_LANE_1E_LN_CFG_PI_STEPS_1_0 GENMASK(1, 0) 1781 + #define SD25G_LANE_LANE_1E_LN_CFG_PI_STEPS_1_0_SET(x)\ 1782 + FIELD_PREP(SD25G_LANE_LANE_1E_LN_CFG_PI_STEPS_1_0, x) 1783 + #define SD25G_LANE_LANE_1E_LN_CFG_PI_STEPS_1_0_GET(x)\ 1784 + FIELD_GET(SD25G_LANE_LANE_1E_LN_CFG_PI_STEPS_1_0, x) 1785 + 1786 + #define SD25G_LANE_LANE_1E_LN_CFG_RXLB_EN BIT(4) 1787 + #define SD25G_LANE_LANE_1E_LN_CFG_RXLB_EN_SET(x)\ 1788 + FIELD_PREP(SD25G_LANE_LANE_1E_LN_CFG_RXLB_EN, x) 1789 + #define SD25G_LANE_LANE_1E_LN_CFG_RXLB_EN_GET(x)\ 1790 + FIELD_GET(SD25G_LANE_LANE_1E_LN_CFG_RXLB_EN, x) 1791 + 1792 + #define SD25G_LANE_LANE_1E_LN_CFG_SUM_SETCM_EN BIT(5) 1793 + #define SD25G_LANE_LANE_1E_LN_CFG_SUM_SETCM_EN_SET(x)\ 1794 + FIELD_PREP(SD25G_LANE_LANE_1E_LN_CFG_SUM_SETCM_EN, x) 1795 + #define SD25G_LANE_LANE_1E_LN_CFG_SUM_SETCM_EN_GET(x)\ 1796 + FIELD_GET(SD25G_LANE_LANE_1E_LN_CFG_SUM_SETCM_EN, x) 1797 + 1798 + #define SD25G_LANE_LANE_1E_LN_CFG_R_OFFSET_DIR BIT(6) 1799 + #define SD25G_LANE_LANE_1E_LN_CFG_R_OFFSET_DIR_SET(x)\ 1800 + FIELD_PREP(SD25G_LANE_LANE_1E_LN_CFG_R_OFFSET_DIR, x) 1801 + #define SD25G_LANE_LANE_1E_LN_CFG_R_OFFSET_DIR_GET(x)\ 1802 + FIELD_GET(SD25G_LANE_LANE_1E_LN_CFG_R_OFFSET_DIR, x) 1803 + 1804 + #define SD25G_LANE_LANE_1E_LN_CFG_PMAD_CK_PD BIT(7) 1805 + #define SD25G_LANE_LANE_1E_LN_CFG_PMAD_CK_PD_SET(x)\ 1806 + FIELD_PREP(SD25G_LANE_LANE_1E_LN_CFG_PMAD_CK_PD, x) 1807 + #define SD25G_LANE_LANE_1E_LN_CFG_PMAD_CK_PD_GET(x)\ 1808 + FIELD_GET(SD25G_LANE_LANE_1E_LN_CFG_PMAD_CK_PD, x) 1809 + 1810 + /* SD25G_TARGET:LANE_GRP_0:LANE_21 */ 1811 + #define SD25G_LANE_LANE_21(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 132, 0, 1, 4) 1812 + 1813 + #define SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0 GENMASK(4, 0) 1814 + #define SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0_SET(x)\ 1815 + FIELD_PREP(SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0, x) 1816 + #define SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0_GET(x)\ 1817 + FIELD_GET(SD25G_LANE_LANE_21_LN_CFG_VGA_CTRL_BYP_4_0, x) 1818 + 1819 + /* SD25G_TARGET:LANE_GRP_0:LANE_22 */ 1820 + #define SD25G_LANE_LANE_22(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 136, 0, 1, 4) 1821 + 1822 + #define SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0 GENMASK(3, 0) 1823 + #define SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0_SET(x)\ 1824 + FIELD_PREP(SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0, x) 1825 + #define SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0_GET(x)\ 1826 + FIELD_GET(SD25G_LANE_LANE_22_LN_CFG_EQR_FORCE_3_0, x) 1827 + 1828 + /* SD25G_TARGET:LANE_GRP_0:LANE_25 */ 1829 + #define SD25G_LANE_LANE_25(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 148, 0, 1, 4) 1830 + 1831 + #define SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0 GENMASK(6, 0) 1832 + #define SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0_SET(x)\ 1833 + FIELD_PREP(SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0, x) 1834 + #define SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0_GET(x)\ 1835 + FIELD_GET(SD25G_LANE_LANE_25_LN_CFG_INIT_POS_ISCAN_6_0, x) 1836 + 1837 + /* SD25G_TARGET:LANE_GRP_0:LANE_26 */ 1838 + #define SD25G_LANE_LANE_26(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 152, 0, 1, 4) 1839 + 1840 + #define SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0 GENMASK(6, 0) 1841 + #define SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0_SET(x)\ 1842 + FIELD_PREP(SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0, x) 1843 + #define SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0_GET(x)\ 1844 + FIELD_GET(SD25G_LANE_LANE_26_LN_CFG_INIT_POS_IPI_6_0, x) 1845 + 1846 + /* SD25G_TARGET:LANE_GRP_0:LANE_28 */ 1847 + #define SD25G_LANE_LANE_28(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 160, 0, 1, 4) 1848 + 1849 + #define SD25G_LANE_LANE_28_LN_CFG_ISCAN_MODE_EN BIT(0) 1850 + #define SD25G_LANE_LANE_28_LN_CFG_ISCAN_MODE_EN_SET(x)\ 1851 + FIELD_PREP(SD25G_LANE_LANE_28_LN_CFG_ISCAN_MODE_EN, x) 1852 + #define SD25G_LANE_LANE_28_LN_CFG_ISCAN_MODE_EN_GET(x)\ 1853 + FIELD_GET(SD25G_LANE_LANE_28_LN_CFG_ISCAN_MODE_EN, x) 1854 + 1855 + #define SD25G_LANE_LANE_28_LN_CFG_RX_SSC_LH BIT(1) 1856 + #define SD25G_LANE_LANE_28_LN_CFG_RX_SSC_LH_SET(x)\ 1857 + FIELD_PREP(SD25G_LANE_LANE_28_LN_CFG_RX_SSC_LH, x) 1858 + #define SD25G_LANE_LANE_28_LN_CFG_RX_SSC_LH_GET(x)\ 1859 + FIELD_GET(SD25G_LANE_LANE_28_LN_CFG_RX_SSC_LH, x) 1860 + 1861 + #define SD25G_LANE_LANE_28_LN_CFG_FIGMERIT_SEL BIT(2) 1862 + #define SD25G_LANE_LANE_28_LN_CFG_FIGMERIT_SEL_SET(x)\ 1863 + FIELD_PREP(SD25G_LANE_LANE_28_LN_CFG_FIGMERIT_SEL, x) 1864 + #define SD25G_LANE_LANE_28_LN_CFG_FIGMERIT_SEL_GET(x)\ 1865 + FIELD_GET(SD25G_LANE_LANE_28_LN_CFG_FIGMERIT_SEL, x) 1866 + 1867 + #define SD25G_LANE_LANE_28_LN_CFG_RX_SUBRATE_2_0 GENMASK(6, 4) 1868 + #define SD25G_LANE_LANE_28_LN_CFG_RX_SUBRATE_2_0_SET(x)\ 1869 + FIELD_PREP(SD25G_LANE_LANE_28_LN_CFG_RX_SUBRATE_2_0, x) 1870 + #define SD25G_LANE_LANE_28_LN_CFG_RX_SUBRATE_2_0_GET(x)\ 1871 + FIELD_GET(SD25G_LANE_LANE_28_LN_CFG_RX_SUBRATE_2_0, x) 1872 + 1873 + /* SD25G_TARGET:LANE_GRP_0:LANE_2B */ 1874 + #define SD25G_LANE_LANE_2B(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 172, 0, 1, 4) 1875 + 1876 + #define SD25G_LANE_LANE_2B_LN_CFG_PI_BW_3_0 GENMASK(3, 0) 1877 + #define SD25G_LANE_LANE_2B_LN_CFG_PI_BW_3_0_SET(x)\ 1878 + FIELD_PREP(SD25G_LANE_LANE_2B_LN_CFG_PI_BW_3_0, x) 1879 + #define SD25G_LANE_LANE_2B_LN_CFG_PI_BW_3_0_GET(x)\ 1880 + FIELD_GET(SD25G_LANE_LANE_2B_LN_CFG_PI_BW_3_0, x) 1881 + 1882 + #define SD25G_LANE_LANE_2B_LN_CFG_RSTN_DMUX_SUBR BIT(4) 1883 + #define SD25G_LANE_LANE_2B_LN_CFG_RSTN_DMUX_SUBR_SET(x)\ 1884 + FIELD_PREP(SD25G_LANE_LANE_2B_LN_CFG_RSTN_DMUX_SUBR, x) 1885 + #define SD25G_LANE_LANE_2B_LN_CFG_RSTN_DMUX_SUBR_GET(x)\ 1886 + FIELD_GET(SD25G_LANE_LANE_2B_LN_CFG_RSTN_DMUX_SUBR, x) 1887 + 1888 + #define SD25G_LANE_LANE_2B_LN_CFG_RSTN_TXDUPU BIT(5) 1889 + #define SD25G_LANE_LANE_2B_LN_CFG_RSTN_TXDUPU_SET(x)\ 1890 + FIELD_PREP(SD25G_LANE_LANE_2B_LN_CFG_RSTN_TXDUPU, x) 1891 + #define SD25G_LANE_LANE_2B_LN_CFG_RSTN_TXDUPU_GET(x)\ 1892 + FIELD_GET(SD25G_LANE_LANE_2B_LN_CFG_RSTN_TXDUPU, x) 1893 + 1894 + /* SD25G_TARGET:LANE_GRP_0:LANE_2C */ 1895 + #define SD25G_LANE_LANE_2C(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 176, 0, 1, 4) 1896 + 1897 + #define SD25G_LANE_LANE_2C_LN_CFG_TX_SUBRATE_2_0 GENMASK(2, 0) 1898 + #define SD25G_LANE_LANE_2C_LN_CFG_TX_SUBRATE_2_0_SET(x)\ 1899 + FIELD_PREP(SD25G_LANE_LANE_2C_LN_CFG_TX_SUBRATE_2_0, x) 1900 + #define SD25G_LANE_LANE_2C_LN_CFG_TX_SUBRATE_2_0_GET(x)\ 1901 + FIELD_GET(SD25G_LANE_LANE_2C_LN_CFG_TX_SUBRATE_2_0, x) 1902 + 1903 + #define SD25G_LANE_LANE_2C_LN_CFG_DIS_2NDORDER BIT(4) 1904 + #define SD25G_LANE_LANE_2C_LN_CFG_DIS_2NDORDER_SET(x)\ 1905 + FIELD_PREP(SD25G_LANE_LANE_2C_LN_CFG_DIS_2NDORDER, x) 1906 + #define SD25G_LANE_LANE_2C_LN_CFG_DIS_2NDORDER_GET(x)\ 1907 + FIELD_GET(SD25G_LANE_LANE_2C_LN_CFG_DIS_2NDORDER, x) 1908 + 1909 + /* SD25G_TARGET:LANE_GRP_0:LANE_2D */ 1910 + #define SD25G_LANE_LANE_2D(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 180, 0, 1, 4) 1911 + 1912 + #define SD25G_LANE_LANE_2D_LN_CFG_ALOS_THR_2_0 GENMASK(2, 0) 1913 + #define SD25G_LANE_LANE_2D_LN_CFG_ALOS_THR_2_0_SET(x)\ 1914 + FIELD_PREP(SD25G_LANE_LANE_2D_LN_CFG_ALOS_THR_2_0, x) 1915 + #define SD25G_LANE_LANE_2D_LN_CFG_ALOS_THR_2_0_GET(x)\ 1916 + FIELD_GET(SD25G_LANE_LANE_2D_LN_CFG_ALOS_THR_2_0, x) 1917 + 1918 + #define SD25G_LANE_LANE_2D_LN_CFG_SAT_CNTSEL_2_0 GENMASK(6, 4) 1919 + #define SD25G_LANE_LANE_2D_LN_CFG_SAT_CNTSEL_2_0_SET(x)\ 1920 + FIELD_PREP(SD25G_LANE_LANE_2D_LN_CFG_SAT_CNTSEL_2_0, x) 1921 + #define SD25G_LANE_LANE_2D_LN_CFG_SAT_CNTSEL_2_0_GET(x)\ 1922 + FIELD_GET(SD25G_LANE_LANE_2D_LN_CFG_SAT_CNTSEL_2_0, x) 1923 + 1924 + /* SD25G_TARGET:LANE_GRP_0:LANE_2E */ 1925 + #define SD25G_LANE_LANE_2E(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 184, 0, 1, 4) 1926 + 1927 + #define SD25G_LANE_LANE_2E_LN_CFG_EN_FAST_ISCAN BIT(0) 1928 + #define SD25G_LANE_LANE_2E_LN_CFG_EN_FAST_ISCAN_SET(x)\ 1929 + FIELD_PREP(SD25G_LANE_LANE_2E_LN_CFG_EN_FAST_ISCAN, x) 1930 + #define SD25G_LANE_LANE_2E_LN_CFG_EN_FAST_ISCAN_GET(x)\ 1931 + FIELD_GET(SD25G_LANE_LANE_2E_LN_CFG_EN_FAST_ISCAN, x) 1932 + 1933 + #define SD25G_LANE_LANE_2E_LN_CFG_DIS_SQ BIT(1) 1934 + #define SD25G_LANE_LANE_2E_LN_CFG_DIS_SQ_SET(x)\ 1935 + FIELD_PREP(SD25G_LANE_LANE_2E_LN_CFG_DIS_SQ, x) 1936 + #define SD25G_LANE_LANE_2E_LN_CFG_DIS_SQ_GET(x)\ 1937 + FIELD_GET(SD25G_LANE_LANE_2E_LN_CFG_DIS_SQ, x) 1938 + 1939 + #define SD25G_LANE_LANE_2E_LN_CFG_PD_SQ BIT(2) 1940 + #define SD25G_LANE_LANE_2E_LN_CFG_PD_SQ_SET(x)\ 1941 + FIELD_PREP(SD25G_LANE_LANE_2E_LN_CFG_PD_SQ, x) 1942 + #define SD25G_LANE_LANE_2E_LN_CFG_PD_SQ_GET(x)\ 1943 + FIELD_GET(SD25G_LANE_LANE_2E_LN_CFG_PD_SQ, x) 1944 + 1945 + #define SD25G_LANE_LANE_2E_LN_CFG_DIS_ALOS BIT(3) 1946 + #define SD25G_LANE_LANE_2E_LN_CFG_DIS_ALOS_SET(x)\ 1947 + FIELD_PREP(SD25G_LANE_LANE_2E_LN_CFG_DIS_ALOS, x) 1948 + #define SD25G_LANE_LANE_2E_LN_CFG_DIS_ALOS_GET(x)\ 1949 + FIELD_GET(SD25G_LANE_LANE_2E_LN_CFG_DIS_ALOS, x) 1950 + 1951 + #define SD25G_LANE_LANE_2E_LN_CFG_RESETN_AGC BIT(4) 1952 + #define SD25G_LANE_LANE_2E_LN_CFG_RESETN_AGC_SET(x)\ 1953 + FIELD_PREP(SD25G_LANE_LANE_2E_LN_CFG_RESETN_AGC, x) 1954 + #define SD25G_LANE_LANE_2E_LN_CFG_RESETN_AGC_GET(x)\ 1955 + FIELD_GET(SD25G_LANE_LANE_2E_LN_CFG_RESETN_AGC, x) 1956 + 1957 + #define SD25G_LANE_LANE_2E_LN_CFG_RSTN_DFEDIG BIT(5) 1958 + #define SD25G_LANE_LANE_2E_LN_CFG_RSTN_DFEDIG_SET(x)\ 1959 + FIELD_PREP(SD25G_LANE_LANE_2E_LN_CFG_RSTN_DFEDIG, x) 1960 + #define SD25G_LANE_LANE_2E_LN_CFG_RSTN_DFEDIG_GET(x)\ 1961 + FIELD_GET(SD25G_LANE_LANE_2E_LN_CFG_RSTN_DFEDIG, x) 1962 + 1963 + #define SD25G_LANE_LANE_2E_LN_CFG_PI_RSTN BIT(6) 1964 + #define SD25G_LANE_LANE_2E_LN_CFG_PI_RSTN_SET(x)\ 1965 + FIELD_PREP(SD25G_LANE_LANE_2E_LN_CFG_PI_RSTN, x) 1966 + #define SD25G_LANE_LANE_2E_LN_CFG_PI_RSTN_GET(x)\ 1967 + FIELD_GET(SD25G_LANE_LANE_2E_LN_CFG_PI_RSTN, x) 1968 + 1969 + #define SD25G_LANE_LANE_2E_LN_CFG_CTLE_RSTN BIT(7) 1970 + #define SD25G_LANE_LANE_2E_LN_CFG_CTLE_RSTN_SET(x)\ 1971 + FIELD_PREP(SD25G_LANE_LANE_2E_LN_CFG_CTLE_RSTN, x) 1972 + #define SD25G_LANE_LANE_2E_LN_CFG_CTLE_RSTN_GET(x)\ 1973 + FIELD_GET(SD25G_LANE_LANE_2E_LN_CFG_CTLE_RSTN, x) 1974 + 1975 + /* SD25G_TARGET:LANE_GRP_0:LANE_40 */ 1976 + #define SD25G_LANE_LANE_40(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 256, 0, 1, 4) 1977 + 1978 + #define SD25G_LANE_LANE_40_LN_R_TX_BIT_REVERSE BIT(0) 1979 + #define SD25G_LANE_LANE_40_LN_R_TX_BIT_REVERSE_SET(x)\ 1980 + FIELD_PREP(SD25G_LANE_LANE_40_LN_R_TX_BIT_REVERSE, x) 1981 + #define SD25G_LANE_LANE_40_LN_R_TX_BIT_REVERSE_GET(x)\ 1982 + FIELD_GET(SD25G_LANE_LANE_40_LN_R_TX_BIT_REVERSE, x) 1983 + 1984 + #define SD25G_LANE_LANE_40_LN_R_TX_POL_INV BIT(1) 1985 + #define SD25G_LANE_LANE_40_LN_R_TX_POL_INV_SET(x)\ 1986 + FIELD_PREP(SD25G_LANE_LANE_40_LN_R_TX_POL_INV, x) 1987 + #define SD25G_LANE_LANE_40_LN_R_TX_POL_INV_GET(x)\ 1988 + FIELD_GET(SD25G_LANE_LANE_40_LN_R_TX_POL_INV, x) 1989 + 1990 + #define SD25G_LANE_LANE_40_LN_R_RX_BIT_REVERSE BIT(2) 1991 + #define SD25G_LANE_LANE_40_LN_R_RX_BIT_REVERSE_SET(x)\ 1992 + FIELD_PREP(SD25G_LANE_LANE_40_LN_R_RX_BIT_REVERSE, x) 1993 + #define SD25G_LANE_LANE_40_LN_R_RX_BIT_REVERSE_GET(x)\ 1994 + FIELD_GET(SD25G_LANE_LANE_40_LN_R_RX_BIT_REVERSE, x) 1995 + 1996 + #define SD25G_LANE_LANE_40_LN_R_RX_POL_INV BIT(3) 1997 + #define SD25G_LANE_LANE_40_LN_R_RX_POL_INV_SET(x)\ 1998 + FIELD_PREP(SD25G_LANE_LANE_40_LN_R_RX_POL_INV, x) 1999 + #define SD25G_LANE_LANE_40_LN_R_RX_POL_INV_GET(x)\ 2000 + FIELD_GET(SD25G_LANE_LANE_40_LN_R_RX_POL_INV, x) 2001 + 2002 + #define SD25G_LANE_LANE_40_LN_R_CDR_RSTN BIT(4) 2003 + #define SD25G_LANE_LANE_40_LN_R_CDR_RSTN_SET(x)\ 2004 + FIELD_PREP(SD25G_LANE_LANE_40_LN_R_CDR_RSTN, x) 2005 + #define SD25G_LANE_LANE_40_LN_R_CDR_RSTN_GET(x)\ 2006 + FIELD_GET(SD25G_LANE_LANE_40_LN_R_CDR_RSTN, x) 2007 + 2008 + #define SD25G_LANE_LANE_40_LN_R_DFE_RSTN BIT(5) 2009 + #define SD25G_LANE_LANE_40_LN_R_DFE_RSTN_SET(x)\ 2010 + FIELD_PREP(SD25G_LANE_LANE_40_LN_R_DFE_RSTN, x) 2011 + #define SD25G_LANE_LANE_40_LN_R_DFE_RSTN_GET(x)\ 2012 + FIELD_GET(SD25G_LANE_LANE_40_LN_R_DFE_RSTN, x) 2013 + 2014 + #define SD25G_LANE_LANE_40_LN_R_CTLE_RSTN BIT(6) 2015 + #define SD25G_LANE_LANE_40_LN_R_CTLE_RSTN_SET(x)\ 2016 + FIELD_PREP(SD25G_LANE_LANE_40_LN_R_CTLE_RSTN, x) 2017 + #define SD25G_LANE_LANE_40_LN_R_CTLE_RSTN_GET(x)\ 2018 + FIELD_GET(SD25G_LANE_LANE_40_LN_R_CTLE_RSTN, x) 2019 + 2020 + /* SD25G_TARGET:LANE_GRP_0:LANE_42 */ 2021 + #define SD25G_LANE_LANE_42(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 264, 0, 1, 4) 2022 + 2023 + #define SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0 GENMASK(7, 0) 2024 + #define SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0_SET(x)\ 2025 + FIELD_PREP(SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0, x) 2026 + #define SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0_GET(x)\ 2027 + FIELD_GET(SD25G_LANE_LANE_42_LN_CFG_TX_RESERVE_7_0, x) 2028 + 2029 + /* SD25G_TARGET:LANE_GRP_0:LANE_43 */ 2030 + #define SD25G_LANE_LANE_43(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 268, 0, 1, 4) 2031 + 2032 + #define SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8 GENMASK(7, 0) 2033 + #define SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8_SET(x)\ 2034 + FIELD_PREP(SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8, x) 2035 + #define SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8_GET(x)\ 2036 + FIELD_GET(SD25G_LANE_LANE_43_LN_CFG_TX_RESERVE_15_8, x) 2037 + 2038 + /* SD25G_TARGET:LANE_GRP_0:LANE_44 */ 2039 + #define SD25G_LANE_LANE_44(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 272, 0, 1, 4) 2040 + 2041 + #define SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0 GENMASK(7, 0) 2042 + #define SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0_SET(x)\ 2043 + FIELD_PREP(SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0, x) 2044 + #define SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0_GET(x)\ 2045 + FIELD_GET(SD25G_LANE_LANE_44_LN_CFG_RX_RESERVE_7_0, x) 2046 + 2047 + /* SD25G_TARGET:LANE_GRP_0:LANE_45 */ 2048 + #define SD25G_LANE_LANE_45(t) __REG(TARGET_SD25G_LANE, t, 8, 1024, 0, 1, 768, 276, 0, 1, 4) 2049 + 2050 + #define SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8 GENMASK(7, 0) 2051 + #define SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8_SET(x)\ 2052 + FIELD_PREP(SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8, x) 2053 + #define SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8_GET(x)\ 2054 + FIELD_GET(SD25G_LANE_LANE_45_LN_CFG_RX_RESERVE_15_8, x) 2055 + 2056 + /* SD25G_TARGET:LANE_GRP_1:LANE_DE */ 2057 + #define SD25G_LANE_LANE_DE(t) __REG(TARGET_SD25G_LANE, t, 8, 1792, 0, 1, 128, 120, 0, 1, 4) 2058 + 2059 + #define SD25G_LANE_LANE_DE_LN_LOL_UDL BIT(0) 2060 + #define SD25G_LANE_LANE_DE_LN_LOL_UDL_SET(x)\ 2061 + FIELD_PREP(SD25G_LANE_LANE_DE_LN_LOL_UDL, x) 2062 + #define SD25G_LANE_LANE_DE_LN_LOL_UDL_GET(x)\ 2063 + FIELD_GET(SD25G_LANE_LANE_DE_LN_LOL_UDL, x) 2064 + 2065 + #define SD25G_LANE_LANE_DE_LN_LOL BIT(1) 2066 + #define SD25G_LANE_LANE_DE_LN_LOL_SET(x)\ 2067 + FIELD_PREP(SD25G_LANE_LANE_DE_LN_LOL, x) 2068 + #define SD25G_LANE_LANE_DE_LN_LOL_GET(x)\ 2069 + FIELD_GET(SD25G_LANE_LANE_DE_LN_LOL, x) 2070 + 2071 + #define SD25G_LANE_LANE_DE_LN_PMA2PCS_RXEI_FILTERED BIT(2) 2072 + #define SD25G_LANE_LANE_DE_LN_PMA2PCS_RXEI_FILTERED_SET(x)\ 2073 + FIELD_PREP(SD25G_LANE_LANE_DE_LN_PMA2PCS_RXEI_FILTERED, x) 2074 + #define SD25G_LANE_LANE_DE_LN_PMA2PCS_RXEI_FILTERED_GET(x)\ 2075 + FIELD_GET(SD25G_LANE_LANE_DE_LN_PMA2PCS_RXEI_FILTERED, x) 2076 + 2077 + #define SD25G_LANE_LANE_DE_LN_PMA_RXEI BIT(3) 2078 + #define SD25G_LANE_LANE_DE_LN_PMA_RXEI_SET(x)\ 2079 + FIELD_PREP(SD25G_LANE_LANE_DE_LN_PMA_RXEI, x) 2080 + #define SD25G_LANE_LANE_DE_LN_PMA_RXEI_GET(x)\ 2081 + FIELD_GET(SD25G_LANE_LANE_DE_LN_PMA_RXEI, x) 2082 + 2083 + /* SD10G_LANE_TARGET:LANE_GRP_8:LANE_DF */ 2084 + #define SD6G_LANE_LANE_DF(t) __REG(TARGET_SD6G_LANE, t, 13, 832, 0, 1, 84, 60, 0, 1, 4) 2085 + 2086 + #define SD6G_LANE_LANE_DF_LOL_UDL BIT(0) 2087 + #define SD6G_LANE_LANE_DF_LOL_UDL_SET(x)\ 2088 + FIELD_PREP(SD6G_LANE_LANE_DF_LOL_UDL, x) 2089 + #define SD6G_LANE_LANE_DF_LOL_UDL_GET(x)\ 2090 + FIELD_GET(SD6G_LANE_LANE_DF_LOL_UDL, x) 2091 + 2092 + #define SD6G_LANE_LANE_DF_LOL BIT(1) 2093 + #define SD6G_LANE_LANE_DF_LOL_SET(x)\ 2094 + FIELD_PREP(SD6G_LANE_LANE_DF_LOL, x) 2095 + #define SD6G_LANE_LANE_DF_LOL_GET(x)\ 2096 + FIELD_GET(SD6G_LANE_LANE_DF_LOL, x) 2097 + 2098 + #define SD6G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED BIT(2) 2099 + #define SD6G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED_SET(x)\ 2100 + FIELD_PREP(SD6G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED, x) 2101 + #define SD6G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED_GET(x)\ 2102 + FIELD_GET(SD6G_LANE_LANE_DF_PMA2PCS_RXEI_FILTERED, x) 2103 + 2104 + #define SD6G_LANE_LANE_DF_SQUELCH BIT(3) 2105 + #define SD6G_LANE_LANE_DF_SQUELCH_SET(x)\ 2106 + FIELD_PREP(SD6G_LANE_LANE_DF_SQUELCH, x) 2107 + #define SD6G_LANE_LANE_DF_SQUELCH_GET(x)\ 2108 + FIELD_GET(SD6G_LANE_LANE_DF_SQUELCH, x) 2109 + 2110 + /* SD10G_CMU_TARGET:CMU_GRP_0:CMU_00 */ 2111 + #define SD_CMU_CMU_00(t) __REG(TARGET_SD_CMU, t, 14, 0, 0, 1, 20, 0, 0, 1, 4) 2112 + 2113 + #define SD_CMU_CMU_00_R_HWT_SIMULATION_MODE BIT(0) 2114 + #define SD_CMU_CMU_00_R_HWT_SIMULATION_MODE_SET(x)\ 2115 + FIELD_PREP(SD_CMU_CMU_00_R_HWT_SIMULATION_MODE, x) 2116 + #define SD_CMU_CMU_00_R_HWT_SIMULATION_MODE_GET(x)\ 2117 + FIELD_GET(SD_CMU_CMU_00_R_HWT_SIMULATION_MODE, x) 2118 + 2119 + #define SD_CMU_CMU_00_CFG_PLL_LOL_SET BIT(1) 2120 + #define SD_CMU_CMU_00_CFG_PLL_LOL_SET_SET(x)\ 2121 + FIELD_PREP(SD_CMU_CMU_00_CFG_PLL_LOL_SET, x) 2122 + #define SD_CMU_CMU_00_CFG_PLL_LOL_SET_GET(x)\ 2123 + FIELD_GET(SD_CMU_CMU_00_CFG_PLL_LOL_SET, x) 2124 + 2125 + #define SD_CMU_CMU_00_CFG_PLL_LOS_SET BIT(2) 2126 + #define SD_CMU_CMU_00_CFG_PLL_LOS_SET_SET(x)\ 2127 + FIELD_PREP(SD_CMU_CMU_00_CFG_PLL_LOS_SET, x) 2128 + #define SD_CMU_CMU_00_CFG_PLL_LOS_SET_GET(x)\ 2129 + FIELD_GET(SD_CMU_CMU_00_CFG_PLL_LOS_SET, x) 2130 + 2131 + #define SD_CMU_CMU_00_CFG_PLL_TP_SEL_1_0 GENMASK(5, 4) 2132 + #define SD_CMU_CMU_00_CFG_PLL_TP_SEL_1_0_SET(x)\ 2133 + FIELD_PREP(SD_CMU_CMU_00_CFG_PLL_TP_SEL_1_0, x) 2134 + #define SD_CMU_CMU_00_CFG_PLL_TP_SEL_1_0_GET(x)\ 2135 + FIELD_GET(SD_CMU_CMU_00_CFG_PLL_TP_SEL_1_0, x) 2136 + 2137 + /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_05 */ 2138 + #define SD_CMU_CMU_05(t) __REG(TARGET_SD_CMU, t, 14, 20, 0, 1, 72, 0, 0, 1, 4) 2139 + 2140 + #define SD_CMU_CMU_05_CFG_REFCK_TERM_EN BIT(0) 2141 + #define SD_CMU_CMU_05_CFG_REFCK_TERM_EN_SET(x)\ 2142 + FIELD_PREP(SD_CMU_CMU_05_CFG_REFCK_TERM_EN, x) 2143 + #define SD_CMU_CMU_05_CFG_REFCK_TERM_EN_GET(x)\ 2144 + FIELD_GET(SD_CMU_CMU_05_CFG_REFCK_TERM_EN, x) 2145 + 2146 + #define SD_CMU_CMU_05_CFG_BIAS_TP_SEL_1_0 GENMASK(5, 4) 2147 + #define SD_CMU_CMU_05_CFG_BIAS_TP_SEL_1_0_SET(x)\ 2148 + FIELD_PREP(SD_CMU_CMU_05_CFG_BIAS_TP_SEL_1_0, x) 2149 + #define SD_CMU_CMU_05_CFG_BIAS_TP_SEL_1_0_GET(x)\ 2150 + FIELD_GET(SD_CMU_CMU_05_CFG_BIAS_TP_SEL_1_0, x) 2151 + 2152 + /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_09 */ 2153 + #define SD_CMU_CMU_09(t) __REG(TARGET_SD_CMU, t, 14, 20, 0, 1, 72, 16, 0, 1, 4) 2154 + 2155 + #define SD_CMU_CMU_09_CFG_EN_TX_CK_UP BIT(0) 2156 + #define SD_CMU_CMU_09_CFG_EN_TX_CK_UP_SET(x)\ 2157 + FIELD_PREP(SD_CMU_CMU_09_CFG_EN_TX_CK_UP, x) 2158 + #define SD_CMU_CMU_09_CFG_EN_TX_CK_UP_GET(x)\ 2159 + FIELD_GET(SD_CMU_CMU_09_CFG_EN_TX_CK_UP, x) 2160 + 2161 + #define SD_CMU_CMU_09_CFG_EN_TX_CK_DN BIT(1) 2162 + #define SD_CMU_CMU_09_CFG_EN_TX_CK_DN_SET(x)\ 2163 + FIELD_PREP(SD_CMU_CMU_09_CFG_EN_TX_CK_DN, x) 2164 + #define SD_CMU_CMU_09_CFG_EN_TX_CK_DN_GET(x)\ 2165 + FIELD_GET(SD_CMU_CMU_09_CFG_EN_TX_CK_DN, x) 2166 + 2167 + #define SD_CMU_CMU_09_CFG_SW_8G BIT(4) 2168 + #define SD_CMU_CMU_09_CFG_SW_8G_SET(x)\ 2169 + FIELD_PREP(SD_CMU_CMU_09_CFG_SW_8G, x) 2170 + #define SD_CMU_CMU_09_CFG_SW_8G_GET(x)\ 2171 + FIELD_GET(SD_CMU_CMU_09_CFG_SW_8G, x) 2172 + 2173 + #define SD_CMU_CMU_09_CFG_SW_10G BIT(5) 2174 + #define SD_CMU_CMU_09_CFG_SW_10G_SET(x)\ 2175 + FIELD_PREP(SD_CMU_CMU_09_CFG_SW_10G, x) 2176 + #define SD_CMU_CMU_09_CFG_SW_10G_GET(x)\ 2177 + FIELD_GET(SD_CMU_CMU_09_CFG_SW_10G, x) 2178 + 2179 + /* SD10G_CMU_TARGET:CMU_GRP_1:CMU_0D */ 2180 + #define SD_CMU_CMU_0D(t) __REG(TARGET_SD_CMU, t, 14, 20, 0, 1, 72, 32, 0, 1, 4) 2181 + 2182 + #define SD_CMU_CMU_0D_CFG_PD_DIV64 BIT(0) 2183 + #define SD_CMU_CMU_0D_CFG_PD_DIV64_SET(x)\ 2184 + FIELD_PREP(SD_CMU_CMU_0D_CFG_PD_DIV64, x) 2185 + #define SD_CMU_CMU_0D_CFG_PD_DIV64_GET(x)\ 2186 + FIELD_GET(SD_CMU_CMU_0D_CFG_PD_DIV64, x) 2187 + 2188 + #define SD_CMU_CMU_0D_CFG_PD_DIV66 BIT(1) 2189 + #define SD_CMU_CMU_0D_CFG_PD_DIV66_SET(x)\ 2190 + FIELD_PREP(SD_CMU_CMU_0D_CFG_PD_DIV66, x) 2191 + #define SD_CMU_CMU_0D_CFG_PD_DIV66_GET(x)\ 2192 + FIELD_GET(SD_CMU_CMU_0D_CFG_PD_DIV66, x) 2193 + 2194 + #define SD_CMU_CMU_0D_CFG_PMA_TX_CK_PD BIT(2) 2195 + #define SD_CMU_CMU_0D_CFG_PMA_TX_CK_PD_SET(x)\ 2196 + FIELD_PREP(SD_CMU_CMU_0D_CFG_PMA_TX_CK_PD, x) 2197 + #define SD_CMU_CMU_0D_CFG_PMA_TX_CK_PD_GET(x)\ 2198 + FIELD_GET(SD_CMU_CMU_0D_CFG_PMA_TX_CK_PD, x) 2199 + 2200 + #define SD_CMU_CMU_0D_CFG_JC_BYP BIT(3) 2201 + #define SD_CMU_CMU_0D_CFG_JC_BYP_SET(x)\ 2202 + FIELD_PREP(SD_CMU_CMU_0D_CFG_JC_BYP, x) 2203 + #define SD_CMU_CMU_0D_CFG_JC_BYP_GET(x)\ 2204 + FIELD_GET(SD_CMU_CMU_0D_CFG_JC_BYP, x) 2205 + 2206 + #define SD_CMU_CMU_0D_CFG_REFCK_PD BIT(4) 2207 + #define SD_CMU_CMU_0D_CFG_REFCK_PD_SET(x)\ 2208 + FIELD_PREP(SD_CMU_CMU_0D_CFG_REFCK_PD, x) 2209 + #define SD_CMU_CMU_0D_CFG_REFCK_PD_GET(x)\ 2210 + FIELD_GET(SD_CMU_CMU_0D_CFG_REFCK_PD, x) 2211 + 2212 + /* SD10G_CMU_TARGET:CMU_GRP_3:CMU_1B */ 2213 + #define SD_CMU_CMU_1B(t) __REG(TARGET_SD_CMU, t, 14, 104, 0, 1, 20, 4, 0, 1, 4) 2214 + 2215 + #define SD_CMU_CMU_1B_CFG_RESERVE_7_0 GENMASK(7, 0) 2216 + #define SD_CMU_CMU_1B_CFG_RESERVE_7_0_SET(x)\ 2217 + FIELD_PREP(SD_CMU_CMU_1B_CFG_RESERVE_7_0, x) 2218 + #define SD_CMU_CMU_1B_CFG_RESERVE_7_0_GET(x)\ 2219 + FIELD_GET(SD_CMU_CMU_1B_CFG_RESERVE_7_0, x) 2220 + 2221 + /* SD10G_CMU_TARGET:CMU_GRP_4:CMU_1F */ 2222 + #define SD_CMU_CMU_1F(t) __REG(TARGET_SD_CMU, t, 14, 124, 0, 1, 68, 0, 0, 1, 4) 2223 + 2224 + #define SD_CMU_CMU_1F_CFG_BIAS_DN_EN BIT(0) 2225 + #define SD_CMU_CMU_1F_CFG_BIAS_DN_EN_SET(x)\ 2226 + FIELD_PREP(SD_CMU_CMU_1F_CFG_BIAS_DN_EN, x) 2227 + #define SD_CMU_CMU_1F_CFG_BIAS_DN_EN_GET(x)\ 2228 + FIELD_GET(SD_CMU_CMU_1F_CFG_BIAS_DN_EN, x) 2229 + 2230 + #define SD_CMU_CMU_1F_CFG_BIAS_UP_EN BIT(1) 2231 + #define SD_CMU_CMU_1F_CFG_BIAS_UP_EN_SET(x)\ 2232 + FIELD_PREP(SD_CMU_CMU_1F_CFG_BIAS_UP_EN, x) 2233 + #define SD_CMU_CMU_1F_CFG_BIAS_UP_EN_GET(x)\ 2234 + FIELD_GET(SD_CMU_CMU_1F_CFG_BIAS_UP_EN, x) 2235 + 2236 + #define SD_CMU_CMU_1F_CFG_IC2IP_N BIT(2) 2237 + #define SD_CMU_CMU_1F_CFG_IC2IP_N_SET(x)\ 2238 + FIELD_PREP(SD_CMU_CMU_1F_CFG_IC2IP_N, x) 2239 + #define SD_CMU_CMU_1F_CFG_IC2IP_N_GET(x)\ 2240 + FIELD_GET(SD_CMU_CMU_1F_CFG_IC2IP_N, x) 2241 + 2242 + #define SD_CMU_CMU_1F_CFG_VTUNE_SEL BIT(3) 2243 + #define SD_CMU_CMU_1F_CFG_VTUNE_SEL_SET(x)\ 2244 + FIELD_PREP(SD_CMU_CMU_1F_CFG_VTUNE_SEL, x) 2245 + #define SD_CMU_CMU_1F_CFG_VTUNE_SEL_GET(x)\ 2246 + FIELD_GET(SD_CMU_CMU_1F_CFG_VTUNE_SEL, x) 2247 + 2248 + /* SD10G_CMU_TARGET:CMU_GRP_5:CMU_30 */ 2249 + #define SD_CMU_CMU_30(t) __REG(TARGET_SD_CMU, t, 14, 192, 0, 1, 72, 0, 0, 1, 4) 2250 + 2251 + #define SD_CMU_CMU_30_R_PLL_DLOL_EN BIT(0) 2252 + #define SD_CMU_CMU_30_R_PLL_DLOL_EN_SET(x)\ 2253 + FIELD_PREP(SD_CMU_CMU_30_R_PLL_DLOL_EN, x) 2254 + #define SD_CMU_CMU_30_R_PLL_DLOL_EN_GET(x)\ 2255 + FIELD_GET(SD_CMU_CMU_30_R_PLL_DLOL_EN, x) 2256 + 2257 + /* SD10G_CMU_TARGET:CMU_GRP_6:CMU_44 */ 2258 + #define SD_CMU_CMU_44(t) __REG(TARGET_SD_CMU, t, 14, 264, 0, 1, 632, 8, 0, 1, 4) 2259 + 2260 + #define SD_CMU_CMU_44_R_PLL_RSTN BIT(0) 2261 + #define SD_CMU_CMU_44_R_PLL_RSTN_SET(x)\ 2262 + FIELD_PREP(SD_CMU_CMU_44_R_PLL_RSTN, x) 2263 + #define SD_CMU_CMU_44_R_PLL_RSTN_GET(x)\ 2264 + FIELD_GET(SD_CMU_CMU_44_R_PLL_RSTN, x) 2265 + 2266 + #define SD_CMU_CMU_44_R_CK_RESETB BIT(1) 2267 + #define SD_CMU_CMU_44_R_CK_RESETB_SET(x)\ 2268 + FIELD_PREP(SD_CMU_CMU_44_R_CK_RESETB, x) 2269 + #define SD_CMU_CMU_44_R_CK_RESETB_GET(x)\ 2270 + FIELD_GET(SD_CMU_CMU_44_R_CK_RESETB, x) 2271 + 2272 + /* SD10G_CMU_TARGET:CMU_GRP_6:CMU_45 */ 2273 + #define SD_CMU_CMU_45(t) __REG(TARGET_SD_CMU, t, 14, 264, 0, 1, 632, 12, 0, 1, 4) 2274 + 2275 + #define SD_CMU_CMU_45_R_EN_RATECHG_CTRL BIT(0) 2276 + #define SD_CMU_CMU_45_R_EN_RATECHG_CTRL_SET(x)\ 2277 + FIELD_PREP(SD_CMU_CMU_45_R_EN_RATECHG_CTRL, x) 2278 + #define SD_CMU_CMU_45_R_EN_RATECHG_CTRL_GET(x)\ 2279 + FIELD_GET(SD_CMU_CMU_45_R_EN_RATECHG_CTRL, x) 2280 + 2281 + #define SD_CMU_CMU_45_R_DWIDTHCTRL_FROM_HWT BIT(1) 2282 + #define SD_CMU_CMU_45_R_DWIDTHCTRL_FROM_HWT_SET(x)\ 2283 + FIELD_PREP(SD_CMU_CMU_45_R_DWIDTHCTRL_FROM_HWT, x) 2284 + #define SD_CMU_CMU_45_R_DWIDTHCTRL_FROM_HWT_GET(x)\ 2285 + FIELD_GET(SD_CMU_CMU_45_R_DWIDTHCTRL_FROM_HWT, x) 2286 + 2287 + #define SD_CMU_CMU_45_RESERVED BIT(2) 2288 + #define SD_CMU_CMU_45_RESERVED_SET(x)\ 2289 + FIELD_PREP(SD_CMU_CMU_45_RESERVED, x) 2290 + #define SD_CMU_CMU_45_RESERVED_GET(x)\ 2291 + FIELD_GET(SD_CMU_CMU_45_RESERVED, x) 2292 + 2293 + #define SD_CMU_CMU_45_R_REFCK_SSC_EN_FROM_HWT BIT(3) 2294 + #define SD_CMU_CMU_45_R_REFCK_SSC_EN_FROM_HWT_SET(x)\ 2295 + FIELD_PREP(SD_CMU_CMU_45_R_REFCK_SSC_EN_FROM_HWT, x) 2296 + #define SD_CMU_CMU_45_R_REFCK_SSC_EN_FROM_HWT_GET(x)\ 2297 + FIELD_GET(SD_CMU_CMU_45_R_REFCK_SSC_EN_FROM_HWT, x) 2298 + 2299 + #define SD_CMU_CMU_45_RESERVED_2 BIT(4) 2300 + #define SD_CMU_CMU_45_RESERVED_2_SET(x)\ 2301 + FIELD_PREP(SD_CMU_CMU_45_RESERVED_2, x) 2302 + #define SD_CMU_CMU_45_RESERVED_2_GET(x)\ 2303 + FIELD_GET(SD_CMU_CMU_45_RESERVED_2, x) 2304 + 2305 + #define SD_CMU_CMU_45_R_LINK_BUF_EN_FROM_HWT BIT(5) 2306 + #define SD_CMU_CMU_45_R_LINK_BUF_EN_FROM_HWT_SET(x)\ 2307 + FIELD_PREP(SD_CMU_CMU_45_R_LINK_BUF_EN_FROM_HWT, x) 2308 + #define SD_CMU_CMU_45_R_LINK_BUF_EN_FROM_HWT_GET(x)\ 2309 + FIELD_GET(SD_CMU_CMU_45_R_LINK_BUF_EN_FROM_HWT, x) 2310 + 2311 + #define SD_CMU_CMU_45_R_BIAS_EN_FROM_HWT BIT(6) 2312 + #define SD_CMU_CMU_45_R_BIAS_EN_FROM_HWT_SET(x)\ 2313 + FIELD_PREP(SD_CMU_CMU_45_R_BIAS_EN_FROM_HWT, x) 2314 + #define SD_CMU_CMU_45_R_BIAS_EN_FROM_HWT_GET(x)\ 2315 + FIELD_GET(SD_CMU_CMU_45_R_BIAS_EN_FROM_HWT, x) 2316 + 2317 + #define SD_CMU_CMU_45_R_AUTO_RST_TREE_PD_MAN BIT(7) 2318 + #define SD_CMU_CMU_45_R_AUTO_RST_TREE_PD_MAN_SET(x)\ 2319 + FIELD_PREP(SD_CMU_CMU_45_R_AUTO_RST_TREE_PD_MAN, x) 2320 + #define SD_CMU_CMU_45_R_AUTO_RST_TREE_PD_MAN_GET(x)\ 2321 + FIELD_GET(SD_CMU_CMU_45_R_AUTO_RST_TREE_PD_MAN, x) 2322 + 2323 + /* SD10G_CMU_TARGET:CMU_GRP_6:CMU_47 */ 2324 + #define SD_CMU_CMU_47(t) __REG(TARGET_SD_CMU, t, 14, 264, 0, 1, 632, 20, 0, 1, 4) 2325 + 2326 + #define SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0 GENMASK(4, 0) 2327 + #define SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0_SET(x)\ 2328 + FIELD_PREP(SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0, x) 2329 + #define SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0_GET(x)\ 2330 + FIELD_GET(SD_CMU_CMU_47_R_PCS2PMA_PHYMODE_4_0, x) 2331 + 2332 + /* SD10G_CMU_TARGET:CMU_GRP_7:CMU_E0 */ 2333 + #define SD_CMU_CMU_E0(t) __REG(TARGET_SD_CMU, t, 14, 896, 0, 1, 8, 0, 0, 1, 4) 2334 + 2335 + #define SD_CMU_CMU_E0_READ_VCO_CTUNE_3_0 GENMASK(3, 0) 2336 + #define SD_CMU_CMU_E0_READ_VCO_CTUNE_3_0_SET(x)\ 2337 + FIELD_PREP(SD_CMU_CMU_E0_READ_VCO_CTUNE_3_0, x) 2338 + #define SD_CMU_CMU_E0_READ_VCO_CTUNE_3_0_GET(x)\ 2339 + FIELD_GET(SD_CMU_CMU_E0_READ_VCO_CTUNE_3_0, x) 2340 + 2341 + #define SD_CMU_CMU_E0_PLL_LOL_UDL BIT(4) 2342 + #define SD_CMU_CMU_E0_PLL_LOL_UDL_SET(x)\ 2343 + FIELD_PREP(SD_CMU_CMU_E0_PLL_LOL_UDL, x) 2344 + #define SD_CMU_CMU_E0_PLL_LOL_UDL_GET(x)\ 2345 + FIELD_GET(SD_CMU_CMU_E0_PLL_LOL_UDL, x) 2346 + 2347 + /* SD_CMU_TARGET:SD_CMU_CFG:SD_CMU_CFG */ 2348 + #define SD_CMU_CFG_SD_CMU_CFG(t) __REG(TARGET_SD_CMU_CFG, t, 14, 0, 0, 1, 8, 0, 0, 1, 4) 2349 + 2350 + #define SD_CMU_CFG_SD_CMU_CFG_CMU_RST BIT(0) 2351 + #define SD_CMU_CFG_SD_CMU_CFG_CMU_RST_SET(x)\ 2352 + FIELD_PREP(SD_CMU_CFG_SD_CMU_CFG_CMU_RST, x) 2353 + #define SD_CMU_CFG_SD_CMU_CFG_CMU_RST_GET(x)\ 2354 + FIELD_GET(SD_CMU_CFG_SD_CMU_CFG_CMU_RST, x) 2355 + 2356 + #define SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST BIT(1) 2357 + #define SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST_SET(x)\ 2358 + FIELD_PREP(SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST, x) 2359 + #define SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST_GET(x)\ 2360 + FIELD_GET(SD_CMU_CFG_SD_CMU_CFG_EXT_CFG_RST, x) 2361 + 2362 + /* SD_LANE_TARGET:SD_RESET:SD_SER_RST */ 2363 + #define SD_LANE_SD_SER_RST(t) __REG(TARGET_SD_LANE, t, 25, 0, 0, 1, 8, 0, 0, 1, 4) 2364 + 2365 + #define SD_LANE_SD_SER_RST_SER_RST BIT(0) 2366 + #define SD_LANE_SD_SER_RST_SER_RST_SET(x)\ 2367 + FIELD_PREP(SD_LANE_SD_SER_RST_SER_RST, x) 2368 + #define SD_LANE_SD_SER_RST_SER_RST_GET(x)\ 2369 + FIELD_GET(SD_LANE_SD_SER_RST_SER_RST, x) 2370 + 2371 + /* SD_LANE_TARGET:SD_RESET:SD_DES_RST */ 2372 + #define SD_LANE_SD_DES_RST(t) __REG(TARGET_SD_LANE, t, 25, 0, 0, 1, 8, 4, 0, 1, 4) 2373 + 2374 + #define SD_LANE_SD_DES_RST_DES_RST BIT(0) 2375 + #define SD_LANE_SD_DES_RST_DES_RST_SET(x)\ 2376 + FIELD_PREP(SD_LANE_SD_DES_RST_DES_RST, x) 2377 + #define SD_LANE_SD_DES_RST_DES_RST_GET(x)\ 2378 + FIELD_GET(SD_LANE_SD_DES_RST_DES_RST, x) 2379 + 2380 + /* SD_LANE_TARGET:SD_LANE_CFG_STAT:SD_LANE_CFG */ 2381 + #define SD_LANE_SD_LANE_CFG(t) __REG(TARGET_SD_LANE, t, 25, 8, 0, 1, 8, 0, 0, 1, 4) 2382 + 2383 + #define SD_LANE_SD_LANE_CFG_MACRO_RST BIT(0) 2384 + #define SD_LANE_SD_LANE_CFG_MACRO_RST_SET(x)\ 2385 + FIELD_PREP(SD_LANE_SD_LANE_CFG_MACRO_RST, x) 2386 + #define SD_LANE_SD_LANE_CFG_MACRO_RST_GET(x)\ 2387 + FIELD_GET(SD_LANE_SD_LANE_CFG_MACRO_RST, x) 2388 + 2389 + #define SD_LANE_SD_LANE_CFG_EXT_CFG_RST BIT(1) 2390 + #define SD_LANE_SD_LANE_CFG_EXT_CFG_RST_SET(x)\ 2391 + FIELD_PREP(SD_LANE_SD_LANE_CFG_EXT_CFG_RST, x) 2392 + #define SD_LANE_SD_LANE_CFG_EXT_CFG_RST_GET(x)\ 2393 + FIELD_GET(SD_LANE_SD_LANE_CFG_EXT_CFG_RST, x) 2394 + 2395 + #define SD_LANE_SD_LANE_CFG_TX_REF_SEL GENMASK(5, 4) 2396 + #define SD_LANE_SD_LANE_CFG_TX_REF_SEL_SET(x)\ 2397 + FIELD_PREP(SD_LANE_SD_LANE_CFG_TX_REF_SEL, x) 2398 + #define SD_LANE_SD_LANE_CFG_TX_REF_SEL_GET(x)\ 2399 + FIELD_GET(SD_LANE_SD_LANE_CFG_TX_REF_SEL, x) 2400 + 2401 + #define SD_LANE_SD_LANE_CFG_RX_REF_SEL GENMASK(7, 6) 2402 + #define SD_LANE_SD_LANE_CFG_RX_REF_SEL_SET(x)\ 2403 + FIELD_PREP(SD_LANE_SD_LANE_CFG_RX_REF_SEL, x) 2404 + #define SD_LANE_SD_LANE_CFG_RX_REF_SEL_GET(x)\ 2405 + FIELD_GET(SD_LANE_SD_LANE_CFG_RX_REF_SEL, x) 2406 + 2407 + #define SD_LANE_SD_LANE_CFG_LANE_RST BIT(8) 2408 + #define SD_LANE_SD_LANE_CFG_LANE_RST_SET(x)\ 2409 + FIELD_PREP(SD_LANE_SD_LANE_CFG_LANE_RST, x) 2410 + #define SD_LANE_SD_LANE_CFG_LANE_RST_GET(x)\ 2411 + FIELD_GET(SD_LANE_SD_LANE_CFG_LANE_RST, x) 2412 + 2413 + #define SD_LANE_SD_LANE_CFG_LANE_TX_RST BIT(9) 2414 + #define SD_LANE_SD_LANE_CFG_LANE_TX_RST_SET(x)\ 2415 + FIELD_PREP(SD_LANE_SD_LANE_CFG_LANE_TX_RST, x) 2416 + #define SD_LANE_SD_LANE_CFG_LANE_TX_RST_GET(x)\ 2417 + FIELD_GET(SD_LANE_SD_LANE_CFG_LANE_TX_RST, x) 2418 + 2419 + #define SD_LANE_SD_LANE_CFG_LANE_RX_RST BIT(10) 2420 + #define SD_LANE_SD_LANE_CFG_LANE_RX_RST_SET(x)\ 2421 + FIELD_PREP(SD_LANE_SD_LANE_CFG_LANE_RX_RST, x) 2422 + #define SD_LANE_SD_LANE_CFG_LANE_RX_RST_GET(x)\ 2423 + FIELD_GET(SD_LANE_SD_LANE_CFG_LANE_RX_RST, x) 2424 + 2425 + /* SD_LANE_TARGET:SD_LANE_CFG_STAT:SD_LANE_STAT */ 2426 + #define SD_LANE_SD_LANE_STAT(t) __REG(TARGET_SD_LANE, t, 25, 8, 0, 1, 8, 4, 0, 1, 4) 2427 + 2428 + #define SD_LANE_SD_LANE_STAT_PMA_RST_DONE BIT(0) 2429 + #define SD_LANE_SD_LANE_STAT_PMA_RST_DONE_SET(x)\ 2430 + FIELD_PREP(SD_LANE_SD_LANE_STAT_PMA_RST_DONE, x) 2431 + #define SD_LANE_SD_LANE_STAT_PMA_RST_DONE_GET(x)\ 2432 + FIELD_GET(SD_LANE_SD_LANE_STAT_PMA_RST_DONE, x) 2433 + 2434 + #define SD_LANE_SD_LANE_STAT_DFE_RST_DONE BIT(1) 2435 + #define SD_LANE_SD_LANE_STAT_DFE_RST_DONE_SET(x)\ 2436 + FIELD_PREP(SD_LANE_SD_LANE_STAT_DFE_RST_DONE, x) 2437 + #define SD_LANE_SD_LANE_STAT_DFE_RST_DONE_GET(x)\ 2438 + FIELD_GET(SD_LANE_SD_LANE_STAT_DFE_RST_DONE, x) 2439 + 2440 + #define SD_LANE_SD_LANE_STAT_DBG_OBS GENMASK(31, 16) 2441 + #define SD_LANE_SD_LANE_STAT_DBG_OBS_SET(x)\ 2442 + FIELD_PREP(SD_LANE_SD_LANE_STAT_DBG_OBS, x) 2443 + #define SD_LANE_SD_LANE_STAT_DBG_OBS_GET(x)\ 2444 + FIELD_GET(SD_LANE_SD_LANE_STAT_DBG_OBS, x) 2445 + 2446 + /* SD_LANE_TARGET:CFG_STAT_FX100:MISC */ 2447 + #define SD_LANE_MISC(t) __REG(TARGET_SD_LANE, t, 25, 56, 0, 1, 56, 0, 0, 1, 4) 2448 + 2449 + #define SD_LANE_MISC_SD_125_RST_DIS BIT(0) 2450 + #define SD_LANE_MISC_SD_125_RST_DIS_SET(x)\ 2451 + FIELD_PREP(SD_LANE_MISC_SD_125_RST_DIS, x) 2452 + #define SD_LANE_MISC_SD_125_RST_DIS_GET(x)\ 2453 + FIELD_GET(SD_LANE_MISC_SD_125_RST_DIS, x) 2454 + 2455 + #define SD_LANE_MISC_RX_ENA BIT(1) 2456 + #define SD_LANE_MISC_RX_ENA_SET(x)\ 2457 + FIELD_PREP(SD_LANE_MISC_RX_ENA, x) 2458 + #define SD_LANE_MISC_RX_ENA_GET(x)\ 2459 + FIELD_GET(SD_LANE_MISC_RX_ENA, x) 2460 + 2461 + #define SD_LANE_MISC_MUX_ENA BIT(2) 2462 + #define SD_LANE_MISC_MUX_ENA_SET(x)\ 2463 + FIELD_PREP(SD_LANE_MISC_MUX_ENA, x) 2464 + #define SD_LANE_MISC_MUX_ENA_GET(x)\ 2465 + FIELD_GET(SD_LANE_MISC_MUX_ENA, x) 2466 + 2467 + #define SD_LANE_MISC_CORE_CLK_FREQ GENMASK(5, 4) 2468 + #define SD_LANE_MISC_CORE_CLK_FREQ_SET(x)\ 2469 + FIELD_PREP(SD_LANE_MISC_CORE_CLK_FREQ, x) 2470 + #define SD_LANE_MISC_CORE_CLK_FREQ_GET(x)\ 2471 + FIELD_GET(SD_LANE_MISC_CORE_CLK_FREQ, x) 2472 + 2473 + /* SD_LANE_TARGET:CFG_STAT_FX100:M_STAT_MISC */ 2474 + #define SD_LANE_M_STAT_MISC(t) __REG(TARGET_SD_LANE, t, 25, 56, 0, 1, 56, 36, 0, 1, 4) 2475 + 2476 + #define SD_LANE_M_STAT_MISC_M_RIS_EDGE_PTR_ADJ_SUM GENMASK(21, 0) 2477 + #define SD_LANE_M_STAT_MISC_M_RIS_EDGE_PTR_ADJ_SUM_SET(x)\ 2478 + FIELD_PREP(SD_LANE_M_STAT_MISC_M_RIS_EDGE_PTR_ADJ_SUM, x) 2479 + #define SD_LANE_M_STAT_MISC_M_RIS_EDGE_PTR_ADJ_SUM_GET(x)\ 2480 + FIELD_GET(SD_LANE_M_STAT_MISC_M_RIS_EDGE_PTR_ADJ_SUM, x) 2481 + 2482 + #define SD_LANE_M_STAT_MISC_M_LOCK_CNT GENMASK(31, 24) 2483 + #define SD_LANE_M_STAT_MISC_M_LOCK_CNT_SET(x)\ 2484 + FIELD_PREP(SD_LANE_M_STAT_MISC_M_LOCK_CNT, x) 2485 + #define SD_LANE_M_STAT_MISC_M_LOCK_CNT_GET(x)\ 2486 + FIELD_GET(SD_LANE_M_STAT_MISC_M_LOCK_CNT, x) 2487 + 2488 + /* SD25G_CFG_TARGET:SD_RESET:SD_SER_RST */ 2489 + #define SD_LANE_25G_SD_SER_RST(t) __REG(TARGET_SD_LANE_25G, t, 8, 0, 0, 1, 8, 0, 0, 1, 4) 2490 + 2491 + #define SD_LANE_25G_SD_SER_RST_SER_RST BIT(0) 2492 + #define SD_LANE_25G_SD_SER_RST_SER_RST_SET(x)\ 2493 + FIELD_PREP(SD_LANE_25G_SD_SER_RST_SER_RST, x) 2494 + #define SD_LANE_25G_SD_SER_RST_SER_RST_GET(x)\ 2495 + FIELD_GET(SD_LANE_25G_SD_SER_RST_SER_RST, x) 2496 + 2497 + /* SD25G_CFG_TARGET:SD_RESET:SD_DES_RST */ 2498 + #define SD_LANE_25G_SD_DES_RST(t) __REG(TARGET_SD_LANE_25G, t, 8, 0, 0, 1, 8, 4, 0, 1, 4) 2499 + 2500 + #define SD_LANE_25G_SD_DES_RST_DES_RST BIT(0) 2501 + #define SD_LANE_25G_SD_DES_RST_DES_RST_SET(x)\ 2502 + FIELD_PREP(SD_LANE_25G_SD_DES_RST_DES_RST, x) 2503 + #define SD_LANE_25G_SD_DES_RST_DES_RST_GET(x)\ 2504 + FIELD_GET(SD_LANE_25G_SD_DES_RST_DES_RST, x) 2505 + 2506 + /* SD25G_CFG_TARGET:SD_LANE_CFG_STAT:SD_LANE_CFG */ 2507 + #define SD_LANE_25G_SD_LANE_CFG(t) __REG(TARGET_SD_LANE_25G, t, 8, 8, 0, 1, 12, 0, 0, 1, 4) 2508 + 2509 + #define SD_LANE_25G_SD_LANE_CFG_MACRO_RST BIT(0) 2510 + #define SD_LANE_25G_SD_LANE_CFG_MACRO_RST_SET(x)\ 2511 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_MACRO_RST, x) 2512 + #define SD_LANE_25G_SD_LANE_CFG_MACRO_RST_GET(x)\ 2513 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_MACRO_RST, x) 2514 + 2515 + #define SD_LANE_25G_SD_LANE_CFG_EXT_CFG_RST BIT(1) 2516 + #define SD_LANE_25G_SD_LANE_CFG_EXT_CFG_RST_SET(x)\ 2517 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_EXT_CFG_RST, x) 2518 + #define SD_LANE_25G_SD_LANE_CFG_EXT_CFG_RST_GET(x)\ 2519 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_EXT_CFG_RST, x) 2520 + 2521 + #define SD_LANE_25G_SD_LANE_CFG_HWT_MULTI_LANE_MODE BIT(4) 2522 + #define SD_LANE_25G_SD_LANE_CFG_HWT_MULTI_LANE_MODE_SET(x)\ 2523 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_HWT_MULTI_LANE_MODE, x) 2524 + #define SD_LANE_25G_SD_LANE_CFG_HWT_MULTI_LANE_MODE_GET(x)\ 2525 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_HWT_MULTI_LANE_MODE, x) 2526 + 2527 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_PHYMODE GENMASK(7, 5) 2528 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_PHYMODE_SET(x)\ 2529 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS2PMA_PHYMODE, x) 2530 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_PHYMODE_GET(x)\ 2531 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS2PMA_PHYMODE, x) 2532 + 2533 + #define SD_LANE_25G_SD_LANE_CFG_LANE_RST BIT(8) 2534 + #define SD_LANE_25G_SD_LANE_CFG_LANE_RST_SET(x)\ 2535 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_LANE_RST, x) 2536 + #define SD_LANE_25G_SD_LANE_CFG_LANE_RST_GET(x)\ 2537 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_LANE_RST, x) 2538 + 2539 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_ADV BIT(9) 2540 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_ADV_SET(x)\ 2541 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS_EN_ADV, x) 2542 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_ADV_GET(x)\ 2543 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS_EN_ADV, x) 2544 + 2545 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_MAIN BIT(10) 2546 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_MAIN_SET(x)\ 2547 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS_EN_MAIN, x) 2548 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_MAIN_GET(x)\ 2549 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS_EN_MAIN, x) 2550 + 2551 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_DLY BIT(11) 2552 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_DLY_SET(x)\ 2553 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS_EN_DLY, x) 2554 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_DLY_GET(x)\ 2555 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS_EN_DLY, x) 2556 + 2557 + #define SD_LANE_25G_SD_LANE_CFG_PCS_TAP_ADV GENMASK(15, 12) 2558 + #define SD_LANE_25G_SD_LANE_CFG_PCS_TAP_ADV_SET(x)\ 2559 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS_TAP_ADV, x) 2560 + #define SD_LANE_25G_SD_LANE_CFG_PCS_TAP_ADV_GET(x)\ 2561 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS_TAP_ADV, x) 2562 + 2563 + #define SD_LANE_25G_SD_LANE_CFG_PCS_TAP_MAIN BIT(16) 2564 + #define SD_LANE_25G_SD_LANE_CFG_PCS_TAP_MAIN_SET(x)\ 2565 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS_TAP_MAIN, x) 2566 + #define SD_LANE_25G_SD_LANE_CFG_PCS_TAP_MAIN_GET(x)\ 2567 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS_TAP_MAIN, x) 2568 + 2569 + #define SD_LANE_25G_SD_LANE_CFG_PCS_TAP_DLY GENMASK(21, 17) 2570 + #define SD_LANE_25G_SD_LANE_CFG_PCS_TAP_DLY_SET(x)\ 2571 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS_TAP_DLY, x) 2572 + #define SD_LANE_25G_SD_LANE_CFG_PCS_TAP_DLY_GET(x)\ 2573 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS_TAP_DLY, x) 2574 + 2575 + #define SD_LANE_25G_SD_LANE_CFG_PCS_ISCAN_EN BIT(22) 2576 + #define SD_LANE_25G_SD_LANE_CFG_PCS_ISCAN_EN_SET(x)\ 2577 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS_ISCAN_EN, x) 2578 + #define SD_LANE_25G_SD_LANE_CFG_PCS_ISCAN_EN_GET(x)\ 2579 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS_ISCAN_EN, x) 2580 + 2581 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_FAST_ISCAN BIT(23) 2582 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_FAST_ISCAN_SET(x)\ 2583 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS_EN_FAST_ISCAN, x) 2584 + #define SD_LANE_25G_SD_LANE_CFG_PCS_EN_FAST_ISCAN_GET(x)\ 2585 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS_EN_FAST_ISCAN, x) 2586 + 2587 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXSWING BIT(24) 2588 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXSWING_SET(x)\ 2589 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXSWING, x) 2590 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXSWING_GET(x)\ 2591 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXSWING, x) 2592 + 2593 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXEI BIT(25) 2594 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXEI_SET(x)\ 2595 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXEI, x) 2596 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXEI_GET(x)\ 2597 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXEI, x) 2598 + 2599 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXMARGIN GENMASK(28, 26) 2600 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXMARGIN_SET(x)\ 2601 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXMARGIN, x) 2602 + #define SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXMARGIN_GET(x)\ 2603 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG_PCS2PMA_TXMARGIN, x) 2604 + 2605 + /* SD25G_CFG_TARGET:SD_LANE_CFG_STAT:SD_LANE_CFG2 */ 2606 + #define SD_LANE_25G_SD_LANE_CFG2(t) __REG(TARGET_SD_LANE_25G, t, 8, 8, 0, 1, 12, 4, 0, 1, 4) 2607 + 2608 + #define SD_LANE_25G_SD_LANE_CFG2_DATA_WIDTH_SEL GENMASK(2, 0) 2609 + #define SD_LANE_25G_SD_LANE_CFG2_DATA_WIDTH_SEL_SET(x)\ 2610 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_DATA_WIDTH_SEL, x) 2611 + #define SD_LANE_25G_SD_LANE_CFG2_DATA_WIDTH_SEL_GET(x)\ 2612 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_DATA_WIDTH_SEL, x) 2613 + 2614 + #define SD_LANE_25G_SD_LANE_CFG2_PMA_TXCK_SEL GENMASK(5, 3) 2615 + #define SD_LANE_25G_SD_LANE_CFG2_PMA_TXCK_SEL_SET(x)\ 2616 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_PMA_TXCK_SEL, x) 2617 + #define SD_LANE_25G_SD_LANE_CFG2_PMA_TXCK_SEL_GET(x)\ 2618 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_PMA_TXCK_SEL, x) 2619 + 2620 + #define SD_LANE_25G_SD_LANE_CFG2_PMA_RXDIV_SEL GENMASK(8, 6) 2621 + #define SD_LANE_25G_SD_LANE_CFG2_PMA_RXDIV_SEL_SET(x)\ 2622 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_PMA_RXDIV_SEL, x) 2623 + #define SD_LANE_25G_SD_LANE_CFG2_PMA_RXDIV_SEL_GET(x)\ 2624 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_PMA_RXDIV_SEL, x) 2625 + 2626 + #define SD_LANE_25G_SD_LANE_CFG2_PCS2PMA_TX_SPEED GENMASK(10, 9) 2627 + #define SD_LANE_25G_SD_LANE_CFG2_PCS2PMA_TX_SPEED_SET(x)\ 2628 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_PCS2PMA_TX_SPEED, x) 2629 + #define SD_LANE_25G_SD_LANE_CFG2_PCS2PMA_TX_SPEED_GET(x)\ 2630 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_PCS2PMA_TX_SPEED, x) 2631 + 2632 + #define SD_LANE_25G_SD_LANE_CFG2_TXFIFO_CK_DIV GENMASK(13, 11) 2633 + #define SD_LANE_25G_SD_LANE_CFG2_TXFIFO_CK_DIV_SET(x)\ 2634 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_TXFIFO_CK_DIV, x) 2635 + #define SD_LANE_25G_SD_LANE_CFG2_TXFIFO_CK_DIV_GET(x)\ 2636 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_TXFIFO_CK_DIV, x) 2637 + 2638 + #define SD_LANE_25G_SD_LANE_CFG2_RXFIFO_CK_DIV GENMASK(16, 14) 2639 + #define SD_LANE_25G_SD_LANE_CFG2_RXFIFO_CK_DIV_SET(x)\ 2640 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_RXFIFO_CK_DIV, x) 2641 + #define SD_LANE_25G_SD_LANE_CFG2_RXFIFO_CK_DIV_GET(x)\ 2642 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_RXFIFO_CK_DIV, x) 2643 + 2644 + #define SD_LANE_25G_SD_LANE_CFG2_HWT_VCO_DIV_SEL GENMASK(19, 17) 2645 + #define SD_LANE_25G_SD_LANE_CFG2_HWT_VCO_DIV_SEL_SET(x)\ 2646 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_HWT_VCO_DIV_SEL, x) 2647 + #define SD_LANE_25G_SD_LANE_CFG2_HWT_VCO_DIV_SEL_GET(x)\ 2648 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_HWT_VCO_DIV_SEL, x) 2649 + 2650 + #define SD_LANE_25G_SD_LANE_CFG2_HWT_CFG_SEL_DIV GENMASK(23, 20) 2651 + #define SD_LANE_25G_SD_LANE_CFG2_HWT_CFG_SEL_DIV_SET(x)\ 2652 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_HWT_CFG_SEL_DIV, x) 2653 + #define SD_LANE_25G_SD_LANE_CFG2_HWT_CFG_SEL_DIV_GET(x)\ 2654 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_HWT_CFG_SEL_DIV, x) 2655 + 2656 + #define SD_LANE_25G_SD_LANE_CFG2_HWT_PRE_DIVSEL GENMASK(25, 24) 2657 + #define SD_LANE_25G_SD_LANE_CFG2_HWT_PRE_DIVSEL_SET(x)\ 2658 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_HWT_PRE_DIVSEL, x) 2659 + #define SD_LANE_25G_SD_LANE_CFG2_HWT_PRE_DIVSEL_GET(x)\ 2660 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_HWT_PRE_DIVSEL, x) 2661 + 2662 + #define SD_LANE_25G_SD_LANE_CFG2_TXRATE_SEL GENMASK(28, 26) 2663 + #define SD_LANE_25G_SD_LANE_CFG2_TXRATE_SEL_SET(x)\ 2664 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_TXRATE_SEL, x) 2665 + #define SD_LANE_25G_SD_LANE_CFG2_TXRATE_SEL_GET(x)\ 2666 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_TXRATE_SEL, x) 2667 + 2668 + #define SD_LANE_25G_SD_LANE_CFG2_RXRATE_SEL GENMASK(31, 29) 2669 + #define SD_LANE_25G_SD_LANE_CFG2_RXRATE_SEL_SET(x)\ 2670 + FIELD_PREP(SD_LANE_25G_SD_LANE_CFG2_RXRATE_SEL, x) 2671 + #define SD_LANE_25G_SD_LANE_CFG2_RXRATE_SEL_GET(x)\ 2672 + FIELD_GET(SD_LANE_25G_SD_LANE_CFG2_RXRATE_SEL, x) 2673 + 2674 + /* SD25G_CFG_TARGET:SD_LANE_CFG_STAT:SD_LANE_STAT */ 2675 + #define SD_LANE_25G_SD_LANE_STAT(t) __REG(TARGET_SD_LANE_25G, t, 8, 8, 0, 1, 12, 8, 0, 1, 4) 2676 + 2677 + #define SD_LANE_25G_SD_LANE_STAT_PMA_RST_DONE BIT(0) 2678 + #define SD_LANE_25G_SD_LANE_STAT_PMA_RST_DONE_SET(x)\ 2679 + FIELD_PREP(SD_LANE_25G_SD_LANE_STAT_PMA_RST_DONE, x) 2680 + #define SD_LANE_25G_SD_LANE_STAT_PMA_RST_DONE_GET(x)\ 2681 + FIELD_GET(SD_LANE_25G_SD_LANE_STAT_PMA_RST_DONE, x) 2682 + 2683 + #define SD_LANE_25G_SD_LANE_STAT_LANE_RST_DONE BIT(1) 2684 + #define SD_LANE_25G_SD_LANE_STAT_LANE_RST_DONE_SET(x)\ 2685 + FIELD_PREP(SD_LANE_25G_SD_LANE_STAT_LANE_RST_DONE, x) 2686 + #define SD_LANE_25G_SD_LANE_STAT_LANE_RST_DONE_GET(x)\ 2687 + FIELD_GET(SD_LANE_25G_SD_LANE_STAT_LANE_RST_DONE, x) 2688 + 2689 + #define SD_LANE_25G_SD_LANE_STAT_DBG_OBS GENMASK(31, 16) 2690 + #define SD_LANE_25G_SD_LANE_STAT_DBG_OBS_SET(x)\ 2691 + FIELD_PREP(SD_LANE_25G_SD_LANE_STAT_DBG_OBS, x) 2692 + #define SD_LANE_25G_SD_LANE_STAT_DBG_OBS_GET(x)\ 2693 + FIELD_GET(SD_LANE_25G_SD_LANE_STAT_DBG_OBS, x) 2694 + 2695 + #endif /* _SPARX5_SERDES_REGS_H_ */