1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2024 AIROHA Inc
7 #include <linux/bitfield.h>
8 #include <linux/delay.h>
10 #include <linux/module.h>
12 #include <linux/phy/phy.h>
13 #include <linux/platform_device.h>
14 #include <linux/slab.h>
16 #include "phy-airoha-pcie-regs.h"
18 #define LEQ_LEN_CTRL_MAX_VAL 7
19 #define FREQ_LOCK_MAX_ATTEMPT 10
21 enum airoha_pcie_port_gen {
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
38 struct airoha_pcie_phy {
44 void __iomem *p0_xr_dtime;
45 void __iomem *p1_xr_dtime;
49 static void airoha_phy_clear_bits(void __iomem *reg, u32 mask)
51 u32 val = readl(reg) & ~mask;
56 static void airoha_phy_set_bits(void __iomem *reg, u32 mask)
58 u32 val = readl(reg) | mask;
63 static void airoha_phy_update_bits(void __iomem *reg, u32 mask, u32 val)
72 #define airoha_phy_update_field(reg, mask, val) \
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))); \
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))
100 airoha_phy_init_lane0_rx_fw_pre_calib(struct airoha_pcie_phy *pcie_phy,
101 enum airoha_pcie_port_gen gen)
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;
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,
130 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4,
131 PCIE_UNLOCK_LOCKTH, 0x3);
133 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR0_PR_INJ_MODE,
134 CSR_2L_PXP_CDR0_INJ_FORCE_OFF);
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);
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);
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);
173 usleep_range(10000, 15000);
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;
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);
194 usleep_range(10000, 15000);
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);
202 cdr_pr_idac_tmp = pr_idac;
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,
210 for (i = 0; i < FREQ_LOCK_MAX_ATTEMPT; i++) {
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);
220 usleep_range(10000, 15000);
222 val = readl(pcie_phy->pma0 + REG_PCIE_PMA_RO_RX_FREQDET);
223 if (val & PCIE_RO_FBCK_LOCK)
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);
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,
249 airoha_phy_pma0_update_field(pcie_phy,
250 REG_PCIE_PMA_DIG_RESERVE_13,
251 PCIE_FLL_IDAC_PCIEG1,
253 airoha_phy_pma0_update_field(pcie_phy,
254 REG_PCIE_PMA_DIG_RESERVE_13,
255 PCIE_FLL_IDAC_PCIEG2,
261 airoha_phy_init_lane1_rx_fw_pre_calib(struct airoha_pcie_phy *pcie_phy,
262 enum airoha_pcie_port_gen gen)
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;
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,
291 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_FREQ_DET4,
292 PCIE_UNLOCK_LOCKTH, 0x3);
294 airoha_phy_csr_2l_set_bits(pcie_phy, REG_CSR_2L_CDR1_PR_INJ_MODE,
295 CSR_2L_PXP_CDR1_INJ_FORCE_OFF);
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);
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);
333 usleep_range(10000, 15000);
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;
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);
354 usleep_range(10000, 15000);
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);
362 cdr_pr_idac_tmp = pr_idac;
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,
370 for (i = 0; i < FREQ_LOCK_MAX_ATTEMPT; i++) {
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);
380 usleep_range(10000, 15000);
382 val = readl(pcie_phy->pma1 + REG_PCIE_PMA_RO_RX_FREQDET);
383 if (val & PCIE_RO_FBCK_LOCK)
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);
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,
409 airoha_phy_pma1_update_field(pcie_phy,
410 REG_PCIE_PMA_DIG_RESERVE_13,
411 PCIE_FLL_IDAC_PCIEG1,
413 airoha_phy_pma1_update_field(pcie_phy,
414 REG_PCIE_PMA_DIG_RESERVE_13,
415 PCIE_FLL_IDAC_PCIEG2,
420 static void airoha_pcie_phy_init_default(struct airoha_pcie_phy *pcie_phy)
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);
432 static void airoha_pcie_phy_init_clk_out(struct airoha_pcie_phy *pcie_phy)
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);
462 static void airoha_pcie_phy_init_csr_2l(struct airoha_pcie_phy *pcie_phy)
464 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,
465 PCIE_SW_XFI_RXPCS_RST | PCIE_SW_REF_RST |
467 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,
468 PCIE_SW_XFI_RXPCS_RST | PCIE_SW_REF_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);
476 static void airoha_pcie_phy_init_rx(struct airoha_pcie_phy *pcie_phy)
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);
496 static void airoha_pcie_phy_init_jcpll(struct airoha_pcie_phy *pcie_phy)
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,
533 airoha_phy_csr_2l_clear_bits(pcie_phy, CSR_2L_PXP_JCPLL_MONCK,
534 CSR_2L_PXP_JCPLL_REFIN_DIV);
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,
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,
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,
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);
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);
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);
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);
629 static void airoha_pcie_phy_txpll(struct airoha_pcie_phy *pcie_phy)
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);
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);
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,
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,
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);
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);
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);
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);
787 static void airoha_pcie_phy_init_ssc_jcpll(struct airoha_pcie_phy *pcie_phy)
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);
810 airoha_pcie_phy_set_rxlan0_signal_detect(struct airoha_pcie_phy *pcie_phy)
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);
815 usleep_range(100, 200);
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);
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);
833 airoha_phy_pma0_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_CAL2,
834 PCIE_CAL_OUT_OS, 0x0);
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);
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);
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);
862 airoha_pcie_phy_set_rxlan1_signal_detect(struct airoha_pcie_phy *pcie_phy)
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);
867 usleep_range(100, 200);
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);
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);
885 airoha_phy_pma1_update_field(pcie_phy, REG_PCIE_PMA_SS_RX_CAL2,
886 PCIE_CAL_OUT_OS, 0x0);
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);
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);
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);
913 static void airoha_pcie_phy_set_rxflow(struct airoha_pcie_phy *pcie_phy)
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);
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);
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);
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);
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);
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);
977 static void airoha_pcie_phy_set_pr(struct airoha_pcie_phy *pcie_phy)
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);
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);
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);
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);
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);
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);
1016 static void airoha_pcie_phy_set_txflow(struct airoha_pcie_phy *pcie_phy)
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);
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);
1031 static void airoha_pcie_phy_set_rx_mode(struct airoha_pcie_phy *pcie_phy)
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,
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);
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);
1065 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_30,
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);
1080 static void airoha_pcie_phy_load_kflow(struct airoha_pcie_phy *pcie_phy)
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);
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);
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);
1100 * airoha_pcie_phy_init() - Initialize the phy
1101 * @phy: the phy to be initialized
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.
1107 static int airoha_pcie_phy_init(struct phy *phy)
1109 struct airoha_pcie_phy *pcie_phy = phy_get_drvdata(phy);
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);
1126 /* enable load FLL-K flow */
1127 airoha_phy_pma0_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_14,
1129 airoha_phy_pma1_set_bits(pcie_phy, REG_PCIE_PMA_DIG_RESERVE_14,
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);
1136 usleep_range(100, 200);
1138 airoha_pcie_phy_init_rx(pcie_phy);
1139 /* phase 1, no ssc for K TXPLL */
1140 airoha_pcie_phy_init_jcpll(pcie_phy);
1142 usleep_range(500, 600);
1144 /* TX PLL settings */
1145 airoha_pcie_phy_txpll(pcie_phy);
1147 usleep_range(200, 300);
1149 /* SSC JCPLL setting */
1150 airoha_pcie_phy_init_ssc_jcpll(pcie_phy);
1152 usleep_range(100, 200);
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);
1159 airoha_pcie_phy_set_rxflow(pcie_phy);
1161 usleep_range(100, 200);
1163 airoha_pcie_phy_set_pr(pcie_phy);
1165 airoha_pcie_phy_set_txflow(pcie_phy);
1167 usleep_range(100, 200);
1168 /* RX mode setting */
1169 airoha_pcie_phy_set_rx_mode(pcie_phy);
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);
1177 usleep_range(100, 200);
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);
1184 usleep_range(100, 200);
1189 static int airoha_pcie_phy_exit(struct phy *phy)
1191 struct airoha_pcie_phy *pcie_phy = phy_get_drvdata(phy);
1193 airoha_phy_pma0_clear_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,
1195 airoha_phy_pma1_clear_bits(pcie_phy, REG_PCIE_PMA_SW_RESET,
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);
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,
1211 static int airoha_pcie_phy_probe(struct platform_device *pdev)
1213 struct airoha_pcie_phy *pcie_phy;
1214 struct device *dev = &pdev->dev;
1215 struct phy_provider *provider;
1217 pcie_phy = devm_kzalloc(dev, sizeof(*pcie_phy), GFP_KERNEL);
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");
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");
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");
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");
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");
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");
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");
1258 pcie_phy->dev = dev;
1259 phy_set_drvdata(pcie_phy->phy, pcie_phy);
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");
1269 static const struct of_device_id airoha_pcie_phy_of_match[] = {
1270 { .compatible = "airoha,en7581-pcie-phy" },
1273 MODULE_DEVICE_TABLE(of, airoha_pcie_phy_of_match);
1275 static struct platform_driver airoha_pcie_phy_driver = {
1276 .probe = airoha_pcie_phy_probe,
1278 .name = "airoha-pcie-phy",
1279 .of_match_table = airoha_pcie_phy_of_match,
1282 module_platform_driver(airoha_pcie_phy_driver);
1284 MODULE_DESCRIPTION("Airoha PCIe PHY driver");
1286 MODULE_LICENSE("GPL");