1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Copyright (c) 2015 MediaTek Inc.
4 * Author: Chunfeng Yun <chunfeng.yun@mediatek.com>
5 *
6 */
7
8 #include <dt-bindings/phy/phy.h>
9 #include <linux/clk.h>
10 #include <linux/delay.h>
11 #include <linux/io.h>
12 #include <linux/iopoll.h>
13 #include <linux/mfd/syscon.h>
14 #include <linux/module.h>
15 #include <linux/nvmem-consumer.h>
16 #include <linux/of_address.h>
17 #include <linux/of_device.h>
18 #include <linux/phy/phy.h>
19 #include <linux/platform_device.h>
20 #include <linux/regmap.h>
21
22 /* version V1 sub-banks offset base address */
23 /* banks shared by multiple phys */
24 #define SSUSB_SIFSLV_V1_SPLLC 0x000 /* shared by u3 phys */
25 #define SSUSB_SIFSLV_V1_U2FREQ 0x100 /* shared by u2 phys */
26 #define SSUSB_SIFSLV_V1_CHIP 0x300 /* shared by u3 phys */
27 /* u2 phy bank */
28 #define SSUSB_SIFSLV_V1_U2PHY_COM 0x000
29 /* u3/pcie/sata phy banks */
30 #define SSUSB_SIFSLV_V1_U3PHYD 0x000
31 #define SSUSB_SIFSLV_V1_U3PHYA 0x200
32
33 /* version V2/V3 sub-banks offset base address */
34 /* V3: U2FREQ is not used anymore, but reserved */
35 /* u2 phy banks */
36 #define SSUSB_SIFSLV_V2_MISC 0x000
37 #define SSUSB_SIFSLV_V2_U2FREQ 0x100
38 #define SSUSB_SIFSLV_V2_U2PHY_COM 0x300
39 /* u3/pcie/sata phy banks */
40 #define SSUSB_SIFSLV_V2_SPLLC 0x000
41 #define SSUSB_SIFSLV_V2_CHIP 0x100
42 #define SSUSB_SIFSLV_V2_U3PHYD 0x200
43 #define SSUSB_SIFSLV_V2_U3PHYA 0x400
44
45 #define U3P_MISC_REG1 0x04
46 #define MR1_EFUSE_AUTO_LOAD_DIS BIT(6)
47
48 #define U3P_USBPHYACR0 0x000
49 #define PA0_RG_U2PLL_FORCE_ON BIT(15)
50 #define PA0_USB20_PLL_PREDIV GENMASK(7, 6)
51 #define PA0_USB20_PLL_PREDIV_VAL(x) ((0x3 & (x)) << 6)
52 #define PA0_RG_USB20_INTR_EN BIT(5)
53
54 #define U3P_USBPHYACR1 0x004
55 #define PA1_RG_INTR_CAL GENMASK(23, 19)
56 #define PA1_RG_INTR_CAL_VAL(x) ((0x1f & (x)) << 19)
57 #define PA1_RG_VRT_SEL GENMASK(14, 12)
58 #define PA1_RG_VRT_SEL_VAL(x) ((0x7 & (x)) << 12)
59 #define PA1_RG_TERM_SEL GENMASK(10, 8)
60 #define PA1_RG_TERM_SEL_VAL(x) ((0x7 & (x)) << 8)
61
62 #define U3P_USBPHYACR2 0x008
63 #define PA2_RG_U2PLL_BW GENMASK(21, 19)
64 #define PA2_RG_U2PLL_BW_VAL(x) ((0x7 & (x)) << 19)
65 #define PA2_RG_SIF_U2PLL_FORCE_EN BIT(18)
66
67 #define U3P_USBPHYACR5 0x014
68 #define PA5_RG_U2_HSTX_SRCAL_EN BIT(15)
69 #define PA5_RG_U2_HSTX_SRCTRL GENMASK(14, 12)
70 #define PA5_RG_U2_HSTX_SRCTRL_VAL(x) ((0x7 & (x)) << 12)
71 #define PA5_RG_U2_HS_100U_U3_EN BIT(11)
72
73 #define U3P_USBPHYACR6 0x018
74 #define PA6_RG_U2_BC11_SW_EN BIT(23)
75 #define PA6_RG_U2_OTG_VBUSCMP_EN BIT(20)
76 #define PA6_RG_U2_DISCTH GENMASK(7, 4)
77 #define PA6_RG_U2_DISCTH_VAL(x) ((0xf & (x)) << 4)
78 #define PA6_RG_U2_SQTH GENMASK(3, 0)
79 #define PA6_RG_U2_SQTH_VAL(x) (0xf & (x))
80
81 #define U3P_U2PHYACR4 0x020
82 #define P2C_RG_USB20_GPIO_CTL BIT(9)
83 #define P2C_USB20_GPIO_MODE BIT(8)
84 #define P2C_U2_GPIO_CTR_MSK (P2C_RG_USB20_GPIO_CTL | P2C_USB20_GPIO_MODE)
85
86 #define U3P_U2PHYA_RESV 0x030
87 #define P2R_RG_U2PLL_FBDIV_26M 0x1bb13b
88 #define P2R_RG_U2PLL_FBDIV_48M 0x3c0000
89
90 #define U3P_U2PHYA_RESV1 0x044
91 #define P2R_RG_U2PLL_REFCLK_SEL BIT(5)
92 #define P2R_RG_U2PLL_FRA_EN BIT(3)
93
94 #define U3D_U2PHYDCR0 0x060
95 #define P2C_RG_SIF_U2PLL_FORCE_ON BIT(24)
96
97 #define U3P_U2PHYDTM0 0x068
98 #define P2C_FORCE_UART_EN BIT(26)
99 #define P2C_FORCE_DATAIN BIT(23)
100 #define P2C_FORCE_DM_PULLDOWN BIT(21)
101 #define P2C_FORCE_DP_PULLDOWN BIT(20)
102 #define P2C_FORCE_XCVRSEL BIT(19)
103 #define P2C_FORCE_SUSPENDM BIT(18)
104 #define P2C_FORCE_TERMSEL BIT(17)
105 #define P2C_RG_DATAIN GENMASK(13, 10)
106 #define P2C_RG_DATAIN_VAL(x) ((0xf & (x)) << 10)
107 #define P2C_RG_DMPULLDOWN BIT(7)
108 #define P2C_RG_DPPULLDOWN BIT(6)
109 #define P2C_RG_XCVRSEL GENMASK(5, 4)
110 #define P2C_RG_XCVRSEL_VAL(x) ((0x3 & (x)) << 4)
111 #define P2C_RG_SUSPENDM BIT(3)
112 #define P2C_RG_TERMSEL BIT(2)
113 #define P2C_DTM0_PART_MASK \
114 (P2C_FORCE_DATAIN | P2C_FORCE_DM_PULLDOWN | \
115 P2C_FORCE_DP_PULLDOWN | P2C_FORCE_XCVRSEL | \
116 P2C_FORCE_TERMSEL | P2C_RG_DMPULLDOWN | \
117 P2C_RG_DPPULLDOWN | P2C_RG_TERMSEL)
118
119 #define U3P_U2PHYDTM1 0x06C
120 #define P2C_RG_UART_EN BIT(16)
121 #define P2C_FORCE_IDDIG BIT(9)
122 #define P2C_RG_VBUSVALID BIT(5)
123 #define P2C_RG_SESSEND BIT(4)
124 #define P2C_RG_AVALID BIT(2)
125 #define P2C_RG_IDDIG BIT(1)
126
127 #define U3P_U2PHYBC12C 0x080
128 #define P2C_RG_CHGDT_EN BIT(0)
129
130 #define U3P_U3_CHIP_GPIO_CTLD 0x0c
131 #define P3C_REG_IP_SW_RST BIT(31)
132 #define P3C_MCU_BUS_CK_GATE_EN BIT(30)
133 #define P3C_FORCE_IP_SW_RST BIT(29)
134
135 #define U3P_U3_CHIP_GPIO_CTLE 0x10
136 #define P3C_RG_SWRST_U3_PHYD BIT(25)
137 #define P3C_RG_SWRST_U3_PHYD_FORCE_EN BIT(24)
138
139 #define U3P_U3_PHYA_REG0 0x000
140 #define P3A_RG_IEXT_INTR GENMASK(15, 10)
141 #define P3A_RG_IEXT_INTR_VAL(x) ((0x3f & (x)) << 10)
142 #define P3A_RG_CLKDRV_OFF GENMASK(3, 2)
143 #define P3A_RG_CLKDRV_OFF_VAL(x) ((0x3 & (x)) << 2)
144
145 #define U3P_U3_PHYA_REG1 0x004
146 #define P3A_RG_CLKDRV_AMP GENMASK(31, 29)
147 #define P3A_RG_CLKDRV_AMP_VAL(x) ((0x7 & (x)) << 29)
148
149 #define U3P_U3_PHYA_REG6 0x018
150 #define P3A_RG_TX_EIDLE_CM GENMASK(31, 28)
151 #define P3A_RG_TX_EIDLE_CM_VAL(x) ((0xf & (x)) << 28)
152
153 #define U3P_U3_PHYA_REG9 0x024
154 #define P3A_RG_RX_DAC_MUX GENMASK(5, 1)
155 #define P3A_RG_RX_DAC_MUX_VAL(x) ((0x1f & (x)) << 1)
156
157 #define U3P_U3_PHYA_DA_REG0 0x100
158 #define P3A_RG_XTAL_EXT_PE2H GENMASK(17, 16)
159 #define P3A_RG_XTAL_EXT_PE2H_VAL(x) ((0x3 & (x)) << 16)
160 #define P3A_RG_XTAL_EXT_PE1H GENMASK(13, 12)
161 #define P3A_RG_XTAL_EXT_PE1H_VAL(x) ((0x3 & (x)) << 12)
162 #define P3A_RG_XTAL_EXT_EN_U3 GENMASK(11, 10)
163 #define P3A_RG_XTAL_EXT_EN_U3_VAL(x) ((0x3 & (x)) << 10)
164
165 #define U3P_U3_PHYA_DA_REG4 0x108
166 #define P3A_RG_PLL_DIVEN_PE2H GENMASK(21, 19)
167 #define P3A_RG_PLL_BC_PE2H GENMASK(7, 6)
168 #define P3A_RG_PLL_BC_PE2H_VAL(x) ((0x3 & (x)) << 6)
169
170 #define U3P_U3_PHYA_DA_REG5 0x10c
171 #define P3A_RG_PLL_BR_PE2H GENMASK(29, 28)
172 #define P3A_RG_PLL_BR_PE2H_VAL(x) ((0x3 & (x)) << 28)
173 #define P3A_RG_PLL_IC_PE2H GENMASK(15, 12)
174 #define P3A_RG_PLL_IC_PE2H_VAL(x) ((0xf & (x)) << 12)
175
176 #define U3P_U3_PHYA_DA_REG6 0x110
177 #define P3A_RG_PLL_IR_PE2H GENMASK(19, 16)
178 #define P3A_RG_PLL_IR_PE2H_VAL(x) ((0xf & (x)) << 16)
179
180 #define U3P_U3_PHYA_DA_REG7 0x114
181 #define P3A_RG_PLL_BP_PE2H GENMASK(19, 16)
182 #define P3A_RG_PLL_BP_PE2H_VAL(x) ((0xf & (x)) << 16)
183
184 #define U3P_U3_PHYA_DA_REG20 0x13c
185 #define P3A_RG_PLL_DELTA1_PE2H GENMASK(31, 16)
186 #define P3A_RG_PLL_DELTA1_PE2H_VAL(x) ((0xffff & (x)) << 16)
187
188 #define U3P_U3_PHYA_DA_REG25 0x148
189 #define P3A_RG_PLL_DELTA_PE2H GENMASK(15, 0)
190 #define P3A_RG_PLL_DELTA_PE2H_VAL(x) (0xffff & (x))
191
192 #define U3P_U3_PHYD_LFPS1 0x00c
193 #define P3D_RG_FWAKE_TH GENMASK(21, 16)
194 #define P3D_RG_FWAKE_TH_VAL(x) ((0x3f & (x)) << 16)
195
196 #define U3P_U3_PHYD_IMPCAL0 0x010
197 #define P3D_RG_FORCE_TX_IMPEL BIT(31)
198 #define P3D_RG_TX_IMPEL GENMASK(28, 24)
199 #define P3D_RG_TX_IMPEL_VAL(x) ((0x1f & (x)) << 24)
200
201 #define U3P_U3_PHYD_IMPCAL1 0x014
202 #define P3D_RG_FORCE_RX_IMPEL BIT(31)
203 #define P3D_RG_RX_IMPEL GENMASK(28, 24)
204 #define P3D_RG_RX_IMPEL_VAL(x) ((0x1f & (x)) << 24)
205
206 #define U3P_U3_PHYD_RSV 0x054
207 #define P3D_RG_EFUSE_AUTO_LOAD_DIS BIT(12)
208
209 #define U3P_U3_PHYD_CDR1 0x05c
210 #define P3D_RG_CDR_BIR_LTD1 GENMASK(28, 24)
211 #define P3D_RG_CDR_BIR_LTD1_VAL(x) ((0x1f & (x)) << 24)
212 #define P3D_RG_CDR_BIR_LTD0 GENMASK(12, 8)
213 #define P3D_RG_CDR_BIR_LTD0_VAL(x) ((0x1f & (x)) << 8)
214
215 #define U3P_U3_PHYD_RXDET1 0x128
216 #define P3D_RG_RXDET_STB2_SET GENMASK(17, 9)
217 #define P3D_RG_RXDET_STB2_SET_VAL(x) ((0x1ff & (x)) << 9)
218
219 #define U3P_U3_PHYD_RXDET2 0x12c
220 #define P3D_RG_RXDET_STB2_SET_P3 GENMASK(8, 0)
221 #define P3D_RG_RXDET_STB2_SET_P3_VAL(x) (0x1ff & (x))
222
223 #define U3P_SPLLC_XTALCTL3 0x018
224 #define XC3_RG_U3_XTAL_RX_PWD BIT(9)
225 #define XC3_RG_U3_FRC_XTAL_RX_PWD BIT(8)
226
227 #define U3P_U2FREQ_FMCR0 0x00
228 #define P2F_RG_MONCLK_SEL GENMASK(27, 26)
229 #define P2F_RG_MONCLK_SEL_VAL(x) ((0x3 & (x)) << 26)
230 #define P2F_RG_FREQDET_EN BIT(24)
231 #define P2F_RG_CYCLECNT GENMASK(23, 0)
232 #define P2F_RG_CYCLECNT_VAL(x) ((P2F_RG_CYCLECNT) & (x))
233
234 #define U3P_U2FREQ_VALUE 0x0c
235
236 #define U3P_U2FREQ_FMMONR1 0x10
237 #define P2F_USB_FM_VALID BIT(0)
238 #define P2F_RG_FRCK_EN BIT(8)
239
240 #define U3P_REF_CLK 26 /* MHZ */
241 #define U3P_SLEW_RATE_COEF 28
242 #define U3P_SR_COEF_DIVISOR 1000
243 #define U3P_FM_DET_CYCLE_CNT 1024
244
245 /* SATA register setting */
246 #define PHYD_CTRL_SIGNAL_MODE4 0x1c
247 /* CDR Charge Pump P-path current adjustment */
248 #define RG_CDR_BICLTD1_GEN1_MSK GENMASK(23, 20)
249 #define RG_CDR_BICLTD1_GEN1_VAL(x) ((0xf & (x)) << 20)
250 #define RG_CDR_BICLTD0_GEN1_MSK GENMASK(11, 8)
251 #define RG_CDR_BICLTD0_GEN1_VAL(x) ((0xf & (x)) << 8)
252
253 #define PHYD_DESIGN_OPTION2 0x24
254 /* Symbol lock count selection */
255 #define RG_LOCK_CNT_SEL_MSK GENMASK(5, 4)
256 #define RG_LOCK_CNT_SEL_VAL(x) ((0x3 & (x)) << 4)
257
258 #define PHYD_DESIGN_OPTION9 0x40
259 /* COMWAK GAP width window */
260 #define RG_TG_MAX_MSK GENMASK(20, 16)
261 #define RG_TG_MAX_VAL(x) ((0x1f & (x)) << 16)
262 /* COMINIT GAP width window */
263 #define RG_T2_MAX_MSK GENMASK(13, 8)
264 #define RG_T2_MAX_VAL(x) ((0x3f & (x)) << 8)
265 /* COMWAK GAP width window */
266 #define RG_TG_MIN_MSK GENMASK(7, 5)
267 #define RG_TG_MIN_VAL(x) ((0x7 & (x)) << 5)
268 /* COMINIT GAP width window */
269 #define RG_T2_MIN_MSK GENMASK(4, 0)
270 #define RG_T2_MIN_VAL(x) (0x1f & (x))
271
272 #define ANA_RG_CTRL_SIGNAL1 0x4c
273 /* TX driver tail current control for 0dB de-empahsis mdoe for Gen1 speed */
274 #define RG_IDRV_0DB_GEN1_MSK GENMASK(13, 8)
275 #define RG_IDRV_0DB_GEN1_VAL(x) ((0x3f & (x)) << 8)
276
277 #define ANA_RG_CTRL_SIGNAL4 0x58
278 #define RG_CDR_BICLTR_GEN1_MSK GENMASK(23, 20)
279 #define RG_CDR_BICLTR_GEN1_VAL(x) ((0xf & (x)) << 20)
280 /* Loop filter R1 resistance adjustment for Gen1 speed */
281 #define RG_CDR_BR_GEN2_MSK GENMASK(10, 8)
282 #define RG_CDR_BR_GEN2_VAL(x) ((0x7 & (x)) << 8)
283
284 #define ANA_RG_CTRL_SIGNAL6 0x60
285 /* I-path capacitance adjustment for Gen1 */
286 #define RG_CDR_BC_GEN1_MSK GENMASK(28, 24)
287 #define RG_CDR_BC_GEN1_VAL(x) ((0x1f & (x)) << 24)
288 #define RG_CDR_BIRLTR_GEN1_MSK GENMASK(4, 0)
289 #define RG_CDR_BIRLTR_GEN1_VAL(x) (0x1f & (x))
290
291 #define ANA_EQ_EYE_CTRL_SIGNAL1 0x6c
292 /* RX Gen1 LEQ tuning step */
293 #define RG_EQ_DLEQ_LFI_GEN1_MSK GENMASK(11, 8)
294 #define RG_EQ_DLEQ_LFI_GEN1_VAL(x) ((0xf & (x)) << 8)
295
296 #define ANA_EQ_EYE_CTRL_SIGNAL4 0xd8
297 #define RG_CDR_BIRLTD0_GEN1_MSK GENMASK(20, 16)
298 #define RG_CDR_BIRLTD0_GEN1_VAL(x) ((0x1f & (x)) << 16)
299
300 #define ANA_EQ_EYE_CTRL_SIGNAL5 0xdc
301 #define RG_CDR_BIRLTD0_GEN3_MSK GENMASK(4, 0)
302 #define RG_CDR_BIRLTD0_GEN3_VAL(x) (0x1f & (x))
303
304 /* PHY switch between pcie/usb3/sgmii/sata */
305 #define USB_PHY_SWITCH_CTRL 0x0
306 #define RG_PHY_SW_TYPE GENMASK(3, 0)
307 #define RG_PHY_SW_PCIE 0x0
308 #define RG_PHY_SW_USB3 0x1
309 #define RG_PHY_SW_SGMII 0x2
310 #define RG_PHY_SW_SATA 0x3
311
312 #define TPHY_CLKS_CNT 2
313
314 enum mtk_phy_version {
315 MTK_PHY_V1 = 1,
316 MTK_PHY_V2,
317 MTK_PHY_V3,
318 };
319
320 struct mtk_phy_pdata {
321 /* avoid RX sensitivity level degradation only for mt8173 */
322 bool avoid_rx_sen_degradation;
323 /*
324 * workaround only for mt8195, HW fix it for others of V3,
325 * u2phy should use integer mode instead of fractional mode of
326 * 48M PLL, fix it by switching PLL to 26M from default 48M
327 */
328 bool sw_pll_48m_to_26m;
329 /*
330 * Some SoCs (e.g. mt8195) drop a bit when use auto load efuse,
331 * support sw way, also support it for v2/v3 optionally.
332 */
333 bool sw_efuse_supported;
334 enum mtk_phy_version version;
335 };
336
337 struct u2phy_banks {
338 void __iomem *misc;
339 void __iomem *fmreg;
340 void __iomem *com;
341 };
342
343 struct u3phy_banks {
344 void __iomem *spllc;
345 void __iomem *chip;
346 void __iomem *phyd; /* include u3phyd_bank2 */
347 void __iomem *phya; /* include u3phya_da */
348 };
349
350 struct mtk_phy_instance {
351 struct phy *phy;
352 void __iomem *port_base;
353 union {
354 struct u2phy_banks u2_banks;
355 struct u3phy_banks u3_banks;
356 };
357 struct clk_bulk_data clks[TPHY_CLKS_CNT];
358 u32 index;
359 u32 type;
360 struct regmap *type_sw;
361 u32 type_sw_reg;
362 u32 type_sw_index;
363 u32 efuse_sw_en;
364 u32 efuse_intr;
365 u32 efuse_tx_imp;
366 u32 efuse_rx_imp;
367 int eye_src;
368 int eye_vrt;
369 int eye_term;
370 int intr;
371 int discth;
372 bool bc12_en;
373 };
374
375 struct mtk_tphy {
376 struct device *dev;
377 void __iomem *sif_base; /* only shared sif */
378 const struct mtk_phy_pdata *pdata;
379 struct mtk_phy_instance **phys;
380 int nphys;
381 int src_ref_clk; /* MHZ, reference clock for slew rate calibrate */
382 int src_coef; /* coefficient for slew rate calibrate */
383 };
384
hs_slew_rate_calibrate(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)385 static void hs_slew_rate_calibrate(struct mtk_tphy *tphy,
386 struct mtk_phy_instance *instance)
387 {
388 struct u2phy_banks *u2_banks = &instance->u2_banks;
389 void __iomem *fmreg = u2_banks->fmreg;
390 void __iomem *com = u2_banks->com;
391 int calibration_val;
392 int fm_out;
393 u32 tmp;
394
395 /* HW V3 doesn't support slew rate cal anymore */
396 if (tphy->pdata->version == MTK_PHY_V3)
397 return;
398
399 /* use force value */
400 if (instance->eye_src)
401 return;
402
403 /* enable USB ring oscillator */
404 tmp = readl(com + U3P_USBPHYACR5);
405 tmp |= PA5_RG_U2_HSTX_SRCAL_EN;
406 writel(tmp, com + U3P_USBPHYACR5);
407 udelay(1);
408
409 /*enable free run clock */
410 tmp = readl(fmreg + U3P_U2FREQ_FMMONR1);
411 tmp |= P2F_RG_FRCK_EN;
412 writel(tmp, fmreg + U3P_U2FREQ_FMMONR1);
413
414 /* set cycle count as 1024, and select u2 channel */
415 tmp = readl(fmreg + U3P_U2FREQ_FMCR0);
416 tmp &= ~(P2F_RG_CYCLECNT | P2F_RG_MONCLK_SEL);
417 tmp |= P2F_RG_CYCLECNT_VAL(U3P_FM_DET_CYCLE_CNT);
418 if (tphy->pdata->version == MTK_PHY_V1)
419 tmp |= P2F_RG_MONCLK_SEL_VAL(instance->index >> 1);
420
421 writel(tmp, fmreg + U3P_U2FREQ_FMCR0);
422
423 /* enable frequency meter */
424 tmp = readl(fmreg + U3P_U2FREQ_FMCR0);
425 tmp |= P2F_RG_FREQDET_EN;
426 writel(tmp, fmreg + U3P_U2FREQ_FMCR0);
427
428 /* ignore return value */
429 readl_poll_timeout(fmreg + U3P_U2FREQ_FMMONR1, tmp,
430 (tmp & P2F_USB_FM_VALID), 10, 200);
431
432 fm_out = readl(fmreg + U3P_U2FREQ_VALUE);
433
434 /* disable frequency meter */
435 tmp = readl(fmreg + U3P_U2FREQ_FMCR0);
436 tmp &= ~P2F_RG_FREQDET_EN;
437 writel(tmp, fmreg + U3P_U2FREQ_FMCR0);
438
439 /*disable free run clock */
440 tmp = readl(fmreg + U3P_U2FREQ_FMMONR1);
441 tmp &= ~P2F_RG_FRCK_EN;
442 writel(tmp, fmreg + U3P_U2FREQ_FMMONR1);
443
444 if (fm_out) {
445 /* ( 1024 / FM_OUT ) x reference clock frequency x coef */
446 tmp = tphy->src_ref_clk * tphy->src_coef;
447 tmp = (tmp * U3P_FM_DET_CYCLE_CNT) / fm_out;
448 calibration_val = DIV_ROUND_CLOSEST(tmp, U3P_SR_COEF_DIVISOR);
449 } else {
450 /* if FM detection fail, set default value */
451 calibration_val = 4;
452 }
453 dev_dbg(tphy->dev, "phy:%d, fm_out:%d, calib:%d (clk:%d, coef:%d)\n",
454 instance->index, fm_out, calibration_val,
455 tphy->src_ref_clk, tphy->src_coef);
456
457 /* set HS slew rate */
458 tmp = readl(com + U3P_USBPHYACR5);
459 tmp &= ~PA5_RG_U2_HSTX_SRCTRL;
460 tmp |= PA5_RG_U2_HSTX_SRCTRL_VAL(calibration_val);
461 writel(tmp, com + U3P_USBPHYACR5);
462
463 /* disable USB ring oscillator */
464 tmp = readl(com + U3P_USBPHYACR5);
465 tmp &= ~PA5_RG_U2_HSTX_SRCAL_EN;
466 writel(tmp, com + U3P_USBPHYACR5);
467 }
468
u3_phy_instance_init(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)469 static void u3_phy_instance_init(struct mtk_tphy *tphy,
470 struct mtk_phy_instance *instance)
471 {
472 struct u3phy_banks *u3_banks = &instance->u3_banks;
473 u32 tmp;
474
475 /* gating PCIe Analog XTAL clock */
476 tmp = readl(u3_banks->spllc + U3P_SPLLC_XTALCTL3);
477 tmp |= XC3_RG_U3_XTAL_RX_PWD | XC3_RG_U3_FRC_XTAL_RX_PWD;
478 writel(tmp, u3_banks->spllc + U3P_SPLLC_XTALCTL3);
479
480 /* gating XSQ */
481 tmp = readl(u3_banks->phya + U3P_U3_PHYA_DA_REG0);
482 tmp &= ~P3A_RG_XTAL_EXT_EN_U3;
483 tmp |= P3A_RG_XTAL_EXT_EN_U3_VAL(2);
484 writel(tmp, u3_banks->phya + U3P_U3_PHYA_DA_REG0);
485
486 tmp = readl(u3_banks->phya + U3P_U3_PHYA_REG9);
487 tmp &= ~P3A_RG_RX_DAC_MUX;
488 tmp |= P3A_RG_RX_DAC_MUX_VAL(4);
489 writel(tmp, u3_banks->phya + U3P_U3_PHYA_REG9);
490
491 tmp = readl(u3_banks->phya + U3P_U3_PHYA_REG6);
492 tmp &= ~P3A_RG_TX_EIDLE_CM;
493 tmp |= P3A_RG_TX_EIDLE_CM_VAL(0xe);
494 writel(tmp, u3_banks->phya + U3P_U3_PHYA_REG6);
495
496 tmp = readl(u3_banks->phyd + U3P_U3_PHYD_CDR1);
497 tmp &= ~(P3D_RG_CDR_BIR_LTD0 | P3D_RG_CDR_BIR_LTD1);
498 tmp |= P3D_RG_CDR_BIR_LTD0_VAL(0xc) | P3D_RG_CDR_BIR_LTD1_VAL(0x3);
499 writel(tmp, u3_banks->phyd + U3P_U3_PHYD_CDR1);
500
501 tmp = readl(u3_banks->phyd + U3P_U3_PHYD_LFPS1);
502 tmp &= ~P3D_RG_FWAKE_TH;
503 tmp |= P3D_RG_FWAKE_TH_VAL(0x34);
504 writel(tmp, u3_banks->phyd + U3P_U3_PHYD_LFPS1);
505
506 tmp = readl(u3_banks->phyd + U3P_U3_PHYD_RXDET1);
507 tmp &= ~P3D_RG_RXDET_STB2_SET;
508 tmp |= P3D_RG_RXDET_STB2_SET_VAL(0x10);
509 writel(tmp, u3_banks->phyd + U3P_U3_PHYD_RXDET1);
510
511 tmp = readl(u3_banks->phyd + U3P_U3_PHYD_RXDET2);
512 tmp &= ~P3D_RG_RXDET_STB2_SET_P3;
513 tmp |= P3D_RG_RXDET_STB2_SET_P3_VAL(0x10);
514 writel(tmp, u3_banks->phyd + U3P_U3_PHYD_RXDET2);
515
516 dev_dbg(tphy->dev, "%s(%d)\n", __func__, instance->index);
517 }
518
u2_phy_pll_26m_set(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)519 static void u2_phy_pll_26m_set(struct mtk_tphy *tphy,
520 struct mtk_phy_instance *instance)
521 {
522 struct u2phy_banks *u2_banks = &instance->u2_banks;
523 void __iomem *com = u2_banks->com;
524 u32 tmp;
525
526 if (!tphy->pdata->sw_pll_48m_to_26m)
527 return;
528
529 tmp = readl(com + U3P_USBPHYACR0);
530 tmp &= ~PA0_USB20_PLL_PREDIV;
531 tmp |= PA0_USB20_PLL_PREDIV_VAL(0);
532 writel(tmp, com + U3P_USBPHYACR0);
533
534 tmp = readl(com + U3P_USBPHYACR2);
535 tmp &= ~PA2_RG_U2PLL_BW;
536 tmp |= PA2_RG_U2PLL_BW_VAL(3);
537 writel(tmp, com + U3P_USBPHYACR2);
538
539 writel(P2R_RG_U2PLL_FBDIV_26M, com + U3P_U2PHYA_RESV);
540
541 tmp = readl(com + U3P_U2PHYA_RESV1);
542 tmp |= P2R_RG_U2PLL_FRA_EN | P2R_RG_U2PLL_REFCLK_SEL;
543 writel(tmp, com + U3P_U2PHYA_RESV1);
544 }
545
u2_phy_instance_init(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)546 static void u2_phy_instance_init(struct mtk_tphy *tphy,
547 struct mtk_phy_instance *instance)
548 {
549 struct u2phy_banks *u2_banks = &instance->u2_banks;
550 void __iomem *com = u2_banks->com;
551 u32 index = instance->index;
552 u32 tmp;
553
554 /* switch to USB function, and enable usb pll */
555 tmp = readl(com + U3P_U2PHYDTM0);
556 tmp &= ~(P2C_FORCE_UART_EN | P2C_FORCE_SUSPENDM);
557 tmp |= P2C_RG_XCVRSEL_VAL(1) | P2C_RG_DATAIN_VAL(0);
558 writel(tmp, com + U3P_U2PHYDTM0);
559
560 tmp = readl(com + U3P_U2PHYDTM1);
561 tmp &= ~P2C_RG_UART_EN;
562 writel(tmp, com + U3P_U2PHYDTM1);
563
564 tmp = readl(com + U3P_USBPHYACR0);
565 tmp |= PA0_RG_USB20_INTR_EN;
566 writel(tmp, com + U3P_USBPHYACR0);
567
568 /* disable switch 100uA current to SSUSB */
569 tmp = readl(com + U3P_USBPHYACR5);
570 tmp &= ~PA5_RG_U2_HS_100U_U3_EN;
571 writel(tmp, com + U3P_USBPHYACR5);
572
573 if (!index) {
574 tmp = readl(com + U3P_U2PHYACR4);
575 tmp &= ~P2C_U2_GPIO_CTR_MSK;
576 writel(tmp, com + U3P_U2PHYACR4);
577 }
578
579 if (tphy->pdata->avoid_rx_sen_degradation) {
580 if (!index) {
581 tmp = readl(com + U3P_USBPHYACR2);
582 tmp |= PA2_RG_SIF_U2PLL_FORCE_EN;
583 writel(tmp, com + U3P_USBPHYACR2);
584
585 tmp = readl(com + U3D_U2PHYDCR0);
586 tmp &= ~P2C_RG_SIF_U2PLL_FORCE_ON;
587 writel(tmp, com + U3D_U2PHYDCR0);
588 } else {
589 tmp = readl(com + U3D_U2PHYDCR0);
590 tmp |= P2C_RG_SIF_U2PLL_FORCE_ON;
591 writel(tmp, com + U3D_U2PHYDCR0);
592
593 tmp = readl(com + U3P_U2PHYDTM0);
594 tmp |= P2C_RG_SUSPENDM | P2C_FORCE_SUSPENDM;
595 writel(tmp, com + U3P_U2PHYDTM0);
596 }
597 }
598
599 tmp = readl(com + U3P_USBPHYACR6);
600 tmp &= ~PA6_RG_U2_BC11_SW_EN; /* DP/DM BC1.1 path Disable */
601 tmp &= ~PA6_RG_U2_SQTH;
602 tmp |= PA6_RG_U2_SQTH_VAL(2);
603 writel(tmp, com + U3P_USBPHYACR6);
604
605 /* Workaround only for mt8195, HW fix it for others (V3) */
606 u2_phy_pll_26m_set(tphy, instance);
607
608 dev_dbg(tphy->dev, "%s(%d)\n", __func__, index);
609 }
610
u2_phy_instance_power_on(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)611 static void u2_phy_instance_power_on(struct mtk_tphy *tphy,
612 struct mtk_phy_instance *instance)
613 {
614 struct u2phy_banks *u2_banks = &instance->u2_banks;
615 void __iomem *com = u2_banks->com;
616 u32 index = instance->index;
617 u32 tmp;
618
619 tmp = readl(com + U3P_U2PHYDTM0);
620 tmp &= ~(P2C_RG_XCVRSEL | P2C_RG_DATAIN | P2C_DTM0_PART_MASK);
621 writel(tmp, com + U3P_U2PHYDTM0);
622
623 /* OTG Enable */
624 tmp = readl(com + U3P_USBPHYACR6);
625 tmp |= PA6_RG_U2_OTG_VBUSCMP_EN;
626 writel(tmp, com + U3P_USBPHYACR6);
627
628 tmp = readl(com + U3P_U2PHYDTM1);
629 tmp |= P2C_RG_VBUSVALID | P2C_RG_AVALID;
630 tmp &= ~P2C_RG_SESSEND;
631 writel(tmp, com + U3P_U2PHYDTM1);
632
633 if (tphy->pdata->avoid_rx_sen_degradation && index) {
634 tmp = readl(com + U3D_U2PHYDCR0);
635 tmp |= P2C_RG_SIF_U2PLL_FORCE_ON;
636 writel(tmp, com + U3D_U2PHYDCR0);
637
638 tmp = readl(com + U3P_U2PHYDTM0);
639 tmp |= P2C_RG_SUSPENDM | P2C_FORCE_SUSPENDM;
640 writel(tmp, com + U3P_U2PHYDTM0);
641 }
642 dev_dbg(tphy->dev, "%s(%d)\n", __func__, index);
643 }
644
u2_phy_instance_power_off(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)645 static void u2_phy_instance_power_off(struct mtk_tphy *tphy,
646 struct mtk_phy_instance *instance)
647 {
648 struct u2phy_banks *u2_banks = &instance->u2_banks;
649 void __iomem *com = u2_banks->com;
650 u32 index = instance->index;
651 u32 tmp;
652
653 tmp = readl(com + U3P_U2PHYDTM0);
654 tmp &= ~(P2C_RG_XCVRSEL | P2C_RG_DATAIN);
655 writel(tmp, com + U3P_U2PHYDTM0);
656
657 /* OTG Disable */
658 tmp = readl(com + U3P_USBPHYACR6);
659 tmp &= ~PA6_RG_U2_OTG_VBUSCMP_EN;
660 writel(tmp, com + U3P_USBPHYACR6);
661
662 tmp = readl(com + U3P_U2PHYDTM1);
663 tmp &= ~(P2C_RG_VBUSVALID | P2C_RG_AVALID);
664 tmp |= P2C_RG_SESSEND;
665 writel(tmp, com + U3P_U2PHYDTM1);
666
667 if (tphy->pdata->avoid_rx_sen_degradation && index) {
668 tmp = readl(com + U3P_U2PHYDTM0);
669 tmp &= ~(P2C_RG_SUSPENDM | P2C_FORCE_SUSPENDM);
670 writel(tmp, com + U3P_U2PHYDTM0);
671
672 tmp = readl(com + U3D_U2PHYDCR0);
673 tmp &= ~P2C_RG_SIF_U2PLL_FORCE_ON;
674 writel(tmp, com + U3D_U2PHYDCR0);
675 }
676
677 dev_dbg(tphy->dev, "%s(%d)\n", __func__, index);
678 }
679
u2_phy_instance_exit(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)680 static void u2_phy_instance_exit(struct mtk_tphy *tphy,
681 struct mtk_phy_instance *instance)
682 {
683 struct u2phy_banks *u2_banks = &instance->u2_banks;
684 void __iomem *com = u2_banks->com;
685 u32 index = instance->index;
686 u32 tmp;
687
688 if (tphy->pdata->avoid_rx_sen_degradation && index) {
689 tmp = readl(com + U3D_U2PHYDCR0);
690 tmp &= ~P2C_RG_SIF_U2PLL_FORCE_ON;
691 writel(tmp, com + U3D_U2PHYDCR0);
692
693 tmp = readl(com + U3P_U2PHYDTM0);
694 tmp &= ~P2C_FORCE_SUSPENDM;
695 writel(tmp, com + U3P_U2PHYDTM0);
696 }
697 }
698
u2_phy_instance_set_mode(struct mtk_tphy * tphy,struct mtk_phy_instance * instance,enum phy_mode mode)699 static void u2_phy_instance_set_mode(struct mtk_tphy *tphy,
700 struct mtk_phy_instance *instance,
701 enum phy_mode mode)
702 {
703 struct u2phy_banks *u2_banks = &instance->u2_banks;
704 u32 tmp;
705
706 tmp = readl(u2_banks->com + U3P_U2PHYDTM1);
707 switch (mode) {
708 case PHY_MODE_USB_DEVICE:
709 tmp |= P2C_FORCE_IDDIG | P2C_RG_IDDIG;
710 break;
711 case PHY_MODE_USB_HOST:
712 tmp |= P2C_FORCE_IDDIG;
713 tmp &= ~P2C_RG_IDDIG;
714 break;
715 case PHY_MODE_USB_OTG:
716 tmp &= ~(P2C_FORCE_IDDIG | P2C_RG_IDDIG);
717 break;
718 default:
719 return;
720 }
721 writel(tmp, u2_banks->com + U3P_U2PHYDTM1);
722 }
723
pcie_phy_instance_init(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)724 static void pcie_phy_instance_init(struct mtk_tphy *tphy,
725 struct mtk_phy_instance *instance)
726 {
727 struct u3phy_banks *u3_banks = &instance->u3_banks;
728 u32 tmp;
729
730 if (tphy->pdata->version != MTK_PHY_V1)
731 return;
732
733 tmp = readl(u3_banks->phya + U3P_U3_PHYA_DA_REG0);
734 tmp &= ~(P3A_RG_XTAL_EXT_PE1H | P3A_RG_XTAL_EXT_PE2H);
735 tmp |= P3A_RG_XTAL_EXT_PE1H_VAL(0x2) | P3A_RG_XTAL_EXT_PE2H_VAL(0x2);
736 writel(tmp, u3_banks->phya + U3P_U3_PHYA_DA_REG0);
737
738 /* ref clk drive */
739 tmp = readl(u3_banks->phya + U3P_U3_PHYA_REG1);
740 tmp &= ~P3A_RG_CLKDRV_AMP;
741 tmp |= P3A_RG_CLKDRV_AMP_VAL(0x4);
742 writel(tmp, u3_banks->phya + U3P_U3_PHYA_REG1);
743
744 tmp = readl(u3_banks->phya + U3P_U3_PHYA_REG0);
745 tmp &= ~P3A_RG_CLKDRV_OFF;
746 tmp |= P3A_RG_CLKDRV_OFF_VAL(0x1);
747 writel(tmp, u3_banks->phya + U3P_U3_PHYA_REG0);
748
749 /* SSC delta -5000ppm */
750 tmp = readl(u3_banks->phya + U3P_U3_PHYA_DA_REG20);
751 tmp &= ~P3A_RG_PLL_DELTA1_PE2H;
752 tmp |= P3A_RG_PLL_DELTA1_PE2H_VAL(0x3c);
753 writel(tmp, u3_banks->phya + U3P_U3_PHYA_DA_REG20);
754
755 tmp = readl(u3_banks->phya + U3P_U3_PHYA_DA_REG25);
756 tmp &= ~P3A_RG_PLL_DELTA_PE2H;
757 tmp |= P3A_RG_PLL_DELTA_PE2H_VAL(0x36);
758 writel(tmp, u3_banks->phya + U3P_U3_PHYA_DA_REG25);
759
760 /* change pll BW 0.6M */
761 tmp = readl(u3_banks->phya + U3P_U3_PHYA_DA_REG5);
762 tmp &= ~(P3A_RG_PLL_BR_PE2H | P3A_RG_PLL_IC_PE2H);
763 tmp |= P3A_RG_PLL_BR_PE2H_VAL(0x1) | P3A_RG_PLL_IC_PE2H_VAL(0x1);
764 writel(tmp, u3_banks->phya + U3P_U3_PHYA_DA_REG5);
765
766 tmp = readl(u3_banks->phya + U3P_U3_PHYA_DA_REG4);
767 tmp &= ~(P3A_RG_PLL_DIVEN_PE2H | P3A_RG_PLL_BC_PE2H);
768 tmp |= P3A_RG_PLL_BC_PE2H_VAL(0x3);
769 writel(tmp, u3_banks->phya + U3P_U3_PHYA_DA_REG4);
770
771 tmp = readl(u3_banks->phya + U3P_U3_PHYA_DA_REG6);
772 tmp &= ~P3A_RG_PLL_IR_PE2H;
773 tmp |= P3A_RG_PLL_IR_PE2H_VAL(0x2);
774 writel(tmp, u3_banks->phya + U3P_U3_PHYA_DA_REG6);
775
776 tmp = readl(u3_banks->phya + U3P_U3_PHYA_DA_REG7);
777 tmp &= ~P3A_RG_PLL_BP_PE2H;
778 tmp |= P3A_RG_PLL_BP_PE2H_VAL(0xa);
779 writel(tmp, u3_banks->phya + U3P_U3_PHYA_DA_REG7);
780
781 /* Tx Detect Rx Timing: 10us -> 5us */
782 tmp = readl(u3_banks->phyd + U3P_U3_PHYD_RXDET1);
783 tmp &= ~P3D_RG_RXDET_STB2_SET;
784 tmp |= P3D_RG_RXDET_STB2_SET_VAL(0x10);
785 writel(tmp, u3_banks->phyd + U3P_U3_PHYD_RXDET1);
786
787 tmp = readl(u3_banks->phyd + U3P_U3_PHYD_RXDET2);
788 tmp &= ~P3D_RG_RXDET_STB2_SET_P3;
789 tmp |= P3D_RG_RXDET_STB2_SET_P3_VAL(0x10);
790 writel(tmp, u3_banks->phyd + U3P_U3_PHYD_RXDET2);
791
792 /* wait for PCIe subsys register to active */
793 usleep_range(2500, 3000);
794 dev_dbg(tphy->dev, "%s(%d)\n", __func__, instance->index);
795 }
796
pcie_phy_instance_power_on(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)797 static void pcie_phy_instance_power_on(struct mtk_tphy *tphy,
798 struct mtk_phy_instance *instance)
799 {
800 struct u3phy_banks *bank = &instance->u3_banks;
801 u32 tmp;
802
803 tmp = readl(bank->chip + U3P_U3_CHIP_GPIO_CTLD);
804 tmp &= ~(P3C_FORCE_IP_SW_RST | P3C_REG_IP_SW_RST);
805 writel(tmp, bank->chip + U3P_U3_CHIP_GPIO_CTLD);
806
807 tmp = readl(bank->chip + U3P_U3_CHIP_GPIO_CTLE);
808 tmp &= ~(P3C_RG_SWRST_U3_PHYD_FORCE_EN | P3C_RG_SWRST_U3_PHYD);
809 writel(tmp, bank->chip + U3P_U3_CHIP_GPIO_CTLE);
810 }
811
pcie_phy_instance_power_off(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)812 static void pcie_phy_instance_power_off(struct mtk_tphy *tphy,
813 struct mtk_phy_instance *instance)
814
815 {
816 struct u3phy_banks *bank = &instance->u3_banks;
817 u32 tmp;
818
819 tmp = readl(bank->chip + U3P_U3_CHIP_GPIO_CTLD);
820 tmp |= P3C_FORCE_IP_SW_RST | P3C_REG_IP_SW_RST;
821 writel(tmp, bank->chip + U3P_U3_CHIP_GPIO_CTLD);
822
823 tmp = readl(bank->chip + U3P_U3_CHIP_GPIO_CTLE);
824 tmp |= P3C_RG_SWRST_U3_PHYD_FORCE_EN | P3C_RG_SWRST_U3_PHYD;
825 writel(tmp, bank->chip + U3P_U3_CHIP_GPIO_CTLE);
826 }
827
sata_phy_instance_init(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)828 static void sata_phy_instance_init(struct mtk_tphy *tphy,
829 struct mtk_phy_instance *instance)
830 {
831 struct u3phy_banks *u3_banks = &instance->u3_banks;
832 void __iomem *phyd = u3_banks->phyd;
833 u32 tmp;
834
835 /* charge current adjustment */
836 tmp = readl(phyd + ANA_RG_CTRL_SIGNAL6);
837 tmp &= ~(RG_CDR_BIRLTR_GEN1_MSK | RG_CDR_BC_GEN1_MSK);
838 tmp |= RG_CDR_BIRLTR_GEN1_VAL(0x6) | RG_CDR_BC_GEN1_VAL(0x1a);
839 writel(tmp, phyd + ANA_RG_CTRL_SIGNAL6);
840
841 tmp = readl(phyd + ANA_EQ_EYE_CTRL_SIGNAL4);
842 tmp &= ~RG_CDR_BIRLTD0_GEN1_MSK;
843 tmp |= RG_CDR_BIRLTD0_GEN1_VAL(0x18);
844 writel(tmp, phyd + ANA_EQ_EYE_CTRL_SIGNAL4);
845
846 tmp = readl(phyd + ANA_EQ_EYE_CTRL_SIGNAL5);
847 tmp &= ~RG_CDR_BIRLTD0_GEN3_MSK;
848 tmp |= RG_CDR_BIRLTD0_GEN3_VAL(0x06);
849 writel(tmp, phyd + ANA_EQ_EYE_CTRL_SIGNAL5);
850
851 tmp = readl(phyd + ANA_RG_CTRL_SIGNAL4);
852 tmp &= ~(RG_CDR_BICLTR_GEN1_MSK | RG_CDR_BR_GEN2_MSK);
853 tmp |= RG_CDR_BICLTR_GEN1_VAL(0x0c) | RG_CDR_BR_GEN2_VAL(0x07);
854 writel(tmp, phyd + ANA_RG_CTRL_SIGNAL4);
855
856 tmp = readl(phyd + PHYD_CTRL_SIGNAL_MODE4);
857 tmp &= ~(RG_CDR_BICLTD0_GEN1_MSK | RG_CDR_BICLTD1_GEN1_MSK);
858 tmp |= RG_CDR_BICLTD0_GEN1_VAL(0x08) | RG_CDR_BICLTD1_GEN1_VAL(0x02);
859 writel(tmp, phyd + PHYD_CTRL_SIGNAL_MODE4);
860
861 tmp = readl(phyd + PHYD_DESIGN_OPTION2);
862 tmp &= ~RG_LOCK_CNT_SEL_MSK;
863 tmp |= RG_LOCK_CNT_SEL_VAL(0x02);
864 writel(tmp, phyd + PHYD_DESIGN_OPTION2);
865
866 tmp = readl(phyd + PHYD_DESIGN_OPTION9);
867 tmp &= ~(RG_T2_MIN_MSK | RG_TG_MIN_MSK |
868 RG_T2_MAX_MSK | RG_TG_MAX_MSK);
869 tmp |= RG_T2_MIN_VAL(0x12) | RG_TG_MIN_VAL(0x04) |
870 RG_T2_MAX_VAL(0x31) | RG_TG_MAX_VAL(0x0e);
871 writel(tmp, phyd + PHYD_DESIGN_OPTION9);
872
873 tmp = readl(phyd + ANA_RG_CTRL_SIGNAL1);
874 tmp &= ~RG_IDRV_0DB_GEN1_MSK;
875 tmp |= RG_IDRV_0DB_GEN1_VAL(0x20);
876 writel(tmp, phyd + ANA_RG_CTRL_SIGNAL1);
877
878 tmp = readl(phyd + ANA_EQ_EYE_CTRL_SIGNAL1);
879 tmp &= ~RG_EQ_DLEQ_LFI_GEN1_MSK;
880 tmp |= RG_EQ_DLEQ_LFI_GEN1_VAL(0x03);
881 writel(tmp, phyd + ANA_EQ_EYE_CTRL_SIGNAL1);
882
883 dev_dbg(tphy->dev, "%s(%d)\n", __func__, instance->index);
884 }
885
phy_v1_banks_init(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)886 static void phy_v1_banks_init(struct mtk_tphy *tphy,
887 struct mtk_phy_instance *instance)
888 {
889 struct u2phy_banks *u2_banks = &instance->u2_banks;
890 struct u3phy_banks *u3_banks = &instance->u3_banks;
891
892 switch (instance->type) {
893 case PHY_TYPE_USB2:
894 u2_banks->misc = NULL;
895 u2_banks->fmreg = tphy->sif_base + SSUSB_SIFSLV_V1_U2FREQ;
896 u2_banks->com = instance->port_base + SSUSB_SIFSLV_V1_U2PHY_COM;
897 break;
898 case PHY_TYPE_USB3:
899 case PHY_TYPE_PCIE:
900 u3_banks->spllc = tphy->sif_base + SSUSB_SIFSLV_V1_SPLLC;
901 u3_banks->chip = tphy->sif_base + SSUSB_SIFSLV_V1_CHIP;
902 u3_banks->phyd = instance->port_base + SSUSB_SIFSLV_V1_U3PHYD;
903 u3_banks->phya = instance->port_base + SSUSB_SIFSLV_V1_U3PHYA;
904 break;
905 case PHY_TYPE_SATA:
906 u3_banks->phyd = instance->port_base + SSUSB_SIFSLV_V1_U3PHYD;
907 break;
908 default:
909 dev_err(tphy->dev, "incompatible PHY type\n");
910 return;
911 }
912 }
913
phy_v2_banks_init(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)914 static void phy_v2_banks_init(struct mtk_tphy *tphy,
915 struct mtk_phy_instance *instance)
916 {
917 struct u2phy_banks *u2_banks = &instance->u2_banks;
918 struct u3phy_banks *u3_banks = &instance->u3_banks;
919
920 switch (instance->type) {
921 case PHY_TYPE_USB2:
922 u2_banks->misc = instance->port_base + SSUSB_SIFSLV_V2_MISC;
923 u2_banks->fmreg = instance->port_base + SSUSB_SIFSLV_V2_U2FREQ;
924 u2_banks->com = instance->port_base + SSUSB_SIFSLV_V2_U2PHY_COM;
925 break;
926 case PHY_TYPE_USB3:
927 case PHY_TYPE_PCIE:
928 u3_banks->spllc = instance->port_base + SSUSB_SIFSLV_V2_SPLLC;
929 u3_banks->chip = instance->port_base + SSUSB_SIFSLV_V2_CHIP;
930 u3_banks->phyd = instance->port_base + SSUSB_SIFSLV_V2_U3PHYD;
931 u3_banks->phya = instance->port_base + SSUSB_SIFSLV_V2_U3PHYA;
932 break;
933 default:
934 dev_err(tphy->dev, "incompatible PHY type\n");
935 return;
936 }
937 }
938
phy_parse_property(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)939 static void phy_parse_property(struct mtk_tphy *tphy,
940 struct mtk_phy_instance *instance)
941 {
942 struct device *dev = &instance->phy->dev;
943
944 if (instance->type != PHY_TYPE_USB2)
945 return;
946
947 instance->bc12_en = device_property_read_bool(dev, "mediatek,bc12");
948 device_property_read_u32(dev, "mediatek,eye-src",
949 &instance->eye_src);
950 device_property_read_u32(dev, "mediatek,eye-vrt",
951 &instance->eye_vrt);
952 device_property_read_u32(dev, "mediatek,eye-term",
953 &instance->eye_term);
954 device_property_read_u32(dev, "mediatek,intr",
955 &instance->intr);
956 device_property_read_u32(dev, "mediatek,discth",
957 &instance->discth);
958 dev_dbg(dev, "bc12:%d, src:%d, vrt:%d, term:%d, intr:%d, disc:%d\n",
959 instance->bc12_en, instance->eye_src,
960 instance->eye_vrt, instance->eye_term,
961 instance->intr, instance->discth);
962 }
963
u2_phy_props_set(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)964 static void u2_phy_props_set(struct mtk_tphy *tphy,
965 struct mtk_phy_instance *instance)
966 {
967 struct u2phy_banks *u2_banks = &instance->u2_banks;
968 void __iomem *com = u2_banks->com;
969 u32 tmp;
970
971 if (instance->bc12_en) {
972 tmp = readl(com + U3P_U2PHYBC12C);
973 tmp |= P2C_RG_CHGDT_EN; /* BC1.2 path Enable */
974 writel(tmp, com + U3P_U2PHYBC12C);
975 }
976
977 if (tphy->pdata->version < MTK_PHY_V3 && instance->eye_src) {
978 tmp = readl(com + U3P_USBPHYACR5);
979 tmp &= ~PA5_RG_U2_HSTX_SRCTRL;
980 tmp |= PA5_RG_U2_HSTX_SRCTRL_VAL(instance->eye_src);
981 writel(tmp, com + U3P_USBPHYACR5);
982 }
983
984 if (instance->eye_vrt) {
985 tmp = readl(com + U3P_USBPHYACR1);
986 tmp &= ~PA1_RG_VRT_SEL;
987 tmp |= PA1_RG_VRT_SEL_VAL(instance->eye_vrt);
988 writel(tmp, com + U3P_USBPHYACR1);
989 }
990
991 if (instance->eye_term) {
992 tmp = readl(com + U3P_USBPHYACR1);
993 tmp &= ~PA1_RG_TERM_SEL;
994 tmp |= PA1_RG_TERM_SEL_VAL(instance->eye_term);
995 writel(tmp, com + U3P_USBPHYACR1);
996 }
997
998 if (instance->intr) {
999 tmp = readl(com + U3P_USBPHYACR1);
1000 tmp &= ~PA1_RG_INTR_CAL;
1001 tmp |= PA1_RG_INTR_CAL_VAL(instance->intr);
1002 writel(tmp, com + U3P_USBPHYACR1);
1003 }
1004
1005 if (instance->discth) {
1006 tmp = readl(com + U3P_USBPHYACR6);
1007 tmp &= ~PA6_RG_U2_DISCTH;
1008 tmp |= PA6_RG_U2_DISCTH_VAL(instance->discth);
1009 writel(tmp, com + U3P_USBPHYACR6);
1010 }
1011 }
1012
1013 /* type switch for usb3/pcie/sgmii/sata */
phy_type_syscon_get(struct mtk_phy_instance * instance,struct device_node * dn)1014 static int phy_type_syscon_get(struct mtk_phy_instance *instance,
1015 struct device_node *dn)
1016 {
1017 struct of_phandle_args args;
1018 int ret;
1019
1020 /* type switch function is optional */
1021 if (!of_property_read_bool(dn, "mediatek,syscon-type"))
1022 return 0;
1023
1024 ret = of_parse_phandle_with_fixed_args(dn, "mediatek,syscon-type",
1025 2, 0, &args);
1026 if (ret)
1027 return ret;
1028
1029 instance->type_sw_reg = args.args[0];
1030 instance->type_sw_index = args.args[1] & 0x3; /* <=3 */
1031 instance->type_sw = syscon_node_to_regmap(args.np);
1032 of_node_put(args.np);
1033 dev_info(&instance->phy->dev, "type_sw - reg %#x, index %d\n",
1034 instance->type_sw_reg, instance->type_sw_index);
1035
1036 return PTR_ERR_OR_ZERO(instance->type_sw);
1037 }
1038
phy_type_set(struct mtk_phy_instance * instance)1039 static int phy_type_set(struct mtk_phy_instance *instance)
1040 {
1041 int type;
1042 u32 offset;
1043
1044 if (!instance->type_sw)
1045 return 0;
1046
1047 switch (instance->type) {
1048 case PHY_TYPE_USB3:
1049 type = RG_PHY_SW_USB3;
1050 break;
1051 case PHY_TYPE_PCIE:
1052 type = RG_PHY_SW_PCIE;
1053 break;
1054 case PHY_TYPE_SGMII:
1055 type = RG_PHY_SW_SGMII;
1056 break;
1057 case PHY_TYPE_SATA:
1058 type = RG_PHY_SW_SATA;
1059 break;
1060 case PHY_TYPE_USB2:
1061 default:
1062 return 0;
1063 }
1064
1065 offset = instance->type_sw_index * BITS_PER_BYTE;
1066 regmap_update_bits(instance->type_sw, instance->type_sw_reg,
1067 RG_PHY_SW_TYPE << offset, type << offset);
1068
1069 return 0;
1070 }
1071
phy_efuse_get(struct mtk_tphy * tphy,struct mtk_phy_instance * instance)1072 static int phy_efuse_get(struct mtk_tphy *tphy, struct mtk_phy_instance *instance)
1073 {
1074 struct device *dev = &instance->phy->dev;
1075 int ret = 0;
1076
1077 /* tphy v1 doesn't support sw efuse, skip it */
1078 if (!tphy->pdata->sw_efuse_supported) {
1079 instance->efuse_sw_en = 0;
1080 return 0;
1081 }
1082
1083 /* software efuse is optional */
1084 instance->efuse_sw_en = device_property_read_bool(dev, "nvmem-cells");
1085 if (!instance->efuse_sw_en)
1086 return 0;
1087
1088 switch (instance->type) {
1089 case PHY_TYPE_USB2:
1090 ret = nvmem_cell_read_variable_le_u32(dev, "intr", &instance->efuse_intr);
1091 if (ret) {
1092 dev_err(dev, "fail to get u2 intr efuse, %d\n", ret);
1093 break;
1094 }
1095
1096 /* no efuse, ignore it */
1097 if (!instance->efuse_intr) {
1098 dev_warn(dev, "no u2 intr efuse, but dts enable it\n");
1099 instance->efuse_sw_en = 0;
1100 break;
1101 }
1102
1103 dev_dbg(dev, "u2 efuse - intr %x\n", instance->efuse_intr);
1104 break;
1105
1106 case PHY_TYPE_USB3:
1107 case PHY_TYPE_PCIE:
1108 ret = nvmem_cell_read_variable_le_u32(dev, "intr", &instance->efuse_intr);
1109 if (ret) {
1110 dev_err(dev, "fail to get u3 intr efuse, %d\n", ret);
1111 break;
1112 }
1113
1114 ret = nvmem_cell_read_variable_le_u32(dev, "rx_imp", &instance->efuse_rx_imp);
1115 if (ret) {
1116 dev_err(dev, "fail to get u3 rx_imp efuse, %d\n", ret);
1117 break;
1118 }
1119
1120 ret = nvmem_cell_read_variable_le_u32(dev, "tx_imp", &instance->efuse_tx_imp);
1121 if (ret) {
1122 dev_err(dev, "fail to get u3 tx_imp efuse, %d\n", ret);
1123 break;
1124 }
1125
1126 /* no efuse, ignore it */
1127 if (!instance->efuse_intr &&
1128 !instance->efuse_rx_imp &&
1129 !instance->efuse_tx_imp) {
1130 dev_warn(dev, "no u3 intr efuse, but dts enable it\n");
1131 instance->efuse_sw_en = 0;
1132 break;
1133 }
1134
1135 dev_dbg(dev, "u3 efuse - intr %x, rx_imp %x, tx_imp %x\n",
1136 instance->efuse_intr, instance->efuse_rx_imp,instance->efuse_tx_imp);
1137 break;
1138 default:
1139 dev_err(dev, "no sw efuse for type %d\n", instance->type);
1140 ret = -EINVAL;
1141 }
1142
1143 return ret;
1144 }
1145
phy_efuse_set(struct mtk_phy_instance * instance)1146 static void phy_efuse_set(struct mtk_phy_instance *instance)
1147 {
1148 struct device *dev = &instance->phy->dev;
1149 struct u2phy_banks *u2_banks = &instance->u2_banks;
1150 struct u3phy_banks *u3_banks = &instance->u3_banks;
1151 u32 tmp;
1152
1153 if (!instance->efuse_sw_en)
1154 return;
1155
1156 switch (instance->type) {
1157 case PHY_TYPE_USB2:
1158 tmp = readl(u2_banks->misc + U3P_MISC_REG1);
1159 tmp |= MR1_EFUSE_AUTO_LOAD_DIS;
1160 writel(tmp, u2_banks->misc + U3P_MISC_REG1);
1161
1162 tmp = readl(u2_banks->com + U3P_USBPHYACR1);
1163 tmp &= ~PA1_RG_INTR_CAL;
1164 tmp |= PA1_RG_INTR_CAL_VAL(instance->efuse_intr);
1165 writel(tmp, u2_banks->com + U3P_USBPHYACR1);
1166 break;
1167 case PHY_TYPE_USB3:
1168 case PHY_TYPE_PCIE:
1169 tmp = readl(u3_banks->phyd + U3P_U3_PHYD_RSV);
1170 tmp |= P3D_RG_EFUSE_AUTO_LOAD_DIS;
1171 writel(tmp, u3_banks->phyd + U3P_U3_PHYD_RSV);
1172
1173 tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL0);
1174 tmp &= ~P3D_RG_TX_IMPEL;
1175 tmp |= P3D_RG_TX_IMPEL_VAL(instance->efuse_tx_imp);
1176 tmp |= P3D_RG_FORCE_TX_IMPEL;
1177 writel(tmp, u3_banks->phyd + U3P_U3_PHYD_IMPCAL0);
1178
1179 tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL1);
1180 tmp &= ~P3D_RG_RX_IMPEL;
1181 tmp |= P3D_RG_RX_IMPEL_VAL(instance->efuse_rx_imp);
1182 tmp |= P3D_RG_FORCE_RX_IMPEL;
1183 writel(tmp, u3_banks->phyd + U3P_U3_PHYD_IMPCAL1);
1184
1185 tmp = readl(u3_banks->phya + U3P_U3_PHYA_REG0);
1186 tmp &= ~P3A_RG_IEXT_INTR;
1187 tmp |= P3A_RG_IEXT_INTR_VAL(instance->efuse_intr);
1188 writel(tmp, u3_banks->phya + U3P_U3_PHYA_REG0);
1189 break;
1190 default:
1191 dev_warn(dev, "no sw efuse for type %d\n", instance->type);
1192 break;
1193 }
1194 }
1195
mtk_phy_init(struct phy * phy)1196 static int mtk_phy_init(struct phy *phy)
1197 {
1198 struct mtk_phy_instance *instance = phy_get_drvdata(phy);
1199 struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
1200 int ret;
1201
1202 ret = clk_bulk_prepare_enable(TPHY_CLKS_CNT, instance->clks);
1203 if (ret)
1204 return ret;
1205
1206 phy_efuse_set(instance);
1207
1208 switch (instance->type) {
1209 case PHY_TYPE_USB2:
1210 u2_phy_instance_init(tphy, instance);
1211 u2_phy_props_set(tphy, instance);
1212 break;
1213 case PHY_TYPE_USB3:
1214 u3_phy_instance_init(tphy, instance);
1215 break;
1216 case PHY_TYPE_PCIE:
1217 pcie_phy_instance_init(tphy, instance);
1218 break;
1219 case PHY_TYPE_SATA:
1220 sata_phy_instance_init(tphy, instance);
1221 break;
1222 case PHY_TYPE_SGMII:
1223 /* nothing to do, only used to set type */
1224 break;
1225 default:
1226 dev_err(tphy->dev, "incompatible PHY type\n");
1227 clk_bulk_disable_unprepare(TPHY_CLKS_CNT, instance->clks);
1228 return -EINVAL;
1229 }
1230
1231 return 0;
1232 }
1233
mtk_phy_power_on(struct phy * phy)1234 static int mtk_phy_power_on(struct phy *phy)
1235 {
1236 struct mtk_phy_instance *instance = phy_get_drvdata(phy);
1237 struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
1238
1239 if (instance->type == PHY_TYPE_USB2) {
1240 u2_phy_instance_power_on(tphy, instance);
1241 hs_slew_rate_calibrate(tphy, instance);
1242 } else if (instance->type == PHY_TYPE_PCIE) {
1243 pcie_phy_instance_power_on(tphy, instance);
1244 }
1245
1246 return 0;
1247 }
1248
mtk_phy_power_off(struct phy * phy)1249 static int mtk_phy_power_off(struct phy *phy)
1250 {
1251 struct mtk_phy_instance *instance = phy_get_drvdata(phy);
1252 struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
1253
1254 if (instance->type == PHY_TYPE_USB2)
1255 u2_phy_instance_power_off(tphy, instance);
1256 else if (instance->type == PHY_TYPE_PCIE)
1257 pcie_phy_instance_power_off(tphy, instance);
1258
1259 return 0;
1260 }
1261
mtk_phy_exit(struct phy * phy)1262 static int mtk_phy_exit(struct phy *phy)
1263 {
1264 struct mtk_phy_instance *instance = phy_get_drvdata(phy);
1265 struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
1266
1267 if (instance->type == PHY_TYPE_USB2)
1268 u2_phy_instance_exit(tphy, instance);
1269
1270 clk_bulk_disable_unprepare(TPHY_CLKS_CNT, instance->clks);
1271 return 0;
1272 }
1273
mtk_phy_set_mode(struct phy * phy,enum phy_mode mode,int submode)1274 static int mtk_phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
1275 {
1276 struct mtk_phy_instance *instance = phy_get_drvdata(phy);
1277 struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent);
1278
1279 if (instance->type == PHY_TYPE_USB2)
1280 u2_phy_instance_set_mode(tphy, instance, mode);
1281
1282 return 0;
1283 }
1284
mtk_phy_xlate(struct device * dev,struct of_phandle_args * args)1285 static struct phy *mtk_phy_xlate(struct device *dev,
1286 struct of_phandle_args *args)
1287 {
1288 struct mtk_tphy *tphy = dev_get_drvdata(dev);
1289 struct mtk_phy_instance *instance = NULL;
1290 struct device_node *phy_np = args->np;
1291 int index;
1292 int ret;
1293
1294 if (args->args_count != 1) {
1295 dev_err(dev, "invalid number of cells in 'phy' property\n");
1296 return ERR_PTR(-EINVAL);
1297 }
1298
1299 for (index = 0; index < tphy->nphys; index++)
1300 if (phy_np == tphy->phys[index]->phy->dev.of_node) {
1301 instance = tphy->phys[index];
1302 break;
1303 }
1304
1305 if (!instance) {
1306 dev_err(dev, "failed to find appropriate phy\n");
1307 return ERR_PTR(-EINVAL);
1308 }
1309
1310 instance->type = args->args[0];
1311 if (!(instance->type == PHY_TYPE_USB2 ||
1312 instance->type == PHY_TYPE_USB3 ||
1313 instance->type == PHY_TYPE_PCIE ||
1314 instance->type == PHY_TYPE_SATA ||
1315 instance->type == PHY_TYPE_SGMII)) {
1316 dev_err(dev, "unsupported device type: %d\n", instance->type);
1317 return ERR_PTR(-EINVAL);
1318 }
1319
1320 switch (tphy->pdata->version) {
1321 case MTK_PHY_V1:
1322 phy_v1_banks_init(tphy, instance);
1323 break;
1324 case MTK_PHY_V2:
1325 case MTK_PHY_V3:
1326 phy_v2_banks_init(tphy, instance);
1327 break;
1328 default:
1329 dev_err(dev, "phy version is not supported\n");
1330 return ERR_PTR(-EINVAL);
1331 }
1332
1333 ret = phy_efuse_get(tphy, instance);
1334 if (ret)
1335 return ERR_PTR(ret);
1336
1337 phy_parse_property(tphy, instance);
1338 phy_type_set(instance);
1339
1340 return instance->phy;
1341 }
1342
1343 static const struct phy_ops mtk_tphy_ops = {
1344 .init = mtk_phy_init,
1345 .exit = mtk_phy_exit,
1346 .power_on = mtk_phy_power_on,
1347 .power_off = mtk_phy_power_off,
1348 .set_mode = mtk_phy_set_mode,
1349 .owner = THIS_MODULE,
1350 };
1351
1352 static const struct mtk_phy_pdata tphy_v1_pdata = {
1353 .avoid_rx_sen_degradation = false,
1354 .version = MTK_PHY_V1,
1355 };
1356
1357 static const struct mtk_phy_pdata tphy_v2_pdata = {
1358 .avoid_rx_sen_degradation = false,
1359 .sw_efuse_supported = true,
1360 .version = MTK_PHY_V2,
1361 };
1362
1363 static const struct mtk_phy_pdata tphy_v3_pdata = {
1364 .sw_efuse_supported = true,
1365 .version = MTK_PHY_V3,
1366 };
1367
1368 static const struct mtk_phy_pdata mt8173_pdata = {
1369 .avoid_rx_sen_degradation = true,
1370 .version = MTK_PHY_V1,
1371 };
1372
1373 static const struct mtk_phy_pdata mt8195_pdata = {
1374 .sw_pll_48m_to_26m = true,
1375 .sw_efuse_supported = true,
1376 .version = MTK_PHY_V3,
1377 };
1378
1379 static const struct of_device_id mtk_tphy_id_table[] = {
1380 { .compatible = "mediatek,mt2701-u3phy", .data = &tphy_v1_pdata },
1381 { .compatible = "mediatek,mt2712-u3phy", .data = &tphy_v2_pdata },
1382 { .compatible = "mediatek,mt8173-u3phy", .data = &mt8173_pdata },
1383 { .compatible = "mediatek,mt8195-tphy", .data = &mt8195_pdata },
1384 { .compatible = "mediatek,generic-tphy-v1", .data = &tphy_v1_pdata },
1385 { .compatible = "mediatek,generic-tphy-v2", .data = &tphy_v2_pdata },
1386 { .compatible = "mediatek,generic-tphy-v3", .data = &tphy_v3_pdata },
1387 { },
1388 };
1389 MODULE_DEVICE_TABLE(of, mtk_tphy_id_table);
1390
mtk_tphy_probe(struct platform_device * pdev)1391 static int mtk_tphy_probe(struct platform_device *pdev)
1392 {
1393 struct device *dev = &pdev->dev;
1394 struct device_node *np = dev->of_node;
1395 struct device_node *child_np;
1396 struct phy_provider *provider;
1397 struct resource *sif_res;
1398 struct mtk_tphy *tphy;
1399 struct resource res;
1400 int port, retval;
1401
1402 tphy = devm_kzalloc(dev, sizeof(*tphy), GFP_KERNEL);
1403 if (!tphy)
1404 return -ENOMEM;
1405
1406 tphy->pdata = of_device_get_match_data(dev);
1407 if (!tphy->pdata)
1408 return -EINVAL;
1409
1410 tphy->nphys = of_get_child_count(np);
1411 tphy->phys = devm_kcalloc(dev, tphy->nphys,
1412 sizeof(*tphy->phys), GFP_KERNEL);
1413 if (!tphy->phys)
1414 return -ENOMEM;
1415
1416 tphy->dev = dev;
1417 platform_set_drvdata(pdev, tphy);
1418
1419 sif_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1420 /* SATA phy of V1 needn't it if not shared with PCIe or USB */
1421 if (sif_res && tphy->pdata->version == MTK_PHY_V1) {
1422 /* get banks shared by multiple phys */
1423 tphy->sif_base = devm_ioremap_resource(dev, sif_res);
1424 if (IS_ERR(tphy->sif_base)) {
1425 dev_err(dev, "failed to remap sif regs\n");
1426 return PTR_ERR(tphy->sif_base);
1427 }
1428 }
1429
1430 if (tphy->pdata->version < MTK_PHY_V3) {
1431 tphy->src_ref_clk = U3P_REF_CLK;
1432 tphy->src_coef = U3P_SLEW_RATE_COEF;
1433 /* update parameters of slew rate calibrate if exist */
1434 device_property_read_u32(dev, "mediatek,src-ref-clk-mhz",
1435 &tphy->src_ref_clk);
1436 device_property_read_u32(dev, "mediatek,src-coef",
1437 &tphy->src_coef);
1438 }
1439
1440 port = 0;
1441 for_each_child_of_node(np, child_np) {
1442 struct mtk_phy_instance *instance;
1443 struct clk_bulk_data *clks;
1444 struct device *subdev;
1445 struct phy *phy;
1446
1447 instance = devm_kzalloc(dev, sizeof(*instance), GFP_KERNEL);
1448 if (!instance) {
1449 retval = -ENOMEM;
1450 goto put_child;
1451 }
1452
1453 tphy->phys[port] = instance;
1454
1455 phy = devm_phy_create(dev, child_np, &mtk_tphy_ops);
1456 if (IS_ERR(phy)) {
1457 dev_err(dev, "failed to create phy\n");
1458 retval = PTR_ERR(phy);
1459 goto put_child;
1460 }
1461
1462 subdev = &phy->dev;
1463 retval = of_address_to_resource(child_np, 0, &res);
1464 if (retval) {
1465 dev_err(subdev, "failed to get address resource(id-%d)\n",
1466 port);
1467 goto put_child;
1468 }
1469
1470 instance->port_base = devm_ioremap_resource(subdev, &res);
1471 if (IS_ERR(instance->port_base)) {
1472 retval = PTR_ERR(instance->port_base);
1473 goto put_child;
1474 }
1475
1476 instance->phy = phy;
1477 instance->index = port;
1478 phy_set_drvdata(phy, instance);
1479 port++;
1480
1481 clks = instance->clks;
1482 clks[0].id = "ref"; /* digital (& analog) clock */
1483 clks[1].id = "da_ref"; /* analog clock */
1484 retval = devm_clk_bulk_get_optional(subdev, TPHY_CLKS_CNT, clks);
1485 if (retval)
1486 goto put_child;
1487
1488 retval = phy_type_syscon_get(instance, child_np);
1489 if (retval)
1490 goto put_child;
1491 }
1492
1493 provider = devm_of_phy_provider_register(dev, mtk_phy_xlate);
1494
1495 return PTR_ERR_OR_ZERO(provider);
1496 put_child:
1497 of_node_put(child_np);
1498 return retval;
1499 }
1500
1501 static struct platform_driver mtk_tphy_driver = {
1502 .probe = mtk_tphy_probe,
1503 .driver = {
1504 .name = "mtk-tphy",
1505 .of_match_table = mtk_tphy_id_table,
1506 },
1507 };
1508
1509 module_platform_driver(mtk_tphy_driver);
1510
1511 MODULE_AUTHOR("Chunfeng Yun <chunfeng.yun@mediatek.com>");
1512 MODULE_DESCRIPTION("MediaTek T-PHY driver");
1513 MODULE_LICENSE("GPL v2");
1514