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

Configure Feed

Select the types of activity you want to include in your feed.

phy: lynx-28g: convert iowrite32() calls with magic values to macros

The driver will need to become more careful with the values it writes to
the TX and RX equalization registers. As a preliminary step, convert the
magic numbers to macros defining the register field meanings.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://patch.msgid.link/20251125114847.804961-9-vladimir.oltean@nxp.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Vladimir Oltean and committed by
Vinod Koul
90d985a0 3b84377c

+90 -12
+90 -12
drivers/phy/freescale/phy-fsl-lynx-28g.c
··· 70 70 #define LNaTGCR0_N_RATE_QUARTER 0x2 71 71 72 72 #define LNaTECR0(lane) (0x800 + (lane) * 0x100 + 0x30) 73 + #define LNaTECR0_EQ_TYPE GENMASK(30, 28) 74 + #define LNaTECR0_EQ_SGN_PREQ BIT(23) 75 + #define LNaTECR0_EQ_PREQ GENMASK(19, 16) 76 + #define LNaTECR0_EQ_SGN_POST1Q BIT(15) 77 + #define LNaTECR0_EQ_POST1Q GENMASK(12, 8) 78 + #define LNaTECR0_EQ_AMP_RED GENMASK(5, 0) 73 79 74 80 /* Lane a Rx Reset Control Register */ 75 81 #define LNaRRSTCTL(lane) (0x800 + (lane) * 0x100 + 0x40) ··· 95 89 #define LNaRGCR0_N_RATE_QUARTER 0x2 96 90 97 91 #define LNaRGCR1(lane) (0x800 + (lane) * 0x100 + 0x48) 92 + #define LNaRGCR1_RX_ORD_ELECIDLE BIT(31) 93 + #define LNaRGCR1_DATA_LOST_FLT BIT(30) 94 + #define LNaRGCR1_DATA_LOST BIT(29) 95 + #define LNaRGCR1_IDLE_CONFIG BIT(28) 96 + #define LNaRGCR1_ENTER_IDLE_FLT_SEL GENMASK(26, 24) 97 + #define LNaRGCR1_EXIT_IDLE_FLT_SEL GENMASK(22, 20) 98 + #define LNaRGCR1_DATA_LOST_TH_SEL GENMASK(18, 16) 99 + #define LNaRGCR1_EXT_REC_CLK_SEL GENMASK(10, 8) 100 + #define LNaRGCR1_WAKE_TX_DIS BIT(5) 101 + #define LNaRGCR1_PHY_RDY BIT(4) 102 + #define LNaRGCR1_CHANGE_RX_CLK BIT(3) 103 + #define LNaRGCR1_PWR_MGT GENMASK(2, 0) 98 104 99 105 #define LNaRECR0(lane) (0x800 + (lane) * 0x100 + 0x50) 106 + #define LNaRECR0_EQ_GAINK2_HF_OV_EN BIT(31) 107 + #define LNaRECR0_EQ_GAINK2_HF_OV GENMASK(28, 24) 108 + #define LNaRECR0_EQ_GAINK3_MF_OV_EN BIT(23) 109 + #define LNaRECR0_EQ_GAINK3_MF_OV GENMASK(20, 16) 110 + #define LNaRECR0_EQ_GAINK4_LF_OV_EN BIT(7) 111 + #define LNaRECR0_EQ_GAINK4_LF_DIS BIT(6) 112 + #define LNaRECR0_EQ_GAINK4_LF_OV GENMASK(4, 0) 113 + 100 114 #define LNaRECR1(lane) (0x800 + (lane) * 0x100 + 0x54) 115 + #define LNaRECR1_EQ_BLW_OV_EN BIT(31) 116 + #define LNaRECR1_EQ_BLW_OV GENMASK(28, 24) 117 + #define LNaRECR1_EQ_OFFSET_OV_EN BIT(23) 118 + #define LNaRECR1_EQ_OFFSET_OV GENMASK(21, 16) 119 + 101 120 #define LNaRECR2(lane) (0x800 + (lane) * 0x100 + 0x58) 121 + #define LNaRECR2_EQ_OFFSET_RNG_DBL BIT(31) 122 + #define LNaRECR2_EQ_BOOST GENMASK(29, 28) 123 + #define LNaRECR2_EQ_BLW_SEL GENMASK(25, 24) 124 + #define LNaRECR2_EQ_ZERO GENMASK(17, 16) 125 + #define LNaRECR2_EQ_IND GENMASK(13, 12) 126 + #define LNaRECR2_EQ_BIN_DATA_AVG_TC GENMASK(5, 4) 127 + #define LNaRECR2_SPARE_IN GENMASK(1, 0) 102 128 103 129 #define LNaRSCCR0(lane) (0x800 + (lane) * 0x100 + 0x74) 130 + #define LNaRSCCR0_SMP_OFF_EN BIT(31) 131 + #define LNaRSCCR0_SMP_OFF_OV_EN BIT(30) 132 + #define LNaRSCCR0_SMP_MAN_OFF_EN BIT(29) 133 + #define LNaRSCCR0_SMP_OFF_RNG_OV_EN BIT(27) 134 + #define LNaRSCCR0_SMP_OFF_RNG_4X_OV BIT(25) 135 + #define LNaRSCCR0_SMP_OFF_RNG_2X_OV BIT(24) 136 + #define LNaRSCCR0_SMP_AUTOZ_PD BIT(23) 137 + #define LNaRSCCR0_SMP_AUTOZ_CTRL GENMASK(19, 16) 138 + #define LNaRSCCR0_SMP_AUTOZ_D1R GENMASK(13, 12) 139 + #define LNaRSCCR0_SMP_AUTOZ_D1F GENMASK(9, 8) 140 + #define LNaRSCCR0_SMP_AUTOZ_EG1R GENMASK(5, 4) 141 + #define LNaRSCCR0_SMP_AUTOZ_EG1F GENMASK(1, 0) 104 142 105 143 #define LNaPSS(lane) (0x1000 + (lane) * 0x4) 106 144 #define LNaPSS_TYPE GENMASK(30, 24) ··· 153 103 154 104 #define SGMIIaCR1(lane) (0x1804 + (lane) * 0x10) 155 105 #define SGMIIaCR1_SGPCS_EN BIT(11) 106 + 107 + enum lynx_28g_eq_type { 108 + EQ_TYPE_NO_EQ = 0, 109 + EQ_TYPE_2TAP = 1, 110 + EQ_TYPE_3TAP = 2, 111 + }; 156 112 157 113 struct lynx_28g_priv; 158 114 ··· 207 151 lynx_28g_rmw((lane)->priv, reg(lane->id), val, mask) 208 152 #define lynx_28g_lane_read(lane, reg) \ 209 153 ioread32((lane)->priv->base + reg((lane)->id)) 154 + #define lynx_28g_lane_write(lane, reg, val) \ 155 + iowrite32(val, (lane)->priv->base + reg((lane)->id)) 210 156 #define lynx_28g_pll_read(pll, reg) \ 211 157 ioread32((pll)->priv->base + reg((pll)->id)) 212 158 ··· 369 311 SGMIIaCR1_SGPCS_EN); 370 312 371 313 /* Configure the appropriate equalization parameters for the protocol */ 372 - iowrite32(0x00808006, priv->base + LNaTECR0(lane->id)); 373 - iowrite32(0x04310000, priv->base + LNaRGCR1(lane->id)); 374 - iowrite32(0x9f800000, priv->base + LNaRECR0(lane->id)); 375 - iowrite32(0x001f0000, priv->base + LNaRECR1(lane->id)); 376 - iowrite32(0x00000000, priv->base + LNaRECR2(lane->id)); 377 - iowrite32(0x00000000, priv->base + LNaRSCCR0(lane->id)); 314 + lynx_28g_lane_write(lane, LNaTECR0, 315 + LNaTECR0_EQ_SGN_PREQ | LNaTECR0_EQ_SGN_POST1Q | 316 + FIELD_PREP(LNaTECR0_EQ_AMP_RED, 6)); 317 + lynx_28g_lane_write(lane, LNaRGCR1, 318 + FIELD_PREP(LNaRGCR1_ENTER_IDLE_FLT_SEL, 4) | 319 + FIELD_PREP(LNaRGCR1_EXIT_IDLE_FLT_SEL, 3) | 320 + LNaRGCR1_DATA_LOST_FLT); 321 + lynx_28g_lane_write(lane, LNaRECR0, 322 + LNaRECR0_EQ_GAINK2_HF_OV_EN | 323 + FIELD_PREP(LNaRECR0_EQ_GAINK2_HF_OV, 31) | 324 + LNaRECR0_EQ_GAINK3_MF_OV_EN | 325 + FIELD_PREP(LNaRECR0_EQ_GAINK3_MF_OV, 0)); 326 + lynx_28g_lane_write(lane, LNaRECR1, 327 + FIELD_PREP(LNaRECR1_EQ_OFFSET_OV, 31)); 328 + lynx_28g_lane_write(lane, LNaRECR2, 0); 329 + lynx_28g_lane_write(lane, LNaRSCCR0, 0); 378 330 } 379 331 380 332 static void lynx_28g_lane_set_10gbaser(struct lynx_28g_lane *lane) ··· 421 353 lynx_28g_lane_rmw(lane, SGMIIaCR1, 0, SGMIIaCR1_SGPCS_EN); 422 354 423 355 /* Configure the appropriate equalization parameters for the protocol */ 424 - iowrite32(0x10808307, priv->base + LNaTECR0(lane->id)); 425 - iowrite32(0x10000000, priv->base + LNaRGCR1(lane->id)); 426 - iowrite32(0x00000000, priv->base + LNaRECR0(lane->id)); 427 - iowrite32(0x001f0000, priv->base + LNaRECR1(lane->id)); 428 - iowrite32(0x81000020, priv->base + LNaRECR2(lane->id)); 429 - iowrite32(0x00002000, priv->base + LNaRSCCR0(lane->id)); 356 + lynx_28g_lane_write(lane, LNaTECR0, 357 + FIELD_PREP(LNaTECR0_EQ_TYPE, EQ_TYPE_2TAP) | 358 + LNaTECR0_EQ_SGN_PREQ | 359 + FIELD_PREP(LNaTECR0_EQ_PREQ, 0) | 360 + LNaTECR0_EQ_SGN_POST1Q | 361 + FIELD_PREP(LNaTECR0_EQ_POST1Q, 3) | 362 + FIELD_PREP(LNaTECR0_EQ_AMP_RED, 7)); 363 + lynx_28g_lane_write(lane, LNaRGCR1, LNaRGCR1_IDLE_CONFIG); 364 + lynx_28g_lane_write(lane, LNaRECR0, 0); 365 + lynx_28g_lane_write(lane, LNaRECR1, FIELD_PREP(LNaRECR1_EQ_OFFSET_OV, 31)); 366 + lynx_28g_lane_write(lane, LNaRECR2, 367 + LNaRECR2_EQ_OFFSET_RNG_DBL | 368 + FIELD_PREP(LNaRECR2_EQ_BLW_SEL, 1) | 369 + FIELD_PREP(LNaRECR2_EQ_BIN_DATA_AVG_TC, 2)); 370 + lynx_28g_lane_write(lane, LNaRSCCR0, 371 + FIELD_PREP(LNaRSCCR0_SMP_AUTOZ_D1R, 2)); 430 372 } 431 373 432 374 static int lynx_28g_power_off(struct phy *phy)