• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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