1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2024 AIROHA Inc 4 * Author: Lorenzo Bianconi <lorenzo@kernel.org> 5 */ 6 7 #include <linux/bitfield.h> 8 #include <linux/delay.h> 9 #include <linux/io.h> 10 #include <linux/module.h> 11 #include <linux/of.h> 12 #include <linux/phy/phy.h> 13 #include <linux/platform_device.h> 14 #include <linux/slab.h> 15 16 #include "phy-airoha-pcie-regs.h" 17 18 #define LEQ_LEN_CTRL_MAX_VAL 7 19 #define FREQ_LOCK_MAX_ATTEMPT 10 20 21 enum airoha_pcie_port_gen { 22 PCIE_PORT_GEN1 = 1, 23 PCIE_PORT_GEN2, 24 PCIE_PORT_GEN3, 25 }; 26 27 /** 28 * struct airoha_pcie_phy - PCIe phy driver main structure 29 * @dev: pointer to device 30 * @phy: pointer to generic phy 31 * @csr_2l: Analogic lane IO mapped register base address 32 * @pma0: IO mapped register base address of PMA0-PCIe 33 * @pma1: IO mapped register base address of PMA1-PCIe 34 * @p0_xr_dtime: IO mapped register base address of port0 Tx-Rx detection time 35 * @p1_xr_dtime: IO mapped register base address of port1 Tx-Rx detection time 36 * @rx_aeq: IO mapped register base address of Rx AEQ training 37 */ 38 struct airoha_pcie_phy { 39 struct device *dev; 40 struct phy *phy; 41 void __iomem *csr_2l; 42 void __iomem *pma0; 43 void __iomem *pma1; 44 void __iomem *p0_xr_dtime; 45 void __iomem *p1_xr_dtime; 46 void __iomem *rx_aeq; 47 }; 48 49 static void airoha_phy_clear_bits(void __iomem *reg, u32 mask) 50 { 51 u32 val = readl(reg) & ~mask; 52 53 writel(val, reg); 54 } 55 56 static void airoha_phy_set_bits(void __iomem *reg, u32 mask) 57 { 58 u32 val = readl(reg) | mask; 59 60 writel(val, reg); 61 } 62 63 static void airoha_phy_update_bits(void __iomem *reg, u32 mask, u32 val) 64 { 65 u32 tmp = readl(reg); 66 67 tmp &= ~mask; 68 tmp |= val & mask; 69 writel(tmp, reg); 70 } 71 72 #define airoha_phy_update_field(reg, mask, val) \ 73 do { \ 74 BUILD_BUG_ON_MSG(!__builtin_constant_p((mask)), \ 75 "mask is not constant"); \ 76 airoha_phy_update_bits((reg), (mask), \ 77 FIELD_PREP((mask), (val))); \ 78 } while (0) 79 80 #define airoha_phy_csr_2l_clear_bits(pcie_phy, reg, mask) \ 81 airoha_phy_clear_bits((pcie_phy)->csr_2l + (reg), (mask)) 82 #define airoha_phy_csr_2l_set_bits(pcie_phy, reg, mask) \ 83 airoha_phy_set_bits((pcie_phy)->csr_2l + (reg), (mask)) 84 #define airoha_phy_csr_2l_update_field(pcie_phy, reg, mask, val) \ 85 airoha_phy_update_field((pcie_phy)->csr_2l + (reg), (mask), (val)) 86 #define airoha_phy_pma0_clear_bits(pcie_phy, reg, mask) \ 87 airoha_phy_clear_bits((pcie_phy)->pma0 + (reg), (mask)) 88 #define airoha_phy_pma1_clear_bits(pcie_phy, reg, mask) \ 89 airoha_phy_clear_bits((pcie_phy)->pma1 + (reg), (mask)) 90 #define airoha_phy_pma0_set_bits(pcie_phy, reg, mask) \ 91 airoha_phy_set_bits((pcie_phy)->pma0 + (reg), (mask)) 92 #define airoha_phy_pma1_set_bits(pcie_phy, reg, mask) \ 93 airoha_phy_set_bits((pcie_phy)->pma1 + (reg), (mask)) 94 #define airoha_phy_pma0_update_field(pcie_phy, reg, mask, val) \ 95 airoha_phy_update_field((pcie_phy)->pma0 + (reg), (mask), (val)) 96 #define airoha_phy_pma1_update_field(pcie_phy, reg, mask, val) \ 97 airoha_phy_update_field((pcie_phy)->pma1 + (reg), (mask), (val)) 98 99 static void 100 airoha_phy_init_lane0_rx_fw_pre_calib(struct airoha_pcie_phy *pcie_phy, 101 enum airoha_pcie_port_gen gen) 102 { 103 u32 fl_out_target = gen == PCIE_PORT_GEN3 ? 41600 : 41941; 104 u32 lock_cyclecnt = gen == PCIE_PORT_GEN3 ? 26000 : 32767; 105 u32 pr_idac, val, cdr_pr_idac_tmp = 0; 106 int i; 107 108 airoha_phy_pma0_set_bits(pcie_phy, 109 REG_PCIE_PMA_SS_LCPLL_PWCTL_SETTING_1, 110 PCIE_LCPLL_MAN_PWDB); 111 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET2, 112 PCIE_LOCK_TARGET_BEG, 113 fl_out_target - 100); 114 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET2, 115 PCIE_LOCK_TARGET_END, 116 fl_out_target + 100); 117 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET1, 118 PCIE_PLL_FT_LOCK_CYCLECNT, lock_cyclecnt); 119 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4, 120 PCIE_LOCK_LOCKTH, 0x3); 121 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET3, 122 PCIE_UNLOCK_TARGET_BEG, 123 fl_out_target - 100); 124 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET3, 125 PCIE_UNLOCK_TARGET_END, 126 fl_out_target + 100); 127 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET1, 128 PCIE_PLL_FT_UNLOCK_CYCLECNT, 129 lock_cyclecnt); 130 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4, 131 PCIE_UNLOCK_LOCKTH, 0x3); 132 133 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR0_PR_INJ_MODE, 134 CSR_2L_PXP_CDR0_INJ_FORCE_OFF); 135 136 airoha_phy_pma0_set_bits(pcie_phy, 137 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 138 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_R_EN); 139 airoha_phy_pma0_set_bits(pcie_phy, 140 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 141 PCIE_FORCE_DA_PXP_CDR_PR_LPF_R_EN); 142 airoha_phy_pma0_set_bits(pcie_phy, 143 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 144 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_C_EN); 145 airoha_phy_pma0_clear_bits(pcie_phy, 146 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 147 PCIE_FORCE_DA_PXP_CDR_PR_LPF_C_EN); 148 airoha_phy_pma0_set_bits(pcie_phy, 149 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 150 PCIE_FORCE_SEL_DA_PXP_CDR_PR_IDAC); 151 152 airoha_phy_pma0_set_bits(pcie_phy, 153 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB, 154 PCIE_FORCE_SEL_DA_PXP_CDR_PR_PWDB); 155 airoha_phy_pma0_clear_bits(pcie_phy, 156 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB, 157 PCIE_FORCE_DA_PXP_CDR_PR_PWDB); 158 airoha_phy_pma0_set_bits(pcie_phy, 159 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB, 160 PCIE_FORCE_DA_PXP_CDR_PR_PWDB); 161 162 for (i = 0; i < LEQ_LEN_CTRL_MAX_VAL; i++) { 163 airoha_phy_pma0_update_field(pcie_phy, 164 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 165 PCIE_FORCE_DA_PXP_CDR_PR_IDAC, i << 8); 166 airoha_phy_pma0_clear_bits(pcie_phy, 167 REG_PCIE_PMA_SS_RX_FREQ_DET4, 168 PCIE_FREQLOCK_DET_EN); 169 airoha_phy_pma0_update_field(pcie_phy, 170 REG_PCIE_PMA_SS_RX_FREQ_DET4, 171 PCIE_FREQLOCK_DET_EN, 0x3); 172 173 usleep_range(10000, 15000); 174 175 val = FIELD_GET(PCIE_RO_FL_OUT, 176 readl(pcie_phy->pma0 + 177 REG_PCIE_PMA_RO_RX_FREQDET)); 178 if (val > fl_out_target) 179 cdr_pr_idac_tmp = i << 8; 180 } 181 182 for (i = LEQ_LEN_CTRL_MAX_VAL; i >= 0; i--) { 183 pr_idac = cdr_pr_idac_tmp | (0x1 << i); 184 airoha_phy_pma0_update_field(pcie_phy, 185 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 186 PCIE_FORCE_DA_PXP_CDR_PR_IDAC, pr_idac); 187 airoha_phy_pma0_clear_bits(pcie_phy, 188 REG_PCIE_PMA_SS_RX_FREQ_DET4, 189 PCIE_FREQLOCK_DET_EN); 190 airoha_phy_pma0_update_field(pcie_phy, 191 REG_PCIE_PMA_SS_RX_FREQ_DET4, 192 PCIE_FREQLOCK_DET_EN, 0x3); 193 194 usleep_range(10000, 15000); 195 196 val = FIELD_GET(PCIE_RO_FL_OUT, 197 readl(pcie_phy->pma0 + 198 REG_PCIE_PMA_RO_RX_FREQDET)); 199 if (val < fl_out_target) 200 pr_idac &= ~(0x1 << i); 201 202 cdr_pr_idac_tmp = pr_idac; 203 } 204 205 airoha_phy_pma0_update_field(pcie_phy, 206 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 207 PCIE_FORCE_DA_PXP_CDR_PR_IDAC, 208 cdr_pr_idac_tmp); 209 210 for (i = 0; i < FREQ_LOCK_MAX_ATTEMPT; i++) { 211 u32 val; 212 213 airoha_phy_pma0_clear_bits(pcie_phy, 214 REG_PCIE_PMA_SS_RX_FREQ_DET4, 215 PCIE_FREQLOCK_DET_EN); 216 airoha_phy_pma0_update_field(pcie_phy, 217 REG_PCIE_PMA_SS_RX_FREQ_DET4, 218 PCIE_FREQLOCK_DET_EN, 0x3); 219 220 usleep_range(10000, 15000); 221 222 val = readl(pcie_phy->pma0 + REG_PCIE_PMA_RO_RX_FREQDET); 223 if (val & PCIE_RO_FBCK_LOCK) 224 break; 225 } 226 227 /* turn off force mode and update band values */ 228 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR0_PR_INJ_MODE, 229 CSR_2L_PXP_CDR0_INJ_FORCE_OFF); 230 231 airoha_phy_pma0_clear_bits(pcie_phy, 232 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 233 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_R_EN); 234 airoha_phy_pma0_clear_bits(pcie_phy, 235 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 236 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_C_EN); 237 airoha_phy_pma0_clear_bits(pcie_phy, 238 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB, 239 PCIE_FORCE_SEL_DA_PXP_CDR_PR_PWDB); 240 airoha_phy_pma0_clear_bits(pcie_phy, 241 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 242 PCIE_FORCE_SEL_DA_PXP_CDR_PR_IDAC); 243 if (gen == PCIE_PORT_GEN3) { 244 airoha_phy_pma0_update_field(pcie_phy, 245 REG_PCIE_PMA_DIG_RESERVE_14, 246 PCIE_FLL_IDAC_PCIEG3, 247 cdr_pr_idac_tmp); 248 } else { 249 airoha_phy_pma0_update_field(pcie_phy, 250 REG_PCIE_PMA_DIG_RESERVE_13, 251 PCIE_FLL_IDAC_PCIEG1, 252 cdr_pr_idac_tmp); 253 airoha_phy_pma0_update_field(pcie_phy, 254 REG_PCIE_PMA_DIG_RESERVE_13, 255 PCIE_FLL_IDAC_PCIEG2, 256 cdr_pr_idac_tmp); 257 } 258 } 259 260 static void 261 airoha_phy_init_lane1_rx_fw_pre_calib(struct airoha_pcie_phy *pcie_phy, 262 enum airoha_pcie_port_gen gen) 263 { 264 u32 fl_out_target = gen == PCIE_PORT_GEN3 ? 41600 : 41941; 265 u32 lock_cyclecnt = gen == PCIE_PORT_GEN3 ? 26000 : 32767; 266 u32 pr_idac, val, cdr_pr_idac_tmp = 0; 267 int i; 268 269 airoha_phy_pma1_set_bits(pcie_phy, 270 REG_PCIE_PMA_SS_LCPLL_PWCTL_SETTING_1, 271 PCIE_LCPLL_MAN_PWDB); 272 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET2, 273 PCIE_LOCK_TARGET_BEG, 274 fl_out_target - 100); 275 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET2, 276 PCIE_LOCK_TARGET_END, 277 fl_out_target + 100); 278 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET1, 279 PCIE_PLL_FT_LOCK_CYCLECNT, lock_cyclecnt); 280 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4, 281 PCIE_LOCK_LOCKTH, 0x3); 282 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET3, 283 PCIE_UNLOCK_TARGET_BEG, 284 fl_out_target - 100); 285 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET3, 286 PCIE_UNLOCK_TARGET_END, 287 fl_out_target + 100); 288 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET1, 289 PCIE_PLL_FT_UNLOCK_CYCLECNT, 290 lock_cyclecnt); 291 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4, 292 PCIE_UNLOCK_LOCKTH, 0x3); 293 294 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR1_PR_INJ_MODE, 295 CSR_2L_PXP_CDR1_INJ_FORCE_OFF); 296 297 airoha_phy_pma1_set_bits(pcie_phy, 298 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 299 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_R_EN); 300 airoha_phy_pma1_set_bits(pcie_phy, 301 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 302 PCIE_FORCE_DA_PXP_CDR_PR_LPF_R_EN); 303 airoha_phy_pma1_set_bits(pcie_phy, 304 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 305 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_C_EN); 306 airoha_phy_pma1_clear_bits(pcie_phy, 307 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 308 PCIE_FORCE_DA_PXP_CDR_PR_LPF_C_EN); 309 airoha_phy_pma1_set_bits(pcie_phy, 310 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 311 PCIE_FORCE_SEL_DA_PXP_CDR_PR_IDAC); 312 airoha_phy_pma1_set_bits(pcie_phy, 313 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB, 314 PCIE_FORCE_SEL_DA_PXP_CDR_PR_PWDB); 315 airoha_phy_pma1_clear_bits(pcie_phy, 316 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB, 317 PCIE_FORCE_DA_PXP_CDR_PR_PWDB); 318 airoha_phy_pma1_set_bits(pcie_phy, 319 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB, 320 PCIE_FORCE_DA_PXP_CDR_PR_PWDB); 321 322 for (i = 0; i < LEQ_LEN_CTRL_MAX_VAL; i++) { 323 airoha_phy_pma1_update_field(pcie_phy, 324 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 325 PCIE_FORCE_DA_PXP_CDR_PR_IDAC, i << 8); 326 airoha_phy_pma1_clear_bits(pcie_phy, 327 REG_PCIE_PMA_SS_RX_FREQ_DET4, 328 PCIE_FREQLOCK_DET_EN); 329 airoha_phy_pma1_update_field(pcie_phy, 330 REG_PCIE_PMA_SS_RX_FREQ_DET4, 331 PCIE_FREQLOCK_DET_EN, 0x3); 332 333 usleep_range(10000, 15000); 334 335 val = FIELD_GET(PCIE_RO_FL_OUT, 336 readl(pcie_phy->pma1 + 337 REG_PCIE_PMA_RO_RX_FREQDET)); 338 if (val > fl_out_target) 339 cdr_pr_idac_tmp = i << 8; 340 } 341 342 for (i = LEQ_LEN_CTRL_MAX_VAL; i >= 0; i--) { 343 pr_idac = cdr_pr_idac_tmp | (0x1 << i); 344 airoha_phy_pma1_update_field(pcie_phy, 345 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 346 PCIE_FORCE_DA_PXP_CDR_PR_IDAC, pr_idac); 347 airoha_phy_pma1_clear_bits(pcie_phy, 348 REG_PCIE_PMA_SS_RX_FREQ_DET4, 349 PCIE_FREQLOCK_DET_EN); 350 airoha_phy_pma1_update_field(pcie_phy, 351 REG_PCIE_PMA_SS_RX_FREQ_DET4, 352 PCIE_FREQLOCK_DET_EN, 0x3); 353 354 usleep_range(10000, 15000); 355 356 val = FIELD_GET(PCIE_RO_FL_OUT, 357 readl(pcie_phy->pma1 + 358 REG_PCIE_PMA_RO_RX_FREQDET)); 359 if (val < fl_out_target) 360 pr_idac &= ~(0x1 << i); 361 362 cdr_pr_idac_tmp = pr_idac; 363 } 364 365 airoha_phy_pma1_update_field(pcie_phy, 366 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 367 PCIE_FORCE_DA_PXP_CDR_PR_IDAC, 368 cdr_pr_idac_tmp); 369 370 for (i = 0; i < FREQ_LOCK_MAX_ATTEMPT; i++) { 371 u32 val; 372 373 airoha_phy_pma1_clear_bits(pcie_phy, 374 REG_PCIE_PMA_SS_RX_FREQ_DET4, 375 PCIE_FREQLOCK_DET_EN); 376 airoha_phy_pma1_update_field(pcie_phy, 377 REG_PCIE_PMA_SS_RX_FREQ_DET4, 378 PCIE_FREQLOCK_DET_EN, 0x3); 379 380 usleep_range(10000, 15000); 381 382 val = readl(pcie_phy->pma1 + REG_PCIE_PMA_RO_RX_FREQDET); 383 if (val & PCIE_RO_FBCK_LOCK) 384 break; 385 } 386 387 /* turn off force mode and update band values */ 388 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR1_PR_INJ_MODE, 389 CSR_2L_PXP_CDR1_INJ_FORCE_OFF); 390 391 airoha_phy_pma1_clear_bits(pcie_phy, 392 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 393 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_R_EN); 394 airoha_phy_pma1_clear_bits(pcie_phy, 395 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_LPF_C, 396 PCIE_FORCE_SEL_DA_PXP_CDR_PR_LPF_C_EN); 397 airoha_phy_pma1_clear_bits(pcie_phy, 398 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_PIEYE_PWDB, 399 PCIE_FORCE_SEL_DA_PXP_CDR_PR_PWDB); 400 airoha_phy_pma1_clear_bits(pcie_phy, 401 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 402 PCIE_FORCE_SEL_DA_PXP_CDR_PR_IDAC); 403 if (gen == PCIE_PORT_GEN3) { 404 airoha_phy_pma1_update_field(pcie_phy, 405 REG_PCIE_PMA_DIG_RESERVE_14, 406 PCIE_FLL_IDAC_PCIEG3, 407 cdr_pr_idac_tmp); 408 } else { 409 airoha_phy_pma1_update_field(pcie_phy, 410 REG_PCIE_PMA_DIG_RESERVE_13, 411 PCIE_FLL_IDAC_PCIEG1, 412 cdr_pr_idac_tmp); 413 airoha_phy_pma1_update_field(pcie_phy, 414 REG_PCIE_PMA_DIG_RESERVE_13, 415 PCIE_FLL_IDAC_PCIEG2, 416 cdr_pr_idac_tmp); 417 } 418 } 419 420 static void airoha_pcie_phy_init_default(struct airoha_pcie_phy *pcie_phy) 421 { 422 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CMN, 423 CSR_2L_PXP_CMN_TRIM_MASK, 0x10); 424 writel(0xcccbcccb, pcie_phy->pma0 + REG_PCIE_PMA_DIG_RESERVE_21); 425 writel(0xcccb, pcie_phy->pma0 + REG_PCIE_PMA_DIG_RESERVE_22); 426 writel(0xcccbcccb, pcie_phy->pma1 + REG_PCIE_PMA_DIG_RESERVE_21); 427 writel(0xcccb, pcie_phy->pma1 + REG_PCIE_PMA_DIG_RESERVE_22); 428 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CMN, 429 CSR_2L_PXP_CMN_LANE_EN); 430 } 431 432 static void airoha_pcie_phy_init_clk_out(struct airoha_pcie_phy *pcie_phy) 433 { 434 airoha_phy_csr_2l_update_field(pcie_phy, 435 REG_CSR_2L_TXPLL_POSTDIV_D256, 436 CSR_2L_PXP_CLKTX0_AMP, 0x5); 437 airoha_phy_csr_2l_update_field(pcie_phy, 438 REG_CSR_2L_CLKTX0_FORCE_OUT1, 439 CSR_2L_PXP_CLKTX1_AMP, 0x5); 440 airoha_phy_csr_2l_update_field(pcie_phy, 441 REG_CSR_2L_TXPLL_POSTDIV_D256, 442 CSR_2L_PXP_CLKTX0_OFFSET, 0x2); 443 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CLKTX1_OFFSET, 444 CSR_2L_PXP_CLKTX1_OFFSET, 0x2); 445 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CLKTX0_FORCE_OUT1, 446 CSR_2L_PXP_CLKTX0_HZ); 447 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CLKTX1_OFFSET, 448 CSR_2L_PXP_CLKTX1_HZ); 449 airoha_phy_csr_2l_update_field(pcie_phy, 450 REG_CSR_2L_CLKTX0_FORCE_OUT1, 451 CSR_2L_PXP_CLKTX0_IMP_SEL, 0x12); 452 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CLKTX1_IMP_SEL, 453 CSR_2L_PXP_CLKTX1_IMP_SEL, 0x12); 454 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_POSTDIV_D256, 455 CSR_2L_PXP_CLKTX0_SR); 456 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CLKTX1_OFFSET, 457 CSR_2L_PXP_CLKTX1_SR); 458 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_PLL_CMN_RESERVE0, 459 CSR_2L_PXP_PLL_RESERVE_MASK, 0xdd); 460 } 461 462 static void airoha_pcie_phy_init_csr_2l(struct airoha_pcie_phy *pcie_phy) 463 { 464 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET, 465 PCIE_SW_XFI_RXPCS_RST | PCIE_SW_REF_RST | 466 PCIE_SW_RX_RST); 467 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET, 468 PCIE_SW_XFI_RXPCS_RST | PCIE_SW_REF_RST | 469 PCIE_SW_RX_RST); 470 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_TX_RESET, 471 PCIE_TX_TOP_RST | REG_PCIE_PMA_TX_RESET); 472 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_TX_RESET, 473 PCIE_TX_TOP_RST | REG_PCIE_PMA_TX_RESET); 474 } 475 476 static void airoha_pcie_phy_init_rx(struct airoha_pcie_phy *pcie_phy) 477 { 478 writel(0x2a00090b, pcie_phy->pma0 + REG_PCIE_PMA_DIG_RESERVE_17); 479 writel(0x2a00090b, pcie_phy->pma1 + REG_PCIE_PMA_DIG_RESERVE_17); 480 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR0_PR_MONPI, 481 CSR_2L_PXP_CDR0_PR_XFICK_EN); 482 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR1_PR_MONPI, 483 CSR_2L_PXP_CDR1_PR_XFICK_EN); 484 airoha_phy_csr_2l_clear_bits(pcie_phy, 485 REG_CSR_2L_CDR0_PD_PICAL_CKD8_INV, 486 CSR_2L_PXP_CDR0_PD_EDGE_DISABLE); 487 airoha_phy_csr_2l_clear_bits(pcie_phy, 488 REG_CSR_2L_CDR1_PD_PICAL_CKD8_INV, 489 CSR_2L_PXP_CDR1_PD_EDGE_DISABLE); 490 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_PHYCK_DIV, 491 CSR_2L_PXP_RX0_PHYCK_SEL, 0x1); 492 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_PHYCK_DIV, 493 CSR_2L_PXP_RX1_PHYCK_SEL, 0x1); 494 } 495 496 static void airoha_pcie_phy_init_jcpll(struct airoha_pcie_phy *pcie_phy) 497 { 498 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 499 PCIE_FORCE_SEL_DA_PXP_JCPLL_EN); 500 airoha_phy_pma0_clear_bits(pcie_phy, 501 REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 502 PCIE_FORCE_DA_PXP_JCPLL_EN); 503 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 504 PCIE_FORCE_SEL_DA_PXP_JCPLL_EN); 505 airoha_phy_pma1_clear_bits(pcie_phy, 506 REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 507 PCIE_FORCE_DA_PXP_JCPLL_EN); 508 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_TCL_VTP_EN, 509 CSR_2L_PXP_JCPLL_SPARE_LOW, 0x20); 510 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_RST_DLY, 511 CSR_2L_PXP_JCPLL_RST); 512 writel(0x0, pcie_phy->csr_2l + REG_CSR_2L_JCPLL_SSC_DELTA1); 513 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC_PERIOD, 514 CSR_2L_PXP_JCPLL_SSC_PERIOD); 515 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC, 516 CSR_2L_PXP_JCPLL_SSC_PHASE_INI); 517 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC, 518 CSR_2L_PXP_JCPLL_SSC_TRI_EN); 519 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BR, 520 CSR_2L_PXP_JCPLL_LPF_BR, 0xa); 521 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BR, 522 CSR_2L_PXP_JCPLL_LPF_BP, 0xc); 523 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BR, 524 CSR_2L_PXP_JCPLL_LPF_BC, 0x1f); 525 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BWC, 526 CSR_2L_PXP_JCPLL_LPF_BWC, 0x1e); 527 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BR, 528 CSR_2L_PXP_JCPLL_LPF_BWR, 0xa); 529 airoha_phy_csr_2l_update_field(pcie_phy, 530 REG_CSR_2L_JCPLL_MMD_PREDIV_MODE, 531 CSR_2L_PXP_JCPLL_MMD_PREDIV_MODE, 532 0x1); 533 airoha_phy_csr_2l_clear_bits(pcie_phy, CSR_2L_PXP_JCPLL_MONCK, 534 CSR_2L_PXP_JCPLL_REFIN_DIV); 535 536 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_VOS, 537 PCIE_FORCE_SEL_DA_PXP_JCPLL_SDM_PCW); 538 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_VOS, 539 PCIE_FORCE_SEL_DA_PXP_JCPLL_SDM_PCW); 540 airoha_phy_pma0_update_field(pcie_phy, 541 REG_PCIE_PMA_FORCE_DA_PXP_JCPLL_SDM_PCW, 542 PCIE_FORCE_DA_PXP_JCPLL_SDM_PCW, 543 0x50000000); 544 airoha_phy_pma1_update_field(pcie_phy, 545 REG_PCIE_PMA_FORCE_DA_PXP_JCPLL_SDM_PCW, 546 PCIE_FORCE_DA_PXP_JCPLL_SDM_PCW, 547 0x50000000); 548 549 airoha_phy_csr_2l_set_bits(pcie_phy, 550 REG_CSR_2L_JCPLL_MMD_PREDIV_MODE, 551 CSR_2L_PXP_JCPLL_POSTDIV_D5); 552 airoha_phy_csr_2l_set_bits(pcie_phy, 553 REG_CSR_2L_JCPLL_MMD_PREDIV_MODE, 554 CSR_2L_PXP_JCPLL_POSTDIV_D2); 555 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_RST_DLY, 556 CSR_2L_PXP_JCPLL_RST_DLY, 0x4); 557 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_RST_DLY, 558 CSR_2L_PXP_JCPLL_SDM_DI_LS); 559 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_TCL_KBAND_VREF, 560 CSR_2L_PXP_JCPLL_VCO_KBAND_MEAS_EN); 561 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_IB_EXT, 562 CSR_2L_PXP_JCPLL_CHP_IOFST); 563 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_IB_EXT, 564 CSR_2L_PXP_JCPLL_CHP_IBIAS, 0xc); 565 airoha_phy_csr_2l_update_field(pcie_phy, 566 REG_CSR_2L_JCPLL_MMD_PREDIV_MODE, 567 CSR_2L_PXP_JCPLL_MMD_PREDIV_MODE, 568 0x1); 569 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_VCODIV, 570 CSR_2L_PXP_JCPLL_VCO_HALFLSB_EN); 571 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_VCODIV, 572 CSR_2L_PXP_JCPLL_VCO_CFIX, 0x1); 573 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_VCODIV, 574 CSR_2L_PXP_JCPLL_VCO_SCAPWR, 0x4); 575 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_IB_EXT, 576 REG_CSR_2L_JCPLL_LPF_SHCK_EN); 577 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_KBAND_KFC, 578 CSR_2L_PXP_JCPLL_POSTDIV_EN); 579 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_KBAND_KFC, 580 CSR_2L_PXP_JCPLL_KBAND_KFC); 581 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_KBAND_KFC, 582 CSR_2L_PXP_JCPLL_KBAND_KF, 0x3); 583 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_KBAND_KFC, 584 CSR_2L_PXP_JCPLL_KBAND_KS); 585 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BWC, 586 CSR_2L_PXP_JCPLL_KBAND_DIV, 0x1); 587 588 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_SCAN_MODE, 589 PCIE_FORCE_SEL_DA_PXP_JCPLL_KBAND_LOAD_EN); 590 airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_SCAN_MODE, 591 PCIE_FORCE_DA_PXP_JCPLL_KBAND_LOAD_EN); 592 593 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_LPF_BWC, 594 CSR_2L_PXP_JCPLL_KBAND_CODE, 0xe4); 595 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SDM_HREN, 596 CSR_2L_PXP_JCPLL_TCL_AMP_EN); 597 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_TCL_CMP, 598 CSR_2L_PXP_JCPLL_TCL_LPF_EN); 599 airoha_phy_csr_2l_update_field(pcie_phy, 600 REG_CSR_2L_JCPLL_TCL_KBAND_VREF, 601 CSR_2L_PXP_JCPLL_TCL_KBAND_VREF, 0xf); 602 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SDM_HREN, 603 CSR_2L_PXP_JCPLL_TCL_AMP_GAIN, 0x1); 604 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SDM_HREN, 605 CSR_2L_PXP_JCPLL_TCL_AMP_VREF, 0x5); 606 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_TCL_CMP, 607 CSR_2L_PXP_JCPLL_TCL_LPF_BW, 0x1); 608 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_VCO_TCLVAR, 609 CSR_2L_PXP_JCPLL_VCO_TCLVAR, 0x3); 610 611 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 612 PCIE_FORCE_SEL_DA_PXP_JCPLL_CKOUT_EN); 613 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 614 PCIE_FORCE_DA_PXP_JCPLL_CKOUT_EN); 615 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 616 PCIE_FORCE_SEL_DA_PXP_JCPLL_CKOUT_EN); 617 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 618 PCIE_FORCE_DA_PXP_JCPLL_CKOUT_EN); 619 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 620 PCIE_FORCE_SEL_DA_PXP_JCPLL_EN); 621 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 622 PCIE_FORCE_DA_PXP_JCPLL_EN); 623 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 624 PCIE_FORCE_SEL_DA_PXP_JCPLL_EN); 625 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_PXP_JCPLL_CKOUT, 626 PCIE_FORCE_DA_PXP_JCPLL_EN); 627 } 628 629 static void airoha_pcie_phy_txpll(struct airoha_pcie_phy *pcie_phy) 630 { 631 airoha_phy_pma0_set_bits(pcie_phy, 632 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 633 PCIE_FORCE_SEL_DA_PXP_TXPLL_EN); 634 airoha_phy_pma0_clear_bits(pcie_phy, 635 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 636 PCIE_FORCE_DA_PXP_TXPLL_EN); 637 airoha_phy_pma1_set_bits(pcie_phy, 638 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 639 PCIE_FORCE_SEL_DA_PXP_TXPLL_EN); 640 airoha_phy_pma1_clear_bits(pcie_phy, 641 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 642 PCIE_FORCE_DA_PXP_TXPLL_EN); 643 644 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_REFIN_DIV, 645 CSR_2L_PXP_TXPLL_PLL_RSTB); 646 writel(0x0, pcie_phy->csr_2l + REG_CSR_2L_TXPLL_SSC_DELTA1); 647 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SSC_PERIOD, 648 CSR_2L_PXP_txpll_SSC_PERIOD); 649 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST, 650 CSR_2L_PXP_TXPLL_CHP_IOFST, 0x1); 651 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_750M_SYS_CK, 652 CSR_2L_PXP_TXPLL_CHP_IBIAS, 0x2d); 653 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_REFIN_DIV, 654 CSR_2L_PXP_TXPLL_REFIN_DIV); 655 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_TCL_LPF_BW, 656 CSR_2L_PXP_TXPLL_VCO_CFIX, 0x3); 657 658 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 659 PCIE_FORCE_SEL_DA_PXP_TXPLL_SDM_PCW); 660 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 661 PCIE_FORCE_SEL_DA_PXP_TXPLL_SDM_PCW); 662 airoha_phy_pma0_update_field(pcie_phy, 663 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_SDM_PCW, 664 PCIE_FORCE_DA_PXP_TXPLL_SDM_PCW, 665 0xc800000); 666 airoha_phy_pma1_update_field(pcie_phy, 667 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_SDM_PCW, 668 PCIE_FORCE_DA_PXP_TXPLL_SDM_PCW, 669 0xc800000); 670 671 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SDM_DI_LS, 672 CSR_2L_PXP_TXPLL_SDM_IFM); 673 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SSC, 674 CSR_2L_PXP_TXPLL_SSC_PHASE_INI); 675 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_REFIN_DIV, 676 CSR_2L_PXP_TXPLL_RST_DLY, 0x4); 677 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SDM_DI_LS, 678 CSR_2L_PXP_TXPLL_SDM_DI_LS); 679 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_SDM_DI_LS, 680 CSR_2L_PXP_TXPLL_SDM_ORD, 0x3); 681 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_TCL_KBAND_VREF, 682 CSR_2L_PXP_TXPLL_VCO_KBAND_MEAS_EN); 683 writel(0x0, pcie_phy->csr_2l + REG_CSR_2L_TXPLL_SSC_DELTA1); 684 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST, 685 CSR_2L_PXP_TXPLL_LPF_BP, 0x1); 686 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST, 687 CSR_2L_PXP_TXPLL_LPF_BC, 0x18); 688 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST, 689 CSR_2L_PXP_TXPLL_LPF_BR, 0x5); 690 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_CHP_IOFST, 691 CSR_2L_PXP_TXPLL_CHP_IOFST, 0x1); 692 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_750M_SYS_CK, 693 CSR_2L_PXP_TXPLL_CHP_IBIAS, 0x2d); 694 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_TCL_VTP, 695 CSR_2L_PXP_TXPLL_SPARE_L, 0x1); 696 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_LPF_BWR, 697 CSR_2L_PXP_TXPLL_LPF_BWC); 698 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_POSTDIV, 699 CSR_2L_PXP_TXPLL_MMD_PREDIV_MODE); 700 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_REFIN_DIV, 701 CSR_2L_PXP_TXPLL_REFIN_DIV); 702 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_TCL_LPF_BW, 703 CSR_2L_PXP_TXPLL_VCO_HALFLSB_EN); 704 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_VCO_SCAPWR, 705 CSR_2L_PXP_TXPLL_VCO_SCAPWR, 0x7); 706 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_TCL_LPF_BW, 707 CSR_2L_PXP_TXPLL_VCO_CFIX, 0x3); 708 709 airoha_phy_pma0_set_bits(pcie_phy, 710 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 711 PCIE_FORCE_SEL_DA_PXP_TXPLL_SDM_PCW); 712 airoha_phy_pma1_set_bits(pcie_phy, 713 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PR_IDAC, 714 PCIE_FORCE_SEL_DA_PXP_TXPLL_SDM_PCW); 715 716 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SSC, 717 CSR_2L_PXP_TXPLL_SSC_PHASE_INI); 718 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_LPF_BWR, 719 CSR_2L_PXP_TXPLL_LPF_BWR); 720 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_PHY_CK2, 721 CSR_2L_PXP_TXPLL_REFIN_INTERNAL); 722 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_TCL_KBAND_VREF, 723 CSR_2L_PXP_TXPLL_VCO_KBAND_MEAS_EN); 724 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_VTP, 725 CSR_2L_PXP_TXPLL_VTP_EN); 726 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_POSTDIV, 727 CSR_2L_PXP_TXPLL_PHY_CK1_EN); 728 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_PHY_CK2, 729 CSR_2L_PXP_TXPLL_REFIN_INTERNAL); 730 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_SSC, 731 CSR_2L_PXP_TXPLL_SSC_EN); 732 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_750M_SYS_CK, 733 CSR_2L_PXP_TXPLL_LPF_SHCK_EN); 734 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_POSTDIV, 735 CSR_2L_PXP_TXPLL_POSTDIV_EN); 736 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TXPLL_KBAND_DIV, 737 CSR_2L_PXP_TXPLL_KBAND_KFC); 738 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_KBAND_DIV, 739 CSR_2L_PXP_TXPLL_KBAND_KF, 0x3); 740 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_KBAND_DIV, 741 CSR_2L_PXP_txpll_KBAND_KS, 0x1); 742 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_KBAND_DIV, 743 CSR_2L_PXP_TXPLL_KBAND_DIV, 0x4); 744 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_LPF_BWR, 745 CSR_2L_PXP_TXPLL_KBAND_CODE, 0xe4); 746 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_SDM_OUT, 747 CSR_2L_PXP_TXPLL_TCL_AMP_EN); 748 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TXPLL_TCL_AMP_VREF, 749 CSR_2L_PXP_TXPLL_TCL_LPF_EN); 750 airoha_phy_csr_2l_update_field(pcie_phy, 751 REG_CSR_2L_TXPLL_TCL_KBAND_VREF, 752 CSR_2L_PXP_TXPLL_TCL_KBAND_VREF, 0xf); 753 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_SDM_OUT, 754 CSR_2L_PXP_TXPLL_TCL_AMP_GAIN, 0x3); 755 airoha_phy_csr_2l_update_field(pcie_phy, 756 REG_CSR_2L_TXPLL_TCL_AMP_VREF, 757 CSR_2L_PXP_TXPLL_TCL_AMP_VREF, 0xb); 758 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_TXPLL_TCL_LPF_BW, 759 CSR_2L_PXP_TXPLL_TCL_LPF_BW, 0x3); 760 761 airoha_phy_pma0_set_bits(pcie_phy, 762 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 763 PCIE_FORCE_SEL_DA_PXP_TXPLL_CKOUT_EN); 764 airoha_phy_pma0_set_bits(pcie_phy, 765 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 766 PCIE_FORCE_DA_PXP_TXPLL_CKOUT_EN); 767 airoha_phy_pma1_set_bits(pcie_phy, 768 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 769 PCIE_FORCE_SEL_DA_PXP_TXPLL_CKOUT_EN); 770 airoha_phy_pma1_set_bits(pcie_phy, 771 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 772 PCIE_FORCE_DA_PXP_TXPLL_CKOUT_EN); 773 airoha_phy_pma0_set_bits(pcie_phy, 774 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 775 PCIE_FORCE_SEL_DA_PXP_TXPLL_EN); 776 airoha_phy_pma0_set_bits(pcie_phy, 777 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 778 PCIE_FORCE_DA_PXP_TXPLL_EN); 779 airoha_phy_pma1_set_bits(pcie_phy, 780 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 781 PCIE_FORCE_SEL_DA_PXP_TXPLL_EN); 782 airoha_phy_pma1_set_bits(pcie_phy, 783 REG_PCIE_PMA_FORCE_DA_PXP_TXPLL_CKOUT, 784 PCIE_FORCE_DA_PXP_TXPLL_EN); 785 } 786 787 static void airoha_pcie_phy_init_ssc_jcpll(struct airoha_pcie_phy *pcie_phy) 788 { 789 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SSC_DELTA1, 790 CSR_2L_PXP_JCPLL_SSC_DELTA1, 0x106); 791 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SSC_DELTA1, 792 CSR_2L_PXP_JCPLL_SSC_DELTA, 0x106); 793 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_JCPLL_SSC_PERIOD, 794 CSR_2L_PXP_JCPLL_SSC_PERIOD, 0x31b); 795 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC, 796 CSR_2L_PXP_JCPLL_SSC_PHASE_INI); 797 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC, 798 CSR_2L_PXP_JCPLL_SSC_EN); 799 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SDM_IFM, 800 CSR_2L_PXP_JCPLL_SDM_IFM); 801 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SDM_HREN, 802 REG_CSR_2L_JCPLL_SDM_HREN); 803 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_RST_DLY, 804 CSR_2L_PXP_JCPLL_SDM_DI_EN); 805 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC, 806 CSR_2L_PXP_JCPLL_SSC_TRI_EN); 807 } 808 809 static void 810 airoha_pcie_phy_set_rxlan0_signal_detect(struct airoha_pcie_phy *pcie_phy) 811 { 812 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR0_PR_COR_HBW, 813 CSR_2L_PXP_CDR0_PR_LDO_FORCE_ON); 814 815 usleep_range(100, 200); 816 817 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_19, 818 PCIE_PCP_RX_REV0_PCIE_GEN1, 0x18b0); 819 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_20, 820 PCIE_PCP_RX_REV0_PCIE_GEN2, 0x18b0); 821 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_20, 822 PCIE_PCP_RX_REV0_PCIE_GEN3, 0x1030); 823 824 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_SIGDET_DCTEST, 825 CSR_2L_PXP_RX0_SIGDET_PEAK, 0x2); 826 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_SIGDET_VTH_SEL, 827 CSR_2L_PXP_RX0_SIGDET_VTH_SEL, 0x5); 828 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_REV0, 829 CSR_2L_PXP_VOS_PNINV, 0x2); 830 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_SIGDET_DCTEST, 831 CSR_2L_PXP_RX0_SIGDET_LPF_CTRL, 0x1); 832 833 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_CAL2, 834 PCIE_CAL_OUT_OS, 0x0); 835 836 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_PXP_RX0_FE_VB_EQ2, 837 CSR_2L_PXP_RX0_FE_VCM_GEN_PWDB); 838 839 airoha_phy_pma0_set_bits(pcie_phy, 840 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_GAIN_CTRL, 841 PCIE_FORCE_SEL_DA_PXP_RX_FE_PWDB); 842 airoha_phy_pma0_update_field(pcie_phy, 843 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_GAIN_CTRL, 844 PCIE_FORCE_DA_PXP_RX_FE_GAIN_CTRL, 0x3); 845 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_RX_FORCE_MODE0, 846 PCIE_FORCE_DA_XPON_RX_FE_GAIN_CTRL, 0x1); 847 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_SIGDET0, 848 PCIE_SIGDET_WIN_NONVLD_TIMES, 0x3); 849 airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_SEQUENCE_DISB_CTRL1, 850 PCIE_DISB_RX_SDCAL_EN); 851 852 airoha_phy_pma0_set_bits(pcie_phy, 853 REG_PCIE_PMA_CTRL_SEQUENCE_FORCE_CTRL1, 854 PCIE_FORCE_RX_SDCAL_EN); 855 usleep_range(150, 200); 856 airoha_phy_pma0_clear_bits(pcie_phy, 857 REG_PCIE_PMA_CTRL_SEQUENCE_FORCE_CTRL1, 858 PCIE_FORCE_RX_SDCAL_EN); 859 } 860 861 static void 862 airoha_pcie_phy_set_rxlan1_signal_detect(struct airoha_pcie_phy *pcie_phy) 863 { 864 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR1_PR_COR_HBW, 865 CSR_2L_PXP_CDR1_PR_LDO_FORCE_ON); 866 867 usleep_range(100, 200); 868 869 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_19, 870 PCIE_PCP_RX_REV0_PCIE_GEN1, 0x18b0); 871 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_20, 872 PCIE_PCP_RX_REV0_PCIE_GEN2, 0x18b0); 873 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_20, 874 PCIE_PCP_RX_REV0_PCIE_GEN3, 0x1030); 875 876 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_SIGDET_NOVTH, 877 CSR_2L_PXP_RX1_SIGDET_PEAK, 0x2); 878 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_SIGDET_NOVTH, 879 CSR_2L_PXP_RX1_SIGDET_VTH_SEL, 0x5); 880 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_REV0, 881 CSR_2L_PXP_VOS_PNINV, 0x2); 882 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_DAC_RANGE_EYE, 883 CSR_2L_PXP_RX1_SIGDET_LPF_CTRL, 0x1); 884 885 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_CAL2, 886 PCIE_CAL_OUT_OS, 0x0); 887 888 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX1_FE_VB_EQ1, 889 CSR_2L_PXP_RX1_FE_VCM_GEN_PWDB); 890 891 airoha_phy_pma1_set_bits(pcie_phy, 892 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_GAIN_CTRL, 893 PCIE_FORCE_SEL_DA_PXP_RX_FE_PWDB); 894 airoha_phy_pma1_update_field(pcie_phy, 895 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_GAIN_CTRL, 896 PCIE_FORCE_DA_PXP_RX_FE_GAIN_CTRL, 0x3); 897 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_RX_FORCE_MODE0, 898 PCIE_FORCE_DA_XPON_RX_FE_GAIN_CTRL, 0x1); 899 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_SIGDET0, 900 PCIE_SIGDET_WIN_NONVLD_TIMES, 0x3); 901 airoha_phy_pma1_clear_bits(pcie_phy, REG_PCIE_PMA_SEQUENCE_DISB_CTRL1, 902 PCIE_DISB_RX_SDCAL_EN); 903 904 airoha_phy_pma1_set_bits(pcie_phy, 905 REG_PCIE_PMA_CTRL_SEQUENCE_FORCE_CTRL1, 906 PCIE_FORCE_RX_SDCAL_EN); 907 usleep_range(150, 200); 908 airoha_phy_pma1_clear_bits(pcie_phy, 909 REG_PCIE_PMA_CTRL_SEQUENCE_FORCE_CTRL1, 910 PCIE_FORCE_RX_SDCAL_EN); 911 } 912 913 static void airoha_pcie_phy_set_rxflow(struct airoha_pcie_phy *pcie_phy) 914 { 915 airoha_phy_pma0_set_bits(pcie_phy, 916 REG_PCIE_PMA_FORCE_DA_PXP_RX_SCAN_RST, 917 PCIE_FORCE_DA_PXP_RX_SIGDET_PWDB | 918 PCIE_FORCE_SEL_DA_PXP_RX_SIGDET_PWDB); 919 airoha_phy_pma1_set_bits(pcie_phy, 920 REG_PCIE_PMA_FORCE_DA_PXP_RX_SCAN_RST, 921 PCIE_FORCE_DA_PXP_RX_SIGDET_PWDB | 922 PCIE_FORCE_SEL_DA_PXP_RX_SIGDET_PWDB); 923 924 airoha_phy_pma0_set_bits(pcie_phy, 925 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PD_PWDB, 926 PCIE_FORCE_DA_PXP_CDR_PD_PWDB | 927 PCIE_FORCE_SEL_DA_PXP_CDR_PD_PWDB); 928 airoha_phy_pma0_set_bits(pcie_phy, 929 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_PWDB, 930 PCIE_FORCE_DA_PXP_RX_FE_PWDB | 931 PCIE_FORCE_SEL_DA_PXP_RX_FE_PWDB); 932 airoha_phy_pma1_set_bits(pcie_phy, 933 REG_PCIE_PMA_FORCE_DA_PXP_CDR_PD_PWDB, 934 PCIE_FORCE_DA_PXP_CDR_PD_PWDB | 935 PCIE_FORCE_SEL_DA_PXP_CDR_PD_PWDB); 936 airoha_phy_pma1_set_bits(pcie_phy, 937 REG_PCIE_PMA_FORCE_DA_PXP_RX_FE_PWDB, 938 PCIE_FORCE_DA_PXP_RX_FE_PWDB | 939 PCIE_FORCE_SEL_DA_PXP_RX_FE_PWDB); 940 941 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX0_PHYCK_DIV, 942 CSR_2L_PXP_RX0_PHYCK_RSTB | 943 CSR_2L_PXP_RX0_TDC_CK_SEL); 944 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX1_PHYCK_DIV, 945 CSR_2L_PXP_RX1_PHYCK_RSTB | 946 CSR_2L_PXP_RX1_TDC_CK_SEL); 947 948 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET, 949 PCIE_SW_RX_FIFO_RST | PCIE_SW_TX_RST | 950 PCIE_SW_PMA_RST | PCIE_SW_ALLPCS_RST | 951 PCIE_SW_TX_FIFO_RST); 952 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET, 953 PCIE_SW_RX_FIFO_RST | PCIE_SW_TX_RST | 954 PCIE_SW_PMA_RST | PCIE_SW_ALLPCS_RST | 955 PCIE_SW_TX_FIFO_RST); 956 957 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_PXP_RX0_FE_VB_EQ2, 958 CSR_2L_PXP_RX0_FE_VB_EQ2_EN | 959 CSR_2L_PXP_RX0_FE_VB_EQ3_EN); 960 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX0_SIGDET_VTH_SEL, 961 CSR_2L_PXP_RX0_FE_VB_EQ1_EN); 962 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_RX1_FE_VB_EQ1, 963 CSR_2L_PXP_RX1_FE_VB_EQ1_EN | 964 CSR_2L_PXP_RX1_FE_VB_EQ2_EN | 965 CSR_2L_PXP_RX1_FE_VB_EQ3_EN); 966 967 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_REV0, 968 CSR_2L_PXP_FE_GAIN_NORMAL_MODE, 0x4); 969 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX0_REV0, 970 CSR_2L_PXP_FE_GAIN_TRAIN_MODE, 0x4); 971 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_REV0, 972 CSR_2L_PXP_FE_GAIN_NORMAL_MODE, 0x4); 973 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_REV0, 974 CSR_2L_PXP_FE_GAIN_TRAIN_MODE, 0x4); 975 } 976 977 static void airoha_pcie_phy_set_pr(struct airoha_pcie_phy *pcie_phy) 978 { 979 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_VREG_IBAND, 980 CSR_2L_PXP_CDR0_PR_VREG_IBAND, 0x5); 981 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_VREG_IBAND, 982 CSR_2L_PXP_CDR0_PR_VREG_CKBUF, 0x5); 983 984 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR0_PR_CKREF_DIV, 985 CSR_2L_PXP_CDR0_PR_CKREF_DIV); 986 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR0_PR_COR_HBW, 987 CSR_2L_PXP_CDR0_PR_CKREF_DIV1); 988 989 airoha_phy_csr_2l_update_field(pcie_phy, 990 REG_CSR_2L_CDR1_PR_VREG_IBAND_VAL, 991 CSR_2L_PXP_CDR1_PR_VREG_IBAND, 0x5); 992 airoha_phy_csr_2l_update_field(pcie_phy, 993 REG_CSR_2L_CDR1_PR_VREG_IBAND_VAL, 994 CSR_2L_PXP_CDR1_PR_VREG_CKBUF, 0x5); 995 996 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR1_PR_CKREF_DIV, 997 CSR_2L_PXP_CDR1_PR_CKREF_DIV); 998 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR1_PR_COR_HBW, 999 CSR_2L_PXP_CDR1_PR_CKREF_DIV1); 1000 1001 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_LPF_RATIO, 1002 CSR_2L_PXP_CDR0_LPF_TOP_LIM, 0x20000); 1003 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR1_LPF_RATIO, 1004 CSR_2L_PXP_CDR1_LPF_TOP_LIM, 0x20000); 1005 1006 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_BETA_DAC, 1007 CSR_2L_PXP_CDR0_PR_BETA_SEL, 0x2); 1008 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR1_PR_BETA_DAC, 1009 CSR_2L_PXP_CDR1_PR_BETA_SEL, 0x2); 1010 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_BETA_DAC, 1011 CSR_2L_PXP_CDR0_PR_KBAND_DIV, 0x4); 1012 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR1_PR_BETA_DAC, 1013 CSR_2L_PXP_CDR1_PR_KBAND_DIV, 0x4); 1014 } 1015 1016 static void airoha_pcie_phy_set_txflow(struct airoha_pcie_phy *pcie_phy) 1017 { 1018 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TX0_CKLDO, 1019 CSR_2L_PXP_TX0_CKLDO_EN); 1020 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TX1_CKLDO, 1021 CSR_2L_PXP_TX1_CKLDO_EN); 1022 1023 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TX0_CKLDO, 1024 CSR_2L_PXP_TX0_DMEDGEGEN_EN); 1025 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_TX1_CKLDO, 1026 CSR_2L_PXP_TX1_DMEDGEGEN_EN); 1027 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_TX1_MULTLANE, 1028 CSR_2L_PXP_TX1_MULTLANE_EN); 1029 } 1030 1031 static void airoha_pcie_phy_set_rx_mode(struct airoha_pcie_phy *pcie_phy) 1032 { 1033 writel(0x804000, pcie_phy->pma0 + REG_PCIE_PMA_DIG_RESERVE_27); 1034 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18, 1035 PCIE_PXP_RX_VTH_SEL_PCIE_G1, 0x5); 1036 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18, 1037 PCIE_PXP_RX_VTH_SEL_PCIE_G2, 0x5); 1038 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18, 1039 PCIE_PXP_RX_VTH_SEL_PCIE_G3, 0x5); 1040 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_30, 1041 0x77700); 1042 1043 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR0_PR_MONCK, 1044 CSR_2L_PXP_CDR0_PR_MONCK_ENABLE); 1045 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR0_PR_MONCK, 1046 CSR_2L_PXP_CDR0_PR_RESERVE0, 0x2); 1047 airoha_phy_csr_2l_update_field(pcie_phy, 1048 REG_CSR_2L_PXP_RX0_OSCAL_CTLE1IOS, 1049 CSR_2L_PXP_RX0_PR_OSCAL_VGA1IOS, 0x19); 1050 airoha_phy_csr_2l_update_field(pcie_phy, 1051 REG_CSR_2L_PXP_RX0_OSCA_VGA1VOS, 1052 CSR_2L_PXP_RX0_PR_OSCAL_VGA1VOS, 0x19); 1053 airoha_phy_csr_2l_update_field(pcie_phy, 1054 REG_CSR_2L_PXP_RX0_OSCA_VGA1VOS, 1055 CSR_2L_PXP_RX0_PR_OSCAL_VGA2IOS, 0x14); 1056 1057 writel(0x804000, pcie_phy->pma1 + REG_PCIE_PMA_DIG_RESERVE_27); 1058 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18, 1059 PCIE_PXP_RX_VTH_SEL_PCIE_G1, 0x5); 1060 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18, 1061 PCIE_PXP_RX_VTH_SEL_PCIE_G2, 0x5); 1062 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_18, 1063 PCIE_PXP_RX_VTH_SEL_PCIE_G3, 0x5); 1064 1065 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_30, 1066 0x77700); 1067 1068 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_CDR1_PR_MONCK, 1069 CSR_2L_PXP_CDR1_PR_MONCK_ENABLE); 1070 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_CDR1_PR_MONCK, 1071 CSR_2L_PXP_CDR1_PR_RESERVE0, 0x2); 1072 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_OSCAL_VGA1IOS, 1073 CSR_2L_PXP_RX1_PR_OSCAL_VGA1IOS, 0x19); 1074 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_OSCAL_VGA1IOS, 1075 CSR_2L_PXP_RX1_PR_OSCAL_VGA1VOS, 0x19); 1076 airoha_phy_csr_2l_update_field(pcie_phy, REG_CSR_2L_RX1_OSCAL_VGA1IOS, 1077 CSR_2L_PXP_RX1_PR_OSCAL_VGA2IOS, 0x14); 1078 } 1079 1080 static void airoha_pcie_phy_load_kflow(struct airoha_pcie_phy *pcie_phy) 1081 { 1082 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_12, 1083 PCIE_FORCE_PMA_RX_SPEED, 0xa); 1084 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_12, 1085 PCIE_FORCE_PMA_RX_SPEED, 0xa); 1086 airoha_phy_init_lane0_rx_fw_pre_calib(pcie_phy, PCIE_PORT_GEN3); 1087 airoha_phy_init_lane1_rx_fw_pre_calib(pcie_phy, PCIE_PORT_GEN3); 1088 1089 airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_12, 1090 PCIE_FORCE_PMA_RX_SPEED); 1091 airoha_phy_pma1_clear_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_12, 1092 PCIE_FORCE_PMA_RX_SPEED); 1093 usleep_range(100, 200); 1094 1095 airoha_phy_init_lane0_rx_fw_pre_calib(pcie_phy, PCIE_PORT_GEN2); 1096 airoha_phy_init_lane1_rx_fw_pre_calib(pcie_phy, PCIE_PORT_GEN2); 1097 } 1098 1099 /** 1100 * airoha_pcie_phy_init() - Initialize the phy 1101 * @phy: the phy to be initialized 1102 * 1103 * Initialize the phy registers. 1104 * The hardware settings will be reset during suspend, it should be 1105 * reinitialized when the consumer calls phy_init() again on resume. 1106 */ 1107 static int airoha_pcie_phy_init(struct phy *phy) 1108 { 1109 struct airoha_pcie_phy *pcie_phy = phy_get_drvdata(phy); 1110 u32 val; 1111 1112 /* Setup Tx-Rx detection time */ 1113 val = FIELD_PREP(PCIE_XTP_RXDET_VCM_OFF_STB_T_SEL, 0x33) | 1114 FIELD_PREP(PCIE_XTP_RXDET_EN_STB_T_SEL, 0x1) | 1115 FIELD_PREP(PCIE_XTP_RXDET_FINISH_STB_T_SEL, 0x2) | 1116 FIELD_PREP(PCIE_XTP_TXPD_TX_DATA_EN_DLY, 0x3) | 1117 FIELD_PREP(PCIE_XTP_RXDET_LATCH_STB_T_SEL, 0x1); 1118 writel(val, pcie_phy->p0_xr_dtime + REG_PCIE_PEXTP_DIG_GLB44); 1119 writel(val, pcie_phy->p1_xr_dtime + REG_PCIE_PEXTP_DIG_GLB44); 1120 /* Setup Rx AEQ training time */ 1121 val = FIELD_PREP(PCIE_XTP_LN_RX_PDOWN_L1P2_EXIT_WAIT, 0x32) | 1122 FIELD_PREP(PCIE_XTP_LN_RX_PDOWN_E0_AEQEN_WAIT, 0x5050); 1123 writel(val, pcie_phy->rx_aeq + REG_PCIE_PEXTP_DIG_LN_RX30_P0); 1124 writel(val, pcie_phy->rx_aeq + REG_PCIE_PEXTP_DIG_LN_RX30_P1); 1125 1126 /* enable load FLL-K flow */ 1127 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_14, 1128 PCIE_FLL_LOAD_EN); 1129 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_14, 1130 PCIE_FLL_LOAD_EN); 1131 1132 airoha_pcie_phy_init_default(pcie_phy); 1133 airoha_pcie_phy_init_clk_out(pcie_phy); 1134 airoha_pcie_phy_init_csr_2l(pcie_phy); 1135 1136 usleep_range(100, 200); 1137 1138 airoha_pcie_phy_init_rx(pcie_phy); 1139 /* phase 1, no ssc for K TXPLL */ 1140 airoha_pcie_phy_init_jcpll(pcie_phy); 1141 1142 usleep_range(500, 600); 1143 1144 /* TX PLL settings */ 1145 airoha_pcie_phy_txpll(pcie_phy); 1146 1147 usleep_range(200, 300); 1148 1149 /* SSC JCPLL setting */ 1150 airoha_pcie_phy_init_ssc_jcpll(pcie_phy); 1151 1152 usleep_range(100, 200); 1153 1154 /* Rx lan0 signal detect */ 1155 airoha_pcie_phy_set_rxlan0_signal_detect(pcie_phy); 1156 /* Rx lan1 signal detect */ 1157 airoha_pcie_phy_set_rxlan1_signal_detect(pcie_phy); 1158 /* RX FLOW */ 1159 airoha_pcie_phy_set_rxflow(pcie_phy); 1160 1161 usleep_range(100, 200); 1162 1163 airoha_pcie_phy_set_pr(pcie_phy); 1164 /* TX FLOW */ 1165 airoha_pcie_phy_set_txflow(pcie_phy); 1166 1167 usleep_range(100, 200); 1168 /* RX mode setting */ 1169 airoha_pcie_phy_set_rx_mode(pcie_phy); 1170 /* Load K-Flow */ 1171 airoha_pcie_phy_load_kflow(pcie_phy); 1172 airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_SS_DA_XPON_PWDB0, 1173 PCIE_DA_XPON_CDR_PR_PWDB); 1174 airoha_phy_pma1_clear_bits(pcie_phy, REG_PCIE_PMA_SS_DA_XPON_PWDB0, 1175 PCIE_DA_XPON_CDR_PR_PWDB); 1176 1177 usleep_range(100, 200); 1178 1179 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_SS_DA_XPON_PWDB0, 1180 PCIE_DA_XPON_CDR_PR_PWDB); 1181 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_SS_DA_XPON_PWDB0, 1182 PCIE_DA_XPON_CDR_PR_PWDB); 1183 1184 usleep_range(100, 200); 1185 1186 return 0; 1187 } 1188 1189 static int airoha_pcie_phy_exit(struct phy *phy) 1190 { 1191 struct airoha_pcie_phy *pcie_phy = phy_get_drvdata(phy); 1192 1193 airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_SW_RESET, 1194 PCIE_PMA_SW_RST); 1195 airoha_phy_pma1_clear_bits(pcie_phy, REG_PCIE_PMA_SW_RESET, 1196 PCIE_PMA_SW_RST); 1197 airoha_phy_csr_2l_clear_bits(pcie_phy, REG_CSR_2L_JCPLL_SSC, 1198 CSR_2L_PXP_JCPLL_SSC_PHASE_INI | 1199 CSR_2L_PXP_JCPLL_SSC_TRI_EN | 1200 CSR_2L_PXP_JCPLL_SSC_EN); 1201 1202 return 0; 1203 } 1204 1205 static const struct phy_ops airoha_pcie_phy_ops = { 1206 .init = airoha_pcie_phy_init, 1207 .exit = airoha_pcie_phy_exit, 1208 .owner = THIS_MODULE, 1209 }; 1210 1211 static int airoha_pcie_phy_probe(struct platform_device *pdev) 1212 { 1213 struct airoha_pcie_phy *pcie_phy; 1214 struct device *dev = &pdev->dev; 1215 struct phy_provider *provider; 1216 1217 pcie_phy = devm_kzalloc(dev, sizeof(*pcie_phy), GFP_KERNEL); 1218 if (!pcie_phy) 1219 return -ENOMEM; 1220 1221 pcie_phy->csr_2l = devm_platform_ioremap_resource_byname(pdev, "csr-2l"); 1222 if (IS_ERR(pcie_phy->csr_2l)) 1223 return dev_err_probe(dev, PTR_ERR(pcie_phy->csr_2l), 1224 "Failed to map phy-csr-2l base\n"); 1225 1226 pcie_phy->pma0 = devm_platform_ioremap_resource_byname(pdev, "pma0"); 1227 if (IS_ERR(pcie_phy->pma0)) 1228 return dev_err_probe(dev, PTR_ERR(pcie_phy->pma0), 1229 "Failed to map phy-pma0 base\n"); 1230 1231 pcie_phy->pma1 = devm_platform_ioremap_resource_byname(pdev, "pma1"); 1232 if (IS_ERR(pcie_phy->pma1)) 1233 return dev_err_probe(dev, PTR_ERR(pcie_phy->pma1), 1234 "Failed to map phy-pma1 base\n"); 1235 1236 pcie_phy->phy = devm_phy_create(dev, dev->of_node, &airoha_pcie_phy_ops); 1237 if (IS_ERR(pcie_phy->phy)) 1238 return dev_err_probe(dev, PTR_ERR(pcie_phy->phy), 1239 "Failed to create PCIe phy\n"); 1240 1241 pcie_phy->p0_xr_dtime = 1242 devm_platform_ioremap_resource_byname(pdev, "p0-xr-dtime"); 1243 if (IS_ERR(pcie_phy->p0_xr_dtime)) 1244 return dev_err_probe(dev, PTR_ERR(pcie_phy->p0_xr_dtime), 1245 "Failed to map P0 Tx-Rx dtime base\n"); 1246 1247 pcie_phy->p1_xr_dtime = 1248 devm_platform_ioremap_resource_byname(pdev, "p1-xr-dtime"); 1249 if (IS_ERR(pcie_phy->p1_xr_dtime)) 1250 return dev_err_probe(dev, PTR_ERR(pcie_phy->p1_xr_dtime), 1251 "Failed to map P1 Tx-Rx dtime base\n"); 1252 1253 pcie_phy->rx_aeq = devm_platform_ioremap_resource_byname(pdev, "rx-aeq"); 1254 if (IS_ERR(pcie_phy->rx_aeq)) 1255 return dev_err_probe(dev, PTR_ERR(pcie_phy->rx_aeq), 1256 "Failed to map Rx AEQ base\n"); 1257 1258 pcie_phy->dev = dev; 1259 phy_set_drvdata(pcie_phy->phy, pcie_phy); 1260 1261 provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); 1262 if (IS_ERR(provider)) 1263 return dev_err_probe(dev, PTR_ERR(provider), 1264 "PCIe phy probe failed\n"); 1265 1266 return 0; 1267 } 1268 1269 static const struct of_device_id airoha_pcie_phy_of_match[] = { 1270 { .compatible = "airoha,en7581-pcie-phy" }, 1271 { /* sentinel */ } 1272 }; 1273 MODULE_DEVICE_TABLE(of, airoha_pcie_phy_of_match); 1274 1275 static struct platform_driver airoha_pcie_phy_driver = { 1276 .probe = airoha_pcie_phy_probe, 1277 .driver = { 1278 .name = "airoha-pcie-phy", 1279 .of_match_table = airoha_pcie_phy_of_match, 1280 }, 1281 }; 1282 module_platform_driver(airoha_pcie_phy_driver); 1283 1284 MODULE_DESCRIPTION("Airoha PCIe PHY driver"); 1285 MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>"); 1286 MODULE_LICENSE("GPL"); 1287