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