1
2
3
4
5
6#include <linux/clk.h>
7#include <linux/clk-provider.h>
8#include <linux/delay.h>
9#include <linux/err.h>
10#include <linux/io.h>
11#include <linux/iopoll.h>
12#include <linux/kernel.h>
13#include <linux/module.h>
14#include <linux/of.h>
15#include <linux/of_device.h>
16#include <linux/of_address.h>
17#include <linux/phy/phy.h>
18#include <linux/platform_device.h>
19#include <linux/regulator/consumer.h>
20#include <linux/reset.h>
21#include <linux/slab.h>
22
23#include <dt-bindings/phy/phy.h>
24
25#include "phy-qcom-qmp.h"
26
27
28#define SW_RESET BIT(0)
29
30#define SW_PWRDN BIT(0)
31#define REFCLK_DRV_DSBL BIT(1)
32
33#define SERDES_START BIT(0)
34#define PCS_START BIT(1)
35#define PLL_READY_GATE_EN BIT(3)
36
37#define PHYSTATUS BIT(6)
38#define PHYSTATUS_4_20 BIT(7)
39
40#define PCS_READY BIT(0)
41
42
43
44#define SW_DPPHY_RESET BIT(0)
45
46#define SW_DPPHY_RESET_MUX BIT(1)
47
48#define SW_USB3PHY_RESET BIT(2)
49
50#define SW_USB3PHY_RESET_MUX BIT(3)
51
52
53#define USB3_MODE BIT(0)
54#define DP_MODE BIT(1)
55
56
57#define ARCVR_DTCT_EN BIT(0)
58#define ALFPS_DTCT_EN BIT(1)
59#define ARCVR_DTCT_EVENT_SEL BIT(4)
60
61
62#define IRQ_CLEAR BIT(0)
63
64
65#define RCVR_DETECT BIT(0)
66
67
68#define CLAMP_EN BIT(0)
69
70#define PHY_INIT_COMPLETE_TIMEOUT 10000
71#define POWER_DOWN_DELAY_US_MIN 10
72#define POWER_DOWN_DELAY_US_MAX 11
73
74#define MAX_PROP_NAME 32
75
76
77#define QMP_PHY_LEGACY_LANE_STRIDE 0x400
78
79struct qmp_phy_init_tbl {
80 unsigned int offset;
81 unsigned int val;
82
83
84
85
86 bool in_layout;
87
88
89
90
91 u8 lane_mask;
92};
93
94#define QMP_PHY_INIT_CFG(o, v) \
95 { \
96 .offset = o, \
97 .val = v, \
98 .lane_mask = 0xff, \
99 }
100
101#define QMP_PHY_INIT_CFG_L(o, v) \
102 { \
103 .offset = o, \
104 .val = v, \
105 .in_layout = true, \
106 .lane_mask = 0xff, \
107 }
108
109#define QMP_PHY_INIT_CFG_LANE(o, v, l) \
110 { \
111 .offset = o, \
112 .val = v, \
113 .lane_mask = l, \
114 }
115
116
117enum qphy_reg_layout {
118
119 QPHY_COM_SW_RESET,
120 QPHY_COM_POWER_DOWN_CONTROL,
121 QPHY_COM_START_CONTROL,
122 QPHY_COM_PCS_READY_STATUS,
123
124 QPHY_PLL_LOCK_CHK_DLY_TIME,
125 QPHY_FLL_CNTRL1,
126 QPHY_FLL_CNTRL2,
127 QPHY_FLL_CNT_VAL_L,
128 QPHY_FLL_CNT_VAL_H_TOL,
129 QPHY_FLL_MAN_CODE,
130 QPHY_SW_RESET,
131 QPHY_START_CTRL,
132 QPHY_PCS_READY_STATUS,
133 QPHY_PCS_STATUS,
134 QPHY_PCS_AUTONOMOUS_MODE_CTRL,
135 QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR,
136 QPHY_PCS_LFPS_RXTERM_IRQ_STATUS,
137 QPHY_PCS_POWER_DOWN_CONTROL,
138
139 QPHY_LAYOUT_SIZE
140};
141
142static const unsigned int msm8996_ufsphy_regs_layout[QPHY_LAYOUT_SIZE] = {
143 [QPHY_START_CTRL] = 0x00,
144 [QPHY_PCS_READY_STATUS] = 0x168,
145};
146
147static const unsigned int ipq_pciephy_gen3_regs_layout[QPHY_LAYOUT_SIZE] = {
148 [QPHY_SW_RESET] = 0x00,
149 [QPHY_START_CTRL] = 0x44,
150 [QPHY_PCS_STATUS] = 0x14,
151 [QPHY_PCS_POWER_DOWN_CONTROL] = 0x40,
152};
153
154static const unsigned int pciephy_regs_layout[QPHY_LAYOUT_SIZE] = {
155 [QPHY_COM_SW_RESET] = 0x400,
156 [QPHY_COM_POWER_DOWN_CONTROL] = 0x404,
157 [QPHY_COM_START_CONTROL] = 0x408,
158 [QPHY_COM_PCS_READY_STATUS] = 0x448,
159 [QPHY_PLL_LOCK_CHK_DLY_TIME] = 0xa8,
160 [QPHY_FLL_CNTRL1] = 0xc4,
161 [QPHY_FLL_CNTRL2] = 0xc8,
162 [QPHY_FLL_CNT_VAL_L] = 0xcc,
163 [QPHY_FLL_CNT_VAL_H_TOL] = 0xd0,
164 [QPHY_FLL_MAN_CODE] = 0xd4,
165 [QPHY_SW_RESET] = 0x00,
166 [QPHY_START_CTRL] = 0x08,
167 [QPHY_PCS_STATUS] = 0x174,
168};
169
170static const unsigned int usb3phy_regs_layout[QPHY_LAYOUT_SIZE] = {
171 [QPHY_FLL_CNTRL1] = 0xc0,
172 [QPHY_FLL_CNTRL2] = 0xc4,
173 [QPHY_FLL_CNT_VAL_L] = 0xc8,
174 [QPHY_FLL_CNT_VAL_H_TOL] = 0xcc,
175 [QPHY_FLL_MAN_CODE] = 0xd0,
176 [QPHY_SW_RESET] = 0x00,
177 [QPHY_START_CTRL] = 0x08,
178 [QPHY_PCS_STATUS] = 0x17c,
179 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = 0x0d4,
180 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = 0x0d8,
181 [QPHY_PCS_LFPS_RXTERM_IRQ_STATUS] = 0x178,
182};
183
184static const unsigned int qmp_v3_usb3phy_regs_layout[QPHY_LAYOUT_SIZE] = {
185 [QPHY_SW_RESET] = 0x00,
186 [QPHY_START_CTRL] = 0x08,
187 [QPHY_PCS_STATUS] = 0x174,
188 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = 0x0d8,
189 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = 0x0dc,
190 [QPHY_PCS_LFPS_RXTERM_IRQ_STATUS] = 0x170,
191};
192
193static const unsigned int sdm845_qmp_pciephy_regs_layout[QPHY_LAYOUT_SIZE] = {
194 [QPHY_SW_RESET] = 0x00,
195 [QPHY_START_CTRL] = 0x08,
196 [QPHY_PCS_STATUS] = 0x174,
197};
198
199static const unsigned int sdm845_qhp_pciephy_regs_layout[QPHY_LAYOUT_SIZE] = {
200 [QPHY_SW_RESET] = 0x00,
201 [QPHY_START_CTRL] = 0x08,
202 [QPHY_PCS_STATUS] = 0x2ac,
203};
204
205static const unsigned int qmp_v4_usb3phy_regs_layout[QPHY_LAYOUT_SIZE] = {
206 [QPHY_SW_RESET] = 0x00,
207 [QPHY_START_CTRL] = 0x44,
208 [QPHY_PCS_STATUS] = 0x14,
209 [QPHY_PCS_POWER_DOWN_CONTROL] = 0x40,
210 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = 0x308,
211 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = 0x314,
212};
213
214static const unsigned int qmp_v4_usb3_uniphy_regs_layout[QPHY_LAYOUT_SIZE] = {
215 [QPHY_SW_RESET] = 0x00,
216 [QPHY_START_CTRL] = 0x44,
217 [QPHY_PCS_STATUS] = 0x14,
218 [QPHY_PCS_POWER_DOWN_CONTROL] = 0x40,
219 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = 0x608,
220 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = 0x614,
221};
222
223static const unsigned int sm8350_usb3_uniphy_regs_layout[QPHY_LAYOUT_SIZE] = {
224 [QPHY_SW_RESET] = 0x00,
225 [QPHY_START_CTRL] = 0x44,
226 [QPHY_PCS_STATUS] = 0x14,
227 [QPHY_PCS_POWER_DOWN_CONTROL] = 0x40,
228 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = 0x1008,
229 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = 0x1014,
230};
231
232static const unsigned int sdm845_ufsphy_regs_layout[QPHY_LAYOUT_SIZE] = {
233 [QPHY_START_CTRL] = 0x00,
234 [QPHY_PCS_READY_STATUS] = 0x160,
235};
236
237static const unsigned int sm6115_ufsphy_regs_layout[QPHY_LAYOUT_SIZE] = {
238 [QPHY_START_CTRL] = 0x00,
239 [QPHY_PCS_READY_STATUS] = 0x168,
240};
241
242static const unsigned int sm8250_pcie_regs_layout[QPHY_LAYOUT_SIZE] = {
243 [QPHY_SW_RESET] = 0x00,
244 [QPHY_START_CTRL] = 0x44,
245 [QPHY_PCS_STATUS] = 0x14,
246 [QPHY_PCS_POWER_DOWN_CONTROL] = 0x40,
247};
248
249static const unsigned int sm8150_ufsphy_regs_layout[QPHY_LAYOUT_SIZE] = {
250 [QPHY_START_CTRL] = QPHY_V4_PCS_UFS_PHY_START,
251 [QPHY_PCS_READY_STATUS] = QPHY_V4_PCS_UFS_READY_STATUS,
252 [QPHY_SW_RESET] = QPHY_V4_PCS_UFS_SW_RESET,
253};
254
255static const struct qmp_phy_init_tbl ipq8074_usb3_serdes_tbl[] = {
256 QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_EN_SEL, 0x1a),
257 QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x08),
258 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_SELECT, 0x30),
259 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TRIM, 0x0f),
260 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_FASTLOCK_FO_GAIN, 0x0b),
261 QMP_PHY_INIT_CFG(QSERDES_COM_SVS_MODE_CLK_SEL, 0x01),
262 QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x00),
263 QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x06),
264 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_IVCO, 0x0f),
265 QMP_PHY_INIT_CFG(QSERDES_COM_SYS_CLK_CTRL, 0x06),
266
267 QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE0, 0x82),
268 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE0, 0x55),
269 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE0, 0x55),
270 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE0, 0x03),
271 QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE0, 0x0b),
272 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE0, 0x16),
273 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE0, 0x28),
274 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80),
275 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE0, 0x15),
276 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE0, 0x34),
277 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE0, 0x00),
278 QMP_PHY_INIT_CFG(QSERDES_COM_CORE_CLK_EN, 0x00),
279 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_CFG, 0x00),
280 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x00),
281 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TIMER, 0x0a),
282
283 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_EN_CENTER, 0x01),
284 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER1, 0x31),
285 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x01),
286 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER1, 0x00),
287 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER2, 0x00),
288 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE1, 0xde),
289 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE2, 0x07),
290};
291
292static const struct qmp_phy_init_tbl ipq8074_usb3_rx_tbl[] = {
293 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x06),
294 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x02),
295 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4c),
296 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xb8),
297 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x77),
298 QMP_PHY_INIT_CFG(QSERDES_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
299 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_CNTRL, 0x03),
300 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x16),
301 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_ENABLES, 0x0),
302};
303
304static const struct qmp_phy_init_tbl ipq8074_usb3_pcs_tbl[] = {
305 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V0, 0x15),
306 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V0, 0x0e),
307 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL2, 0x83),
308 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL1, 0x02),
309 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_L, 0x09),
310 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_H_TOL, 0xa2),
311 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_MAN_CODE, 0x85),
312 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG1, 0xd1),
313 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG2, 0x1f),
314 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG3, 0x47),
315 QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_STATE_CONFIG2, 0x1b),
316 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_WAIT_TIME, 0x75),
317 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_RUN_TIME, 0x13),
318 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LFPS_TX_ECSTART_EQTLOCK, 0x86),
319 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x04),
320 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TSYNC_RSYNC_TIME, 0x44),
321 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_P1U2_L, 0xe7),
322 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
323 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_U3_L, 0x40),
324 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_U3_H, 0x00),
325 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0x88),
326 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V0, 0x17),
327 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V0, 0x0f),
328};
329
330static const struct qmp_phy_init_tbl msm8996_pcie_serdes_tbl[] = {
331 QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x1c),
332 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_ENABLE1, 0x10),
333 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_SELECT, 0x33),
334 QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x06),
335 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_EN, 0x42),
336 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x00),
337 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER1, 0xff),
338 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER2, 0x1f),
339 QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x01),
340 QMP_PHY_INIT_CFG(QSERDES_COM_SVS_MODE_CLK_SEL, 0x01),
341 QMP_PHY_INIT_CFG(QSERDES_COM_CORE_CLK_EN, 0x00),
342 QMP_PHY_INIT_CFG(QSERDES_COM_CORECLK_DIV, 0x0a),
343 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TIMER, 0x09),
344 QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE0, 0x82),
345 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE0, 0x03),
346 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE0, 0x55),
347 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE0, 0x55),
348 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE0, 0x00),
349 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE0, 0x1a),
350 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE0, 0x0a),
351 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_SELECT, 0x33),
352 QMP_PHY_INIT_CFG(QSERDES_COM_SYS_CLK_CTRL, 0x02),
353 QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_BUF_ENABLE, 0x1f),
354 QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_EN_SEL, 0x04),
355 QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE0, 0x0b),
356 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE0, 0x16),
357 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE0, 0x28),
358 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
359 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80),
360 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_EN_CENTER, 0x01),
361 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER1, 0x31),
362 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x01),
363 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER1, 0x02),
364 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER2, 0x00),
365 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE1, 0x2f),
366 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE2, 0x19),
367 QMP_PHY_INIT_CFG(QSERDES_COM_RESCODE_DIV_NUM, 0x15),
368 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TRIM, 0x0f),
369 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_IVCO, 0x0f),
370 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_EP_DIV, 0x19),
371 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_ENABLE1, 0x10),
372 QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x00),
373 QMP_PHY_INIT_CFG(QSERDES_COM_RESCODE_DIV_NUM, 0x40),
374};
375
376static const struct qmp_phy_init_tbl msm8996_pcie_tx_tbl[] = {
377 QMP_PHY_INIT_CFG(QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN, 0x45),
378 QMP_PHY_INIT_CFG(QSERDES_TX_LANE_MODE, 0x06),
379};
380
381static const struct qmp_phy_init_tbl msm8996_pcie_rx_tbl[] = {
382 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_ENABLES, 0x1c),
383 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x01),
384 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3, 0x00),
385 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xdb),
386 QMP_PHY_INIT_CFG(QSERDES_RX_RX_BAND, 0x18),
387 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x04),
388 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN_HALF, 0x04),
389 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
390 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
391 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_LVL, 0x19),
392};
393
394static const struct qmp_phy_init_tbl msm8996_pcie_pcs_tbl[] = {
395 QMP_PHY_INIT_CFG(QPHY_RX_IDLE_DTCT_CNTRL, 0x4c),
396 QMP_PHY_INIT_CFG(QPHY_PWRUP_RESET_DLY_TIME_AUXCLK, 0x00),
397 QMP_PHY_INIT_CFG(QPHY_LP_WAKEUP_DLY_TIME_AUXCLK, 0x01),
398
399 QMP_PHY_INIT_CFG_L(QPHY_PLL_LOCK_CHK_DLY_TIME, 0x05),
400
401 QMP_PHY_INIT_CFG(QPHY_ENDPOINT_REFCLK_DRIVE, 0x05),
402 QMP_PHY_INIT_CFG(QPHY_POWER_DOWN_CONTROL, 0x02),
403 QMP_PHY_INIT_CFG(QPHY_POWER_STATE_CONFIG4, 0x00),
404 QMP_PHY_INIT_CFG(QPHY_POWER_STATE_CONFIG1, 0xa3),
405 QMP_PHY_INIT_CFG(QPHY_TXDEEMPH_M3P5DB_V0, 0x0e),
406};
407
408static const struct qmp_phy_init_tbl msm8998_pcie_serdes_tbl[] = {
409 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
410 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
411 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x0f),
412 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
413 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01),
414 QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20),
415 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
416 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
417 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9),
418 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER1, 0xff),
419 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER2, 0x3f),
420 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
421 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
422 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
423 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_EP_DIV, 0x19),
424 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_ENABLE1, 0x90),
425 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
426 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x03),
427 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0x55),
428 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0x55),
429 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
430 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0d),
431 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x04),
432 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00),
433 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x08),
434 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
435 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x34),
436 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
437 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x33),
438 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
439 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x07),
440 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x04),
441 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
442 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
443 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x09),
444 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01),
445 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x40),
446 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01),
447 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x02),
448 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00),
449 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x7e),
450 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x15),
451};
452
453static const struct qmp_phy_init_tbl msm8998_pcie_tx_tbl[] = {
454 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x02),
455 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12),
456 QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10),
457 QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06),
458};
459
460static const struct qmp_phy_init_tbl msm8998_pcie_rx_tbl[] = {
461 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03),
462 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_ENABLES, 0x1c),
463 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
464 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0a),
465 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
466 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1a),
467 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
468 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN, 0x04),
469 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN_HALF, 0x04),
470 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x00),
471 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
472 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40),
473 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x71),
474 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x40),
475};
476
477static const struct qmp_phy_init_tbl msm8998_pcie_pcs_tbl[] = {
478 QMP_PHY_INIT_CFG(QPHY_V3_PCS_ENDPOINT_REFCLK_DRIVE, 0x04),
479 QMP_PHY_INIT_CFG(QPHY_V3_PCS_OSC_DTCT_ACTIONS, 0x00),
480 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x01),
481 QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
482 QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x20),
483 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
484 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x01),
485 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73),
486 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0x99),
487 QMP_PHY_INIT_CFG(QPHY_V3_PCS_SIGDET_CNTRL, 0x03),
488};
489
490static const struct qmp_phy_init_tbl msm8996_ufs_serdes_tbl[] = {
491 QMP_PHY_INIT_CFG(QPHY_POWER_DOWN_CONTROL, 0x01),
492 QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x0e),
493 QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_EN_SEL, 0xd7),
494 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_SELECT, 0x30),
495 QMP_PHY_INIT_CFG(QSERDES_COM_SYS_CLK_CTRL, 0x06),
496 QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x08),
497 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TIMER, 0x0a),
498 QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x05),
499 QMP_PHY_INIT_CFG(QSERDES_COM_CORECLK_DIV, 0x0a),
500 QMP_PHY_INIT_CFG(QSERDES_COM_CORECLK_DIV_MODE1, 0x0a),
501 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_EN, 0x01),
502 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_CTRL, 0x10),
503 QMP_PHY_INIT_CFG(QSERDES_COM_RESETSM_CNTRL, 0x20),
504 QMP_PHY_INIT_CFG(QSERDES_COM_CORE_CLK_EN, 0x00),
505 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_CFG, 0x00),
506 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER1, 0xff),
507 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER2, 0x3f),
508 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x54),
509 QMP_PHY_INIT_CFG(QSERDES_COM_SVS_MODE_CLK_SEL, 0x05),
510 QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE0, 0x82),
511 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE0, 0x00),
512 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE0, 0x00),
513 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE0, 0x00),
514 QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE0, 0x0b),
515 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE0, 0x16),
516 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE0, 0x28),
517 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80),
518 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
519 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE1_MODE0, 0x28),
520 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE2_MODE0, 0x02),
521 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE0, 0xff),
522 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE0, 0x0c),
523 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE0, 0x00),
524 QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE1, 0x98),
525 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE1, 0x00),
526 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE1, 0x00),
527 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE1, 0x00),
528 QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE1, 0x0b),
529 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE1, 0x16),
530 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE1, 0x28),
531 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE1, 0x80),
532 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE1, 0x00),
533 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE1_MODE1, 0xd6),
534 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE2_MODE1, 0x00),
535 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE1, 0x32),
536 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE1, 0x0f),
537 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE1, 0x00),
538};
539
540static const struct qmp_phy_init_tbl msm8996_ufs_tx_tbl[] = {
541 QMP_PHY_INIT_CFG(QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN, 0x45),
542 QMP_PHY_INIT_CFG(QSERDES_TX_LANE_MODE, 0x02),
543};
544
545static const struct qmp_phy_init_tbl msm8996_ufs_rx_tbl[] = {
546 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_LVL, 0x24),
547 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_CNTRL, 0x02),
548 QMP_PHY_INIT_CFG(QSERDES_RX_RX_INTERFACE_MODE, 0x00),
549 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x18),
550 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_FASTLOCK_FO_GAIN, 0x0B),
551 QMP_PHY_INIT_CFG(QSERDES_RX_RX_TERM_BW, 0x5b),
552 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_GAIN1_LSB, 0xff),
553 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_GAIN1_MSB, 0x3f),
554 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_GAIN2_LSB, 0xff),
555 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_GAIN2_MSB, 0x0f),
556 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0E),
557};
558
559static const struct qmp_phy_init_tbl msm8996_usb3_serdes_tbl[] = {
560 QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_EN_SEL, 0x14),
561 QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x08),
562 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_SELECT, 0x30),
563 QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x06),
564 QMP_PHY_INIT_CFG(QSERDES_COM_SVS_MODE_CLK_SEL, 0x01),
565 QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x00),
566 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TRIM, 0x0f),
567 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_IVCO, 0x0f),
568 QMP_PHY_INIT_CFG(QSERDES_COM_SYS_CLK_CTRL, 0x04),
569
570 QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE0, 0x82),
571 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE0, 0x55),
572 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE0, 0x55),
573 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE0, 0x03),
574 QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE0, 0x0b),
575 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE0, 0x16),
576 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE0, 0x28),
577 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80),
578 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_CTRL, 0x00),
579 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE0, 0x15),
580 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE0, 0x34),
581 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE0, 0x00),
582 QMP_PHY_INIT_CFG(QSERDES_COM_CORE_CLK_EN, 0x00),
583 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_CFG, 0x00),
584 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x00),
585 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TIMER, 0x0a),
586
587 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_EN_CENTER, 0x01),
588 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER1, 0x31),
589 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x01),
590 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER1, 0x00),
591 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER2, 0x00),
592 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE1, 0xde),
593 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE2, 0x07),
594};
595
596static const struct qmp_phy_init_tbl msm8996_usb3_tx_tbl[] = {
597 QMP_PHY_INIT_CFG(QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN, 0x45),
598 QMP_PHY_INIT_CFG(QSERDES_TX_RCV_DETECT_LVL_2, 0x12),
599 QMP_PHY_INIT_CFG(QSERDES_TX_LANE_MODE, 0x06),
600};
601
602static const struct qmp_phy_init_tbl msm8996_usb3_rx_tbl[] = {
603 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_FASTLOCK_FO_GAIN, 0x0b),
604 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x04),
605 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x02),
606 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4c),
607 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xbb),
608 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x77),
609 QMP_PHY_INIT_CFG(QSERDES_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
610 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_CNTRL, 0x03),
611 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_LVL, 0x18),
612 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x16),
613};
614
615static const struct qmp_phy_init_tbl msm8996_usb3_pcs_tbl[] = {
616
617 QMP_PHY_INIT_CFG_L(QPHY_FLL_CNTRL2, 0x03),
618 QMP_PHY_INIT_CFG_L(QPHY_FLL_CNTRL1, 0x02),
619 QMP_PHY_INIT_CFG_L(QPHY_FLL_CNT_VAL_L, 0x09),
620 QMP_PHY_INIT_CFG_L(QPHY_FLL_CNT_VAL_H_TOL, 0x42),
621 QMP_PHY_INIT_CFG_L(QPHY_FLL_MAN_CODE, 0x85),
622
623
624 QMP_PHY_INIT_CFG(QPHY_LOCK_DETECT_CONFIG1, 0xd1),
625 QMP_PHY_INIT_CFG(QPHY_LOCK_DETECT_CONFIG2, 0x1f),
626 QMP_PHY_INIT_CFG(QPHY_LOCK_DETECT_CONFIG3, 0x47),
627 QMP_PHY_INIT_CFG(QPHY_POWER_STATE_CONFIG2, 0x08),
628};
629
630static const struct qmp_phy_init_tbl ipq6018_pcie_serdes_tbl[] = {
631 QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_PER1, 0x7d),
632 QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_PER2, 0x01),
633 QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE1_MODE0, 0x0a),
634 QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE2_MODE0, 0x05),
635 QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE1_MODE1, 0x08),
636 QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE2_MODE1, 0x04),
637 QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CLKBUFLR_EN, 0x18),
638 QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_ENABLE1, 0x90),
639 QMP_PHY_INIT_CFG(QSERDES_PLL_SYS_CLK_CTRL, 0x02),
640 QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_BUF_ENABLE, 0x07),
641 QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_IVCO, 0x0f),
642 QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE0, 0xd4),
643 QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE0, 0x14),
644 QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE1, 0xaa),
645 QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE1, 0x29),
646 QMP_PHY_INIT_CFG(QSERDES_PLL_BG_TRIM, 0x0f),
647 QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE0, 0x09),
648 QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE1, 0x09),
649 QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE0, 0x16),
650 QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE1, 0x16),
651 QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE0, 0x28),
652 QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE1, 0x28),
653 QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CTRL_BY_PSM, 0x01),
654 QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_EN_SEL, 0x08),
655 QMP_PHY_INIT_CFG(QSERDES_PLL_RESETSM_CNTRL, 0x20),
656 QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP_EN, 0x42),
657 QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE0, 0x68),
658 QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE1, 0x53),
659 QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE0, 0xab),
660 QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE0, 0xaa),
661 QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE0, 0x02),
662 QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE1, 0x55),
663 QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE1, 0x55),
664 QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE1, 0x05),
665 QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE0, 0xa0),
666 QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE1, 0xa0),
667 QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE0, 0x24),
668 QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE0, 0x02),
669 QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE1, 0xb4),
670 QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE1, 0x03),
671 QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_SELECT, 0x32),
672 QMP_PHY_INIT_CFG(QSERDES_PLL_HSCLK_SEL, 0x01),
673 QMP_PHY_INIT_CFG(QSERDES_PLL_CORE_CLK_EN, 0x00),
674 QMP_PHY_INIT_CFG(QSERDES_PLL_CMN_CONFIG, 0x06),
675 QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x05),
676 QMP_PHY_INIT_CFG(QSERDES_PLL_CORECLK_DIV_MODE1, 0x08),
677};
678
679static const struct qmp_phy_init_tbl ipq6018_pcie_tx_tbl[] = {
680 QMP_PHY_INIT_CFG(QSERDES_TX0_RES_CODE_LANE_OFFSET_TX, 0x02),
681 QMP_PHY_INIT_CFG(QSERDES_TX0_LANE_MODE_1, 0x06),
682 QMP_PHY_INIT_CFG(QSERDES_TX0_RCV_DETECT_LVL_2, 0x12),
683};
684
685static const struct qmp_phy_init_tbl ipq6018_pcie_rx_tbl[] = {
686 QMP_PHY_INIT_CFG(QSERDES_RX0_UCDR_FO_GAIN, 0x0c),
687 QMP_PHY_INIT_CFG(QSERDES_RX0_UCDR_SO_GAIN, 0x02),
688 QMP_PHY_INIT_CFG(QSERDES_RX0_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
689 QMP_PHY_INIT_CFG(QSERDES_RX0_UCDR_PI_CONTROLS, 0x70),
690 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL2, 0x61),
691 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL3, 0x04),
692 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL4, 0x1e),
693 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_IDAC_TSETTLE_LOW, 0xc0),
694 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_IDAC_TSETTLE_HIGH, 0x00),
695 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x73),
696 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
697 QMP_PHY_INIT_CFG(QSERDES_RX0_SIGDET_ENABLES, 0x1c),
698 QMP_PHY_INIT_CFG(QSERDES_RX0_SIGDET_CNTRL, 0x03),
699 QMP_PHY_INIT_CFG(QSERDES_RX0_SIGDET_DEGLITCH_CNTRL, 0x14),
700 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_00_LOW, 0xf0),
701 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_00_HIGH, 0x01),
702 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_00_HIGH2, 0x2f),
703 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_00_HIGH3, 0xd3),
704 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_00_HIGH4, 0x40),
705 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_01_LOW, 0x01),
706 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_01_HIGH, 0x02),
707 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_01_HIGH2, 0xc8),
708 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_01_HIGH3, 0x09),
709 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_01_HIGH4, 0xb1),
710 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_10_LOW, 0x00),
711 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_10_HIGH, 0x02),
712 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_10_HIGH2, 0xc8),
713 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_10_HIGH3, 0x09),
714 QMP_PHY_INIT_CFG(QSERDES_RX0_RX_MODE_10_HIGH4, 0xb1),
715 QMP_PHY_INIT_CFG(QSERDES_RX0_DFE_EN_TIMER, 0x04),
716};
717
718static const struct qmp_phy_init_tbl ipq6018_pcie_pcs_tbl[] = {
719 QMP_PHY_INIT_CFG(PCS_COM_FLL_CNTRL1, 0x01),
720 QMP_PHY_INIT_CFG(PCS_COM_REFGEN_REQ_CONFIG1, 0x0d),
721 QMP_PHY_INIT_CFG(PCS_COM_G12S1_TXDEEMPH_M3P5DB, 0x10),
722 QMP_PHY_INIT_CFG(PCS_COM_RX_SIGDET_LVL, 0xaa),
723 QMP_PHY_INIT_CFG(PCS_COM_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
724 QMP_PHY_INIT_CFG(PCS_COM_RX_DCC_CAL_CONFIG, 0x01),
725 QMP_PHY_INIT_CFG(PCS_COM_EQ_CONFIG5, 0x01),
726 QMP_PHY_INIT_CFG(PCS_PCIE_POWER_STATE_CONFIG2, 0x0d),
727 QMP_PHY_INIT_CFG(PCS_PCIE_POWER_STATE_CONFIG4, 0x07),
728 QMP_PHY_INIT_CFG(PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
729 QMP_PHY_INIT_CFG(PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
730 QMP_PHY_INIT_CFG(PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
731 QMP_PHY_INIT_CFG(PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
732 QMP_PHY_INIT_CFG(PCS_PCIE_EQ_CONFIG1, 0x11),
733 QMP_PHY_INIT_CFG(PCS_PCIE_PRESET_P10_PRE, 0x00),
734 QMP_PHY_INIT_CFG(PCS_PCIE_PRESET_P10_POST, 0x58),
735};
736
737static const struct qmp_phy_init_tbl ipq8074_pcie_serdes_tbl[] = {
738 QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x18),
739 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_ENABLE1, 0x10),
740 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TRIM, 0xf),
741 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_EN, 0x1),
742 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x0),
743 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER1, 0xff),
744 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER2, 0x1f),
745 QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x6),
746 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_IVCO, 0xf),
747 QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x0),
748 QMP_PHY_INIT_CFG(QSERDES_COM_SVS_MODE_CLK_SEL, 0x1),
749 QMP_PHY_INIT_CFG(QSERDES_COM_CORE_CLK_EN, 0x20),
750 QMP_PHY_INIT_CFG(QSERDES_COM_CORECLK_DIV, 0xa),
751 QMP_PHY_INIT_CFG(QSERDES_COM_RESETSM_CNTRL, 0x20),
752 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TIMER, 0xa),
753 QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_EN_SEL, 0xa),
754 QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE0, 0x82),
755 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE0, 0x3),
756 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE0, 0x55),
757 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE0, 0x55),
758 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE0, 0x0),
759 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE0, 0xD),
760 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE0, 0xD04),
761 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_SELECT, 0x33),
762 QMP_PHY_INIT_CFG(QSERDES_COM_SYS_CLK_CTRL, 0x2),
763 QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_BUF_ENABLE, 0x1f),
764 QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE0, 0xb),
765 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE0, 0x16),
766 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE0, 0x28),
767 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x0),
768 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80),
769 QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CTRL_BY_PSM, 0x1),
770 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_EN_CENTER, 0x1),
771 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER1, 0x31),
772 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x1),
773 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER1, 0x2),
774 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER2, 0x0),
775 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE1, 0x2f),
776 QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE2, 0x19),
777 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_EP_DIV, 0x19),
778};
779
780static const struct qmp_phy_init_tbl ipq8074_pcie_tx_tbl[] = {
781 QMP_PHY_INIT_CFG(QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN, 0x45),
782 QMP_PHY_INIT_CFG(QSERDES_TX_LANE_MODE, 0x6),
783 QMP_PHY_INIT_CFG(QSERDES_TX_RES_CODE_LANE_OFFSET, 0x2),
784 QMP_PHY_INIT_CFG(QSERDES_TX_RCV_DETECT_LVL_2, 0x12),
785 QMP_PHY_INIT_CFG(QSERDES_TX_EMP_POST1_LVL, 0x36),
786 QMP_PHY_INIT_CFG(QSERDES_TX_SLEW_CNTL, 0x0a),
787};
788
789static const struct qmp_phy_init_tbl ipq8074_pcie_rx_tbl[] = {
790 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_ENABLES, 0x1c),
791 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
792 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x1),
793 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3, 0x0),
794 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xdb),
795 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
796 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x4),
797};
798
799static const struct qmp_phy_init_tbl ipq8074_pcie_pcs_tbl[] = {
800 QMP_PHY_INIT_CFG(QPHY_ENDPOINT_REFCLK_DRIVE, 0x4),
801 QMP_PHY_INIT_CFG(QPHY_OSC_DTCT_ACTIONS, 0x0),
802 QMP_PHY_INIT_CFG(QPHY_PWRUP_RESET_DLY_TIME_AUXCLK, 0x40),
803 QMP_PHY_INIT_CFG(QPHY_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x0),
804 QMP_PHY_INIT_CFG(QPHY_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x40),
805 QMP_PHY_INIT_CFG(QPHY_PLL_LOCK_CHK_DLY_TIME_AUXCLK_LSB, 0x0),
806 QMP_PHY_INIT_CFG(QPHY_LP_WAKEUP_DLY_TIME_AUXCLK, 0x40),
807 QMP_PHY_INIT_CFG_L(QPHY_PLL_LOCK_CHK_DLY_TIME, 0x73),
808 QMP_PHY_INIT_CFG(QPHY_RX_SIGDET_LVL, 0x99),
809 QMP_PHY_INIT_CFG(QPHY_TXDEEMPH_M6DB_V0, 0x15),
810 QMP_PHY_INIT_CFG(QPHY_TXDEEMPH_M3P5DB_V0, 0xe),
811 QMP_PHY_INIT_CFG_L(QPHY_SW_RESET, 0x0),
812 QMP_PHY_INIT_CFG_L(QPHY_START_CTRL, 0x3),
813};
814
815static const struct qmp_phy_init_tbl sdm845_qmp_pcie_serdes_tbl[] = {
816 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
817 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
818 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x007),
819 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
820 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01),
821 QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20),
822 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
823 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
824 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9),
825 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER1, 0xff),
826 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER2, 0x3f),
827 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
828 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
829 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
830 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_EP_DIV, 0x19),
831 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_ENABLE1, 0x90),
832 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
833 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x02),
834 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0xea),
835 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0xab),
836 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
837 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0d),
838 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x04),
839 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00),
840 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06),
841 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
842 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36),
843 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_MODE, 0x01),
844 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x33),
845 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
846 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x06),
847 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x04),
848 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
849 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
850 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x09),
851 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01),
852 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x40),
853 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01),
854 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x02),
855 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00),
856 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x7e),
857 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x15),
858};
859
860static const struct qmp_phy_init_tbl sdm845_qmp_pcie_tx_tbl[] = {
861 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x02),
862 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12),
863 QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10),
864 QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06),
865};
866
867static const struct qmp_phy_init_tbl sdm845_qmp_pcie_rx_tbl[] = {
868 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03),
869 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_ENABLES, 0x10),
870 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
871 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0e),
872 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
873 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1a),
874 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
875 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN, 0x04),
876 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN_HALF, 0x04),
877 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x71),
878 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_00, 0x59),
879 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_01, 0x59),
880 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
881 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40),
882 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x71),
883 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x40),
884};
885
886static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_tbl[] = {
887 QMP_PHY_INIT_CFG(QPHY_V3_PCS_ENDPOINT_REFCLK_DRIVE, 0x04),
888
889 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL2, 0x83),
890 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_L, 0x09),
891 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_H_TOL, 0xa2),
892 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_MAN_CODE, 0x40),
893 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL1, 0x02),
894
895 QMP_PHY_INIT_CFG(QPHY_V3_PCS_OSC_DTCT_ACTIONS, 0x00),
896 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x01),
897 QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
898 QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x20),
899 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
900 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x01),
901 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73),
902
903 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0xbb),
904 QMP_PHY_INIT_CFG(QPHY_V3_PCS_SIGDET_CNTRL, 0x03),
905 QMP_PHY_INIT_CFG(QPHY_V3_PCS_REFGEN_REQ_CONFIG1, 0x0d),
906
907 QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_STATE_CONFIG4, 0x00),
908};
909
910static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_misc_tbl[] = {
911 QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_CONFIG2, 0x52),
912 QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG2, 0x10),
913 QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG4, 0x1a),
914 QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG5, 0x06),
915 QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
916};
917
918static const struct qmp_phy_init_tbl sdm845_qhp_pcie_serdes_tbl[] = {
919 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SYSCLK_EN_SEL, 0x27),
920 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_EN_CENTER, 0x01),
921 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_PER1, 0x31),
922 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_PER2, 0x01),
923 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE1, 0xde),
924 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE2, 0x07),
925 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE1_MODE1, 0x4c),
926 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE2_MODE1, 0x06),
927 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_BIAS_EN_CKBUFLR_EN, 0x18),
928 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CLK_ENABLE1, 0xb0),
929 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP1_MODE0, 0x8c),
930 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP2_MODE0, 0x20),
931 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP1_MODE1, 0x14),
932 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP2_MODE1, 0x34),
933 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CP_CTRL_MODE0, 0x06),
934 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CP_CTRL_MODE1, 0x06),
935 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_RCTRL_MODE0, 0x16),
936 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_RCTRL_MODE1, 0x16),
937 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_CCTRL_MODE0, 0x36),
938 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_CCTRL_MODE1, 0x36),
939 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_RESTRIM_CTRL2, 0x05),
940 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP_EN, 0x42),
941 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DEC_START_MODE0, 0x82),
942 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DEC_START_MODE1, 0x68),
943 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START1_MODE0, 0x55),
944 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START2_MODE0, 0x55),
945 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START3_MODE0, 0x03),
946 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START1_MODE1, 0xab),
947 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START2_MODE1, 0xaa),
948 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START3_MODE1, 0x02),
949 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
950 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_INTEGLOOP_GAIN0_MODE1, 0x3f),
951 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_VCO_TUNE_MAP, 0x10),
952 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CLK_SELECT, 0x04),
953 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_HSCLK_SEL1, 0x30),
954 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CORECLK_DIV, 0x04),
955 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CORE_CLK_EN, 0x73),
956 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CMN_CONFIG, 0x0c),
957 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SVS_MODE_CLK_SEL, 0x15),
958 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CORECLK_DIV_MODE1, 0x04),
959 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CMN_MODE, 0x01),
960 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_VREGCLK_DIV1, 0x22),
961 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_VREGCLK_DIV2, 0x00),
962 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_BGV_TRIM, 0x20),
963 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_BG_CTRL, 0x07),
964};
965
966static const struct qmp_phy_init_tbl sdm845_qhp_pcie_tx_tbl[] = {
967 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_CTRL0, 0x00),
968 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_TAP_EN, 0x0d),
969 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_TX_BAND_MODE, 0x01),
970 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_LANE_MODE, 0x1a),
971 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PARALLEL_RATE, 0x2f),
972 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CML_CTRL_MODE0, 0x09),
973 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CML_CTRL_MODE1, 0x09),
974 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CML_CTRL_MODE2, 0x1b),
975 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PREAMP_CTRL_MODE1, 0x01),
976 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PREAMP_CTRL_MODE2, 0x07),
977 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_MIXER_CTRL_MODE0, 0x31),
978 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_MIXER_CTRL_MODE1, 0x31),
979 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_MIXER_CTRL_MODE2, 0x03),
980 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CTLE_THRESH_DFE, 0x02),
981 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CGA_THRESH_DFE, 0x00),
982 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXENGINE_EN0, 0x12),
983 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CTLE_TRAIN_TIME, 0x25),
984 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CTLE_DFE_OVRLP_TIME, 0x00),
985 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DFE_REFRESH_TIME, 0x05),
986 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DFE_ENABLE_TIME, 0x01),
987 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_VGA_GAIN, 0x26),
988 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DFE_GAIN, 0x12),
989 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_EQ_GAIN, 0x04),
990 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_OFFSET_GAIN, 0x04),
991 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PRE_GAIN, 0x09),
992 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_EQ_INTVAL, 0x15),
993 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_EDAC_INITVAL, 0x28),
994 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXEQ_INITB0, 0x7f),
995 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXEQ_INITB1, 0x07),
996 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RCVRDONE_THRESH1, 0x04),
997 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXEQ_CTRL, 0x70),
998 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_FO_GAIN_MODE0, 0x8b),
999 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_FO_GAIN_MODE1, 0x08),
1000 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_FO_GAIN_MODE2, 0x0a),
1001 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_GAIN_MODE0, 0x03),
1002 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_GAIN_MODE1, 0x04),
1003 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_GAIN_MODE2, 0x04),
1004 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_CONFIG, 0x0c),
1005 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_BAND, 0x02),
1006 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RCVR_PATH1_MODE0, 0x5c),
1007 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RCVR_PATH1_MODE1, 0x3e),
1008 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RCVR_PATH1_MODE2, 0x3f),
1009 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_SIGDET_ENABLES, 0x01),
1010 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_SIGDET_CNTRL, 0xa0),
1011 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_SIGDET_DEGLITCH_CNTRL, 0x08),
1012 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DCC_GAIN, 0x01),
1013 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_EN_SIGNAL, 0xc3),
1014 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PSM_RX_EN_CAL, 0x00),
1015 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_MISC_CNTRL0, 0xbc),
1016 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_TS0_TIMER, 0x7f),
1017 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DLL_HIGHDATARATE, 0x15),
1018 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_CTRL1, 0x0c),
1019 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_CTRL2, 0x0f),
1020 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RESETCODE_OFFSET, 0x04),
1021 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_VGA_INITVAL, 0x20),
1022 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RSM_START, 0x01),
1023};
1024
1025static const struct qmp_phy_init_tbl sdm845_qhp_pcie_rx_tbl[] = {
1026};
1027
1028static const struct qmp_phy_init_tbl sdm845_qhp_pcie_pcs_tbl[] = {
1029 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_POWER_STATE_CONFIG, 0x3f),
1030 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_PCS_TX_RX_CONFIG, 0x50),
1031 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_MAIN_V0_M3P5DB, 0x19),
1032 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_POST_V0_M3P5DB, 0x07),
1033 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_MAIN_V0_M6DB, 0x17),
1034 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_POST_V0_M6DB, 0x09),
1035 QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_POWER_STATE_CONFIG5, 0x9f),
1036};
1037
1038static const struct qmp_phy_init_tbl qmp_v3_usb3_serdes_tbl[] = {
1039 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x07),
1040 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x14),
1041 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x08),
1042 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
1043 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
1044 QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL2, 0x08),
1045 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x16),
1046 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
1047 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x80),
1048 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
1049 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0xab),
1050 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0xea),
1051 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x02),
1052 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06),
1053 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
1054 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36),
1055 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
1056 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
1057 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
1058 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9),
1059 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
1060 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
1061 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x34),
1062 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x15),
1063 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x04),
1064 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
1065 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_CFG, 0x00),
1066 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
1067 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x0a),
1068 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01),
1069 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x31),
1070 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01),
1071 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x00),
1072 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00),
1073 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x85),
1074 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x07),
1075};
1076
1077static const struct qmp_phy_init_tbl qmp_v3_usb3_tx_tbl[] = {
1078 QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10),
1079 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12),
1080 QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x16),
1081 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_RX, 0x09),
1082 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x06),
1083};
1084
1085static const struct qmp_phy_init_tbl qmp_v3_dp_serdes_tbl[] = {
1086 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
1087 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x37),
1088 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
1089 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_ENABLE1, 0x0e),
1090 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x06),
1091 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
1092 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x02),
1093 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0x00),
1094 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
1095 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
1096 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
1097 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
1098 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x0a),
1099 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
1100 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_CTRL, 0x00),
1101 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x3f),
1102 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x1f),
1103 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x07),
1104 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36),
1105 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
1106 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06),
1107};
1108
1109static const struct qmp_phy_init_tbl qmp_v3_dp_serdes_tbl_rbr[] = {
1110 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x0c),
1111 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x69),
1112 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0x80),
1113 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x07),
1114 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x6f),
1115 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x08),
1116 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x00),
1117};
1118
1119static const struct qmp_phy_init_tbl qmp_v3_dp_serdes_tbl_hbr[] = {
1120 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x04),
1121 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x69),
1122 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0x80),
1123 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x07),
1124 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x0f),
1125 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0e),
1126 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x00),
1127};
1128
1129static const struct qmp_phy_init_tbl qmp_v3_dp_serdes_tbl_hbr2[] = {
1130 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00),
1131 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x8c),
1132 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0x00),
1133 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x0a),
1134 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x1f),
1135 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x1c),
1136 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x00),
1137};
1138
1139static const struct qmp_phy_init_tbl qmp_v3_dp_serdes_tbl_hbr3[] = {
1140 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x03),
1141 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x69),
1142 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0x80),
1143 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x07),
1144 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x2f),
1145 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x2a),
1146 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x08),
1147};
1148
1149static const struct qmp_phy_init_tbl qmp_v3_dp_tx_tbl[] = {
1150 QMP_PHY_INIT_CFG(QSERDES_V3_TX_TRANSCEIVER_BIAS_EN, 0x1a),
1151 QMP_PHY_INIT_CFG(QSERDES_V3_TX_VMODE_CTRL1, 0x40),
1152 QMP_PHY_INIT_CFG(QSERDES_V3_TX_PRE_STALL_LDO_BOOST_EN, 0x30),
1153 QMP_PHY_INIT_CFG(QSERDES_V3_TX_INTERFACE_SELECT, 0x3d),
1154 QMP_PHY_INIT_CFG(QSERDES_V3_TX_CLKBUF_ENABLE, 0x0f),
1155 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RESET_TSYNC_EN, 0x03),
1156 QMP_PHY_INIT_CFG(QSERDES_V3_TX_TRAN_DRVR_EMP_EN, 0x03),
1157 QMP_PHY_INIT_CFG(QSERDES_V3_TX_PARRATE_REC_DETECT_IDLE_EN, 0x00),
1158 QMP_PHY_INIT_CFG(QSERDES_V3_TX_TX_INTERFACE_MODE, 0x00),
1159 QMP_PHY_INIT_CFG(QSERDES_V3_TX_TX_BAND, 0x4),
1160 QMP_PHY_INIT_CFG(QSERDES_V3_TX_TX_POL_INV, 0x0a),
1161 QMP_PHY_INIT_CFG(QSERDES_V3_TX_TX_DRV_LVL, 0x38),
1162 QMP_PHY_INIT_CFG(QSERDES_V3_TX_TX_EMP_POST1_LVL, 0x20),
1163 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x06),
1164 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_RX, 0x07),
1165};
1166
1167static const struct qmp_phy_init_tbl qmp_v3_usb3_rx_tbl[] = {
1168 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_FO_GAIN, 0x0b),
1169 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
1170 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4e),
1171 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x18),
1172 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x77),
1173 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
1174 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03),
1175 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x16),
1176 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x75),
1177};
1178
1179static const struct qmp_phy_init_tbl qmp_v3_usb3_pcs_tbl[] = {
1180
1181 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL2, 0x83),
1182 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_L, 0x09),
1183 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_H_TOL, 0xa2),
1184 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_MAN_CODE, 0x40),
1185 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL1, 0x02),
1186
1187
1188 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG1, 0xd1),
1189 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG2, 0x1f),
1190 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG3, 0x47),
1191 QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_STATE_CONFIG2, 0x1b),
1192
1193 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0xba),
1194 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V0, 0x9f),
1195 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V1, 0x9f),
1196 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V2, 0xb7),
1197 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V3, 0x4e),
1198 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V4, 0x65),
1199 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_LS, 0x6b),
1200 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V0, 0x15),
1201 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V0, 0x0d),
1202 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V1, 0x15),
1203 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V1, 0x0d),
1204 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V2, 0x15),
1205 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V2, 0x0d),
1206 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V3, 0x15),
1207 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V3, 0x1d),
1208 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V4, 0x15),
1209 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V4, 0x0d),
1210 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_LS, 0x15),
1211 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_LS, 0x0d),
1212
1213 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RATE_SLEW_CNTRL, 0x02),
1214 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x04),
1215 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TSYNC_RSYNC_TIME, 0x44),
1216 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x04),
1217 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_P1U2_L, 0xe7),
1218 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
1219 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_U3_L, 0x40),
1220 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_U3_H, 0x00),
1221 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_WAIT_TIME, 0x75),
1222 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LFPS_TX_ECSTART_EQTLOCK, 0x86),
1223 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_RUN_TIME, 0x13),
1224};
1225
1226static const struct qmp_phy_init_tbl qmp_v3_usb3_uniphy_serdes_tbl[] = {
1227 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x07),
1228 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x14),
1229 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x04),
1230 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
1231 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
1232 QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL2, 0x08),
1233 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
1234 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
1235 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x80),
1236 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
1237 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0xab),
1238 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0xea),
1239 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x02),
1240 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06),
1241 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
1242 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36),
1243 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
1244 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
1245 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
1246 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9),
1247 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
1248 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
1249 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x34),
1250 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x15),
1251 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x04),
1252 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
1253 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_CFG, 0x00),
1254 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
1255 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x0a),
1256 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01),
1257 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x31),
1258 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01),
1259 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x00),
1260 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00),
1261 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x85),
1262 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x07),
1263};
1264
1265static const struct qmp_phy_init_tbl qmp_v3_usb3_uniphy_tx_tbl[] = {
1266 QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10),
1267 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12),
1268 QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0xc6),
1269 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_RX, 0x06),
1270 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x06),
1271};
1272
1273static const struct qmp_phy_init_tbl qmp_v3_usb3_uniphy_rx_tbl[] = {
1274 QMP_PHY_INIT_CFG(QSERDES_V3_RX_VGA_CAL_CNTRL2, 0x0c),
1275 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_00, 0x50),
1276 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_FO_GAIN, 0x0b),
1277 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0e),
1278 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4e),
1279 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x18),
1280 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x77),
1281 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
1282 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03),
1283 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x1c),
1284 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x75),
1285};
1286
1287static const struct qmp_phy_init_tbl qmp_v3_usb3_uniphy_pcs_tbl[] = {
1288
1289 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL2, 0x83),
1290 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_L, 0x09),
1291 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_H_TOL, 0xa2),
1292 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_MAN_CODE, 0x40),
1293 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL1, 0x02),
1294
1295
1296 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG1, 0xd1),
1297 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG2, 0x1f),
1298 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG3, 0x47),
1299 QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_STATE_CONFIG2, 0x1b),
1300
1301 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0xba),
1302 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V0, 0x9f),
1303 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V1, 0x9f),
1304 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V2, 0xb5),
1305 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V3, 0x4c),
1306 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V4, 0x64),
1307 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_LS, 0x6a),
1308 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V0, 0x15),
1309 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V0, 0x0d),
1310 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V1, 0x15),
1311 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V1, 0x0d),
1312 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V2, 0x15),
1313 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V2, 0x0d),
1314 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V3, 0x15),
1315 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V3, 0x1d),
1316 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V4, 0x15),
1317 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V4, 0x0d),
1318 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_LS, 0x15),
1319 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_LS, 0x0d),
1320
1321 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RATE_SLEW_CNTRL, 0x02),
1322 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x04),
1323 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TSYNC_RSYNC_TIME, 0x44),
1324 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x04),
1325 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_P1U2_L, 0xe7),
1326 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
1327 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_U3_L, 0x40),
1328 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_U3_H, 0x00),
1329 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_WAIT_TIME, 0x75),
1330 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LFPS_TX_ECSTART_EQTLOCK, 0x86),
1331 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_RUN_TIME, 0x13),
1332
1333 QMP_PHY_INIT_CFG(QPHY_V3_PCS_REFGEN_REQ_CONFIG1, 0x21),
1334 QMP_PHY_INIT_CFG(QPHY_V3_PCS_REFGEN_REQ_CONFIG2, 0x60),
1335};
1336
1337static const struct qmp_phy_init_tbl sm6115_ufsphy_serdes_tbl[] = {
1338 QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x0e),
1339 QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_EN_SEL, 0x14),
1340 QMP_PHY_INIT_CFG(QSERDES_COM_CLK_SELECT, 0x30),
1341 QMP_PHY_INIT_CFG(QSERDES_COM_SYS_CLK_CTRL, 0x02),
1342 QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x08),
1343 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TIMER, 0x0a),
1344 QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x00),
1345 QMP_PHY_INIT_CFG(QSERDES_COM_CORECLK_DIV, 0x0a),
1346 QMP_PHY_INIT_CFG(QSERDES_COM_CORECLK_DIV_MODE1, 0x0a),
1347 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_EN, 0x01),
1348 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_CTRL, 0x00),
1349 QMP_PHY_INIT_CFG(QSERDES_COM_RESETSM_CNTRL, 0x20),
1350 QMP_PHY_INIT_CFG(QSERDES_COM_CORE_CLK_EN, 0x00),
1351 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_CFG, 0x00),
1352 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER1, 0xff),
1353 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER2, 0x3f),
1354 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x04),
1355 QMP_PHY_INIT_CFG(QSERDES_COM_SVS_MODE_CLK_SEL, 0x05),
1356 QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE0, 0x82),
1357 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE0, 0x00),
1358 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE0, 0x00),
1359 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE0, 0x00),
1360 QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE0, 0x0b),
1361 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE0, 0x16),
1362 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE0, 0x28),
1363 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80),
1364 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
1365 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE1_MODE0, 0x28),
1366 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE2_MODE0, 0x02),
1367 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE0, 0xff),
1368 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE0, 0x0c),
1369 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE0, 0x00),
1370 QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE1, 0x98),
1371 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE1, 0x00),
1372 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE1, 0x00),
1373 QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE1, 0x00),
1374 QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE1, 0x0b),
1375 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE1, 0x16),
1376 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE1, 0x28),
1377 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE1, 0x80),
1378 QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE1, 0x00),
1379 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE1_MODE1, 0xd6),
1380 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE2_MODE1, 0x00),
1381 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE1, 0x32),
1382 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE1, 0x0f),
1383 QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE1, 0x00),
1384 QMP_PHY_INIT_CFG(QSERDES_COM_PLL_IVCO, 0x0f),
1385 QMP_PHY_INIT_CFG(QSERDES_COM_BG_TRIM, 0x0f),
1386 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_INITVAL1, 0xff),
1387 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_INITVAL2, 0x00),
1388
1389
1390 QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x44),
1391};
1392
1393static const struct qmp_phy_init_tbl sm6115_ufsphy_tx_tbl[] = {
1394 QMP_PHY_INIT_CFG(QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN, 0x45),
1395 QMP_PHY_INIT_CFG(QSERDES_TX_LANE_MODE, 0x06),
1396};
1397
1398static const struct qmp_phy_init_tbl sm6115_ufsphy_rx_tbl[] = {
1399 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_LVL, 0x24),
1400 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_CNTRL, 0x0F),
1401 QMP_PHY_INIT_CFG(QSERDES_RX_RX_INTERFACE_MODE, 0x40),
1402 QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x1E),
1403 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_FASTLOCK_FO_GAIN, 0x0B),
1404 QMP_PHY_INIT_CFG(QSERDES_RX_RX_TERM_BW, 0x5B),
1405 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_GAIN1_LSB, 0xFF),
1406 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_GAIN1_MSB, 0x3F),
1407 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_GAIN2_LSB, 0xFF),
1408 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQ_GAIN2_MSB, 0x3F),
1409 QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0D),
1410 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SVS_SO_GAIN_HALF, 0x04),
1411 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SVS_SO_GAIN_QUARTER, 0x04),
1412 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SVS_SO_GAIN, 0x04),
1413 QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x5B),
1414};
1415
1416static const struct qmp_phy_init_tbl sm6115_ufsphy_pcs_tbl[] = {
1417 QMP_PHY_INIT_CFG(QPHY_RX_PWM_GEAR_BAND, 0x15),
1418 QMP_PHY_INIT_CFG(QPHY_RX_SIGDET_CTRL2, 0x6d),
1419 QMP_PHY_INIT_CFG(QPHY_TX_LARGE_AMP_DRV_LVL, 0x0f),
1420 QMP_PHY_INIT_CFG(QPHY_TX_SMALL_AMP_DRV_LVL, 0x02),
1421 QMP_PHY_INIT_CFG(QPHY_RX_MIN_STALL_NOCONFIG_TIME_CAP, 0x28),
1422 QMP_PHY_INIT_CFG(QPHY_RX_SYM_RESYNC_CTRL, 0x03),
1423 QMP_PHY_INIT_CFG(QPHY_TX_LARGE_AMP_POST_EMP_LVL, 0x12),
1424 QMP_PHY_INIT_CFG(QPHY_TX_SMALL_AMP_POST_EMP_LVL, 0x0f),
1425 QMP_PHY_INIT_CFG(QPHY_RX_MIN_HIBERN8_TIME, 0x9a),
1426};
1427
1428static const struct qmp_phy_init_tbl sdm845_ufsphy_serdes_tbl[] = {
1429 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
1430 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x04),
1431 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x0a),
1432 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x07),
1433 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
1434 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0xd5),
1435 QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20),
1436 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
1437 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00),
1438 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01),
1439 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_CTRL, 0x00),
1440 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
1441 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x04),
1442 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x05),
1443 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_INITVAL1, 0xff),
1444 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_INITVAL2, 0x00),
1445 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
1446 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06),
1447 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
1448 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36),
1449 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
1450 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
1451 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xda),
1452 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
1453 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0xff),
1454 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0c),
1455 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE1, 0x98),
1456 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE1, 0x06),
1457 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE1, 0x16),
1458 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE1, 0x36),
1459 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE1, 0x3f),
1460 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE1, 0x00),
1461 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE1, 0xc1),
1462 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE1, 0x00),
1463 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE1, 0x32),
1464 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE1, 0x0f),
1465
1466
1467 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x44),
1468};
1469
1470static const struct qmp_phy_init_tbl sdm845_ufsphy_tx_tbl[] = {
1471 QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06),
1472 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x04),
1473 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_RX, 0x07),
1474};
1475
1476static const struct qmp_phy_init_tbl sdm845_ufsphy_rx_tbl[] = {
1477 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_LVL, 0x24),
1478 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x0f),
1479 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x1e),
1480 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40),
1481 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_FO_GAIN, 0x0b),
1482 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_TERM_BW, 0x5b),
1483 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x06),
1484 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
1485 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1b),
1486 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SVS_SO_GAIN_HALF, 0x04),
1487 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SVS_SO_GAIN_QUARTER, 0x04),
1488 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SVS_SO_GAIN, 0x04),
1489 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
1490 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x81),
1491 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x80),
1492 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_00, 0x59),
1493};
1494
1495static const struct qmp_phy_init_tbl sdm845_ufsphy_pcs_tbl[] = {
1496 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_CTRL2, 0x6e),
1497 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TX_LARGE_AMP_DRV_LVL, 0x0a),
1498 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TX_SMALL_AMP_DRV_LVL, 0x02),
1499 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SYM_RESYNC_CTRL, 0x03),
1500 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TX_MID_TERM_CTRL1, 0x43),
1501 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_CTRL1, 0x0f),
1502 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_MIN_HIBERN8_TIME, 0x9a),
1503 QMP_PHY_INIT_CFG(QPHY_V3_PCS_MULTI_LANE_CTRL1, 0x02),
1504};
1505
1506static const struct qmp_phy_init_tbl msm8998_usb3_serdes_tbl[] = {
1507 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
1508 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x04),
1509 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x14),
1510 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x06),
1511 QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL2, 0x08),
1512 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
1513 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
1514 QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x80),
1515 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
1516 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0xab),
1517 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0xea),
1518 QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x02),
1519 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06),
1520 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
1521 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36),
1522 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
1523 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
1524 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
1525 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9),
1526 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
1527 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
1528 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x34),
1529 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x15),
1530 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x04),
1531 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
1532 QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_CFG, 0x00),
1533 QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
1534 QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x0a),
1535 QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x07),
1536 QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_INITVAL, 0x80),
1537 QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_MODE, 0x01),
1538 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01),
1539 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x31),
1540 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01),
1541 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x00),
1542 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00),
1543 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x85),
1544 QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x07),
1545};
1546
1547static const struct qmp_phy_init_tbl msm8998_usb3_tx_tbl[] = {
1548 QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10),
1549 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12),
1550 QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x16),
1551 QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x00),
1552};
1553
1554static const struct qmp_phy_init_tbl msm8998_usb3_rx_tbl[] = {
1555 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_FO_GAIN, 0x0b),
1556 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
1557 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4e),
1558 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x18),
1559 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x07),
1560 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
1561 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x43),
1562 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x1c),
1563 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x75),
1564 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x00),
1565 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x00),
1566 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x80),
1567 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FO_GAIN, 0x0a),
1568 QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN, 0x06),
1569 QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_ENABLES, 0x00),
1570 QMP_PHY_INIT_CFG(QSERDES_V3_RX_VGA_CAL_CNTRL2, 0x03),
1571 QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_00, 0x05),
1572};
1573
1574static const struct qmp_phy_init_tbl msm8998_usb3_pcs_tbl[] = {
1575 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL2, 0x83),
1576 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_L, 0x09),
1577 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_H_TOL, 0xa2),
1578 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_MAN_CODE, 0x40),
1579 QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL1, 0x02),
1580 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG1, 0xd1),
1581 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG2, 0x1f),
1582 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LOCK_DETECT_CONFIG3, 0x47),
1583 QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_STATE_CONFIG2, 0x1b),
1584 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V0, 0x9f),
1585 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V1, 0x9f),
1586 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V2, 0xb7),
1587 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V3, 0x4e),
1588 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_V4, 0x65),
1589 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXMGN_LS, 0x6b),
1590 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V0, 0x15),
1591 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V0, 0x0d),
1592 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TX_LARGE_AMP_DRV_LVL, 0x15),
1593 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V1, 0x0d),
1594 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V2, 0x15),
1595 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V2, 0x0d),
1596 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V3, 0x15),
1597 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V3, 0x0d),
1598 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_V4, 0x15),
1599 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_V4, 0x0d),
1600 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M6DB_LS, 0x15),
1601 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TXDEEMPH_M3P5DB_LS, 0x0d),
1602 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RATE_SLEW_CNTRL, 0x02),
1603 QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x04),
1604 QMP_PHY_INIT_CFG(QPHY_V3_PCS_TSYNC_RSYNC_TIME, 0x44),
1605 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_P1U2_L, 0xe7),
1606 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
1607 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_U3_L, 0x40),
1608 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RCVR_DTCT_DLY_U3_H, 0x00),
1609 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0x8a),
1610 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_WAIT_TIME, 0x75),
1611 QMP_PHY_INIT_CFG(QPHY_V3_PCS_LFPS_TX_ECSTART_EQTLOCK, 0x86),
1612 QMP_PHY_INIT_CFG(QPHY_V3_PCS_RXEQTRAINING_RUN_TIME, 0x13),
1613};
1614
1615static const struct qmp_phy_init_tbl sm8150_ufsphy_serdes_tbl[] = {
1616 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0xd9),
1617 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x11),
1618 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_HS_SWITCH_SEL, 0x00),
1619 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x01),
1620 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02),
1621 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f),
1622 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_INITVAL2, 0x00),
1623 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
1624 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x82),
1625 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06),
1626 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16),
1627 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36),
1628 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0xff),
1629 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x0c),
1630 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xac),
1631 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
1632 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x98),
1633 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06),
1634 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16),
1635 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36),
1636 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x32),
1637 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x0f),
1638 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xdd),
1639 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x23),
1640
1641
1642 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x06),
1643};
1644
1645static const struct qmp_phy_init_tbl sm8150_ufsphy_tx_tbl[] = {
1646 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PWM_GEAR_1_DIVIDER_BAND0_1, 0x06),
1647 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PWM_GEAR_2_DIVIDER_BAND0_1, 0x03),
1648 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PWM_GEAR_3_DIVIDER_BAND0_1, 0x01),
1649 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PWM_GEAR_4_DIVIDER_BAND0_1, 0x00),
1650 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x05),
1651 QMP_PHY_INIT_CFG(QSERDES_V4_TX_TRAN_DRVR_EMP_EN, 0x0c),
1652};
1653
1654static const struct qmp_phy_init_tbl sm8150_ufsphy_rx_tbl[] = {
1655 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_LVL, 0x24),
1656 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x0f),
1657 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x1e),
1658 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_BAND, 0x18),
1659 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN, 0x0a),
1660 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
1661 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0xf1),
1662 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW, 0x80),
1663 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CTRL2, 0x80),
1664 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c),
1665 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x04),
1666 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_TERM_BW, 0x1b),
1667 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x06),
1668 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
1669 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1d),
1670 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x00),
1671 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_MEASURE_TIME, 0x10),
1672 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
1673 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
1674 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x36),
1675 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x36),
1676 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xf6),
1677 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x3b),
1678 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x3d),
1679 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0xe0),
1680 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xc8),
1681 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xc8),
1682 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x3b),
1683 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb1),
1684 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0xe0),
1685 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0xc8),
1686 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xc8),
1687 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x3b),
1688 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0xb1),
1689
1690};
1691
1692static const struct qmp_phy_init_tbl sm8150_ufsphy_pcs_tbl[] = {
1693 QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_RX_SIGDET_CTRL2, 0x6d),
1694 QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TX_LARGE_AMP_DRV_LVL, 0x0a),
1695 QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TX_SMALL_AMP_DRV_LVL, 0x02),
1696 QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_TX_MID_TERM_CTRL1, 0x43),
1697 QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_DEBUG_BUS_CLKSEL, 0x1f),
1698 QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_RX_MIN_HIBERN8_TIME, 0xff),
1699 QMP_PHY_INIT_CFG(QPHY_V4_PCS_UFS_MULTI_LANE_CTRL1, 0x02),
1700};
1701
1702static const struct qmp_phy_init_tbl sm8150_usb3_serdes_tbl[] = {
1703 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01),
1704 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31),
1705 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01),
1706 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xde),
1707 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x07),
1708 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0xde),
1709 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x07),
1710 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_BUF_ENABLE, 0x0a),
1711 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_IPTRIM, 0x20),
1712 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06),
1713 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06),
1714 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16),
1715 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16),
1716 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36),
1717 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36),
1718 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x1a),
1719 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x04),
1720 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x14),
1721 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x34),
1722 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x34),
1723 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x82),
1724 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x82),
1725 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x82),
1726 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE0, 0xab),
1727 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0xea),
1728 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x02),
1729 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02),
1730 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0xab),
1731 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0xea),
1732 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x02),
1733 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE0, 0x24),
1734 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE1, 0x24),
1735 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE2_MODE1, 0x02),
1736 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x01),
1737 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x08),
1738 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca),
1739 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
1740 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xca),
1741 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x1e),
1742 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
1743};
1744
1745static const struct qmp_phy_init_tbl sm8150_usb3_tx_tbl[] = {
1746 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_TX, 0x00),
1747 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_RX, 0x00),
1748 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0xd5),
1749 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
1750 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PI_QEC_CTRL, 0x20),
1751};
1752
1753static const struct qmp_phy_init_tbl sm8150_usb3_rx_tbl[] = {
1754 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x05),
1755 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f),
1756 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
1757 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff),
1758 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f),
1759 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x99),
1760 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH1, 0x04),
1761 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH2, 0x08),
1762 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN1, 0x05),
1763 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN2, 0x05),
1764 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x54),
1765 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x0e),
1766 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
1767 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a),
1768 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0a),
1769 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
1770 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
1771 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x77),
1772 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x04),
1773 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x0e),
1774 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0xbf),
1775 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0xbf),
1776 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0x3f),
1777 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x7f),
1778 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x94),
1779 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0xdc),
1780 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xdc),
1781 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0x5c),
1782 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x0b),
1783 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb3),
1784 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
1785 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
1786 QMP_PHY_INIT_CFG(QSERDES_V4_RX_AUX_DATA_TCOARSE_TFINE, 0xa0),
1787 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c),
1788 QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x1f),
1789 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VTH_CODE, 0x10),
1790};
1791
1792static const struct qmp_phy_init_tbl sm8150_usb3_pcs_tbl[] = {
1793
1794 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG1, 0xd0),
1795 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG2, 0x07),
1796 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG6, 0x13),
1797
1798 QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x21),
1799 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa),
1800 QMP_PHY_INIT_CFG(QPHY_V4_PCS_CDR_RESET_TIME, 0x0a),
1801 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG1, 0x88),
1802 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG2, 0x13),
1803 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCS_TX_RX_CONFIG, 0x0c),
1804 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG1, 0x4b),
1805 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x10),
1806 QMP_PHY_INIT_CFG(QPHY_V4_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
1807 QMP_PHY_INIT_CFG(QPHY_V4_PCS_USB3_RXEQTRAINING_DFE_TIME_S2, 0x07),
1808};
1809
1810static const struct qmp_phy_init_tbl sm8150_usb3_uniphy_serdes_tbl[] = {
1811 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x1a),
1812 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
1813 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x01),
1814 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x82),
1815 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE0, 0xab),
1816 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0xea),
1817 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x02),
1818 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca),
1819 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
1820 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06),
1821 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16),
1822 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36),
1823 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE0, 0x24),
1824 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x34),
1825 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x14),
1826 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x04),
1827 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_BUF_ENABLE, 0x0a),
1828 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE2_MODE1, 0x02),
1829 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE1, 0x24),
1830 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x08),
1831 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x82),
1832 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0xab),
1833 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0xea),
1834 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x02),
1835 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x82),
1836 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x34),
1837 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06),
1838 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16),
1839 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36),
1840 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xca),
1841 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x1e),
1842 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_IPTRIM, 0x20),
1843 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01),
1844 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31),
1845 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01),
1846 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0xde),
1847 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x07),
1848 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xde),
1849 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x07),
1850 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02),
1851};
1852
1853static const struct qmp_phy_init_tbl sm8150_usb3_uniphy_tx_tbl[] = {
1854 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
1855 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x95),
1856 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PI_QEC_CTRL, 0x40),
1857 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x05),
1858};
1859
1860static const struct qmp_phy_init_tbl sm8150_usb3_uniphy_rx_tbl[] = {
1861 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0xb8),
1862 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x7f),
1863 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0x37),
1864 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x2f),
1865 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0xef),
1866 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb3),
1867 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x0b),
1868 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0x5c),
1869 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xdc),
1870 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0xdc),
1871 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x99),
1872 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH1, 0x04),
1873 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH2, 0x08),
1874 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN1, 0x05),
1875 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN2, 0x05),
1876 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f),
1877 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff),
1878 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f),
1879 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
1880 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x08),
1881 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x54),
1882 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x0c),
1883 QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x1f),
1884 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
1885 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a),
1886 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0a),
1887 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
1888 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x47),
1889 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
1890 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x04),
1891 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x0e),
1892 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
1893 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
1894 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x20),
1895 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x04),
1896 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c),
1897};
1898
1899static const struct qmp_phy_init_tbl sm8150_usb3_uniphy_pcs_tbl[] = {
1900 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG1, 0xd0),
1901 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG2, 0x07),
1902 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG3, 0x20),
1903 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG6, 0x13),
1904 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RCVR_DTCT_DLY_P1U2_L, 0xe7),
1905 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
1906 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa),
1907 QMP_PHY_INIT_CFG(QPHY_V4_PCS_USB3_UNI_RXEQTRAINING_DFE_TIME_S2, 0x07),
1908 QMP_PHY_INIT_CFG(QPHY_V4_PCS_USB3_UNI_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
1909 QMP_PHY_INIT_CFG(QPHY_V4_PCS_CDR_RESET_TIME, 0x0f),
1910 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG1, 0x88),
1911 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG2, 0x13),
1912 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG1, 0x4b),
1913 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x10),
1914 QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x21),
1915 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCS_TX_RX_CONFIG, 0x0c),
1916};
1917
1918static const struct qmp_phy_init_tbl sm8250_usb3_tx_tbl[] = {
1919 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_TX, 0x60),
1920 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_RX, 0x60),
1921 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x11),
1922 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_RX, 0x02),
1923 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0xd5),
1924 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
1925 QMP_PHY_INIT_CFG_LANE(QSERDES_V4_TX_PI_QEC_CTRL, 0x40, 1),
1926 QMP_PHY_INIT_CFG_LANE(QSERDES_V4_TX_PI_QEC_CTRL, 0x54, 2),
1927};
1928
1929static const struct qmp_phy_init_tbl sm8250_usb3_rx_tbl[] = {
1930 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x06),
1931 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f),
1932 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
1933 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff),
1934 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f),
1935 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x99),
1936 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH1, 0x04),
1937 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH2, 0x08),
1938 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN1, 0x05),
1939 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN2, 0x05),
1940 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x54),
1941 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x0c),
1942 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
1943 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a),
1944 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0a),
1945 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
1946 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
1947 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x77),
1948 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x04),
1949 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x0e),
1950 QMP_PHY_INIT_CFG_LANE(QSERDES_V4_RX_RX_MODE_00_LOW, 0xff, 1),
1951 QMP_PHY_INIT_CFG_LANE(QSERDES_V4_RX_RX_MODE_00_LOW, 0x7f, 2),
1952 QMP_PHY_INIT_CFG_LANE(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x7f, 1),
1953 QMP_PHY_INIT_CFG_LANE(QSERDES_V4_RX_RX_MODE_00_HIGH, 0xff, 2),
1954 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0x7f),
1955 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x7f),
1956 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x97),
1957 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0xdc),
1958 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xdc),
1959 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0x5c),
1960 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x7b),
1961 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb4),
1962 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
1963 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
1964 QMP_PHY_INIT_CFG(QSERDES_V4_RX_AUX_DATA_TCOARSE_TFINE, 0xa0),
1965 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c),
1966 QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x1f),
1967 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VTH_CODE, 0x10),
1968};
1969
1970static const struct qmp_phy_init_tbl sm8250_usb3_pcs_tbl[] = {
1971 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG1, 0xd0),
1972 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG2, 0x07),
1973 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG3, 0x20),
1974 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG6, 0x13),
1975 QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x21),
1976 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xa9),
1977 QMP_PHY_INIT_CFG(QPHY_V4_PCS_CDR_RESET_TIME, 0x0a),
1978 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG1, 0x88),
1979 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG2, 0x13),
1980 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCS_TX_RX_CONFIG, 0x0c),
1981 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG1, 0x4b),
1982 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x10),
1983 QMP_PHY_INIT_CFG(QPHY_V4_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
1984 QMP_PHY_INIT_CFG(QPHY_V4_PCS_USB3_RXEQTRAINING_DFE_TIME_S2, 0x07),
1985};
1986
1987static const struct qmp_phy_init_tbl sm8250_usb3_uniphy_tx_tbl[] = {
1988 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
1989 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0xd5),
1990 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_2, 0x82),
1991 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PI_QEC_CTRL, 0x40),
1992 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x11),
1993 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_RX, 0x02),
1994};
1995
1996static const struct qmp_phy_init_tbl sm8250_usb3_uniphy_rx_tbl[] = {
1997 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0xb8),
1998 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0xff),
1999 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xbf),
2000 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x7f),
2001 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x7f),
2002 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb4),
2003 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x7b),
2004 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0x5c),
2005 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xdc),
2006 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0xdc),
2007 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x99),
2008 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH1, 0x04),
2009 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH2, 0x08),
2010 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN1, 0x05),
2011 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN2, 0x05),
2012 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f),
2013 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff),
2014 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f),
2015 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
2016 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0a),
2017 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x54),
2018 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x0c),
2019 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
2020 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a),
2021 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0a),
2022 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
2023 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x47),
2024 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
2025 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x04),
2026 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x0e),
2027 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
2028 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
2029 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
2030 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x06),
2031 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c),
2032 QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x1f),
2033};
2034
2035static const struct qmp_phy_init_tbl sm8250_usb3_uniphy_pcs_tbl[] = {
2036 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG1, 0xd0),
2037 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG2, 0x07),
2038 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG3, 0x20),
2039 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG6, 0x13),
2040 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RCVR_DTCT_DLY_P1U2_L, 0xe7),
2041 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
2042 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xa9),
2043 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCS_TX_RX_CONFIG, 0x0c),
2044 QMP_PHY_INIT_CFG(QPHY_V4_PCS_USB3_UNI_RXEQTRAINING_DFE_TIME_S2, 0x07),
2045 QMP_PHY_INIT_CFG(QPHY_V4_PCS_USB3_UNI_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
2046 QMP_PHY_INIT_CFG(QPHY_V4_PCS_CDR_RESET_TIME, 0x0a),
2047 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG1, 0x88),
2048 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG2, 0x13),
2049 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG1, 0x4b),
2050 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x10),
2051 QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x21),
2052};
2053
2054static const struct qmp_phy_init_tbl qmp_v4_dp_serdes_tbl[] = {
2055 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SVS_MODE_CLK_SEL, 0x05),
2056 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x3b),
2057 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYS_CLK_CTRL, 0x02),
2058 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_ENABLE1, 0x0c),
2059 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_BUF_ENABLE, 0x06),
2060 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x30),
2061 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f),
2062 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36),
2063 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16),
2064 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06),
2065 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_CONFIG, 0x02),
2066 QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
2067 QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
2068 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x00),
2069 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE0, 0x00),
2070 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BG_TIMER, 0x0a),
2071 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE0, 0x0a),
2072 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_CTRL, 0x00),
2073 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIAS_EN_CLKBUFLR_EN, 0x17),
2074 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORE_CLK_EN, 0x1f),
2075};
2076
2077static const struct qmp_phy_init_tbl qmp_v4_dp_serdes_tbl_rbr[] = {
2078 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x05),
2079 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x69),
2080 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x80),
2081 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x07),
2082 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x6f),
2083 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x08),
2084 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x04),
2085};
2086
2087static const struct qmp_phy_init_tbl qmp_v4_dp_serdes_tbl_hbr[] = {
2088 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x03),
2089 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x69),
2090 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x80),
2091 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x07),
2092 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x0f),
2093 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x0e),
2094 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x08),
2095};
2096
2097static const struct qmp_phy_init_tbl qmp_v4_dp_serdes_tbl_hbr2[] = {
2098 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x01),
2099 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x8c),
2100 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x00),
2101 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x0a),
2102 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x1f),
2103 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x1c),
2104 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x08),
2105};
2106
2107static const struct qmp_phy_init_tbl qmp_v4_dp_serdes_tbl_hbr3[] = {
2108 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x00),
2109 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x69),
2110 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x80),
2111 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x07),
2112 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x2f),
2113 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x2a),
2114 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x08),
2115};
2116
2117static const struct qmp_phy_init_tbl qmp_v4_dp_tx_tbl[] = {
2118 QMP_PHY_INIT_CFG(QSERDES_V4_TX_VMODE_CTRL1, 0x40),
2119 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PRE_STALL_LDO_BOOST_EN, 0x30),
2120 QMP_PHY_INIT_CFG(QSERDES_V4_TX_INTERFACE_SELECT, 0x3b),
2121 QMP_PHY_INIT_CFG(QSERDES_V4_TX_CLKBUF_ENABLE, 0x0f),
2122 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RESET_TSYNC_EN, 0x03),
2123 QMP_PHY_INIT_CFG(QSERDES_V4_TX_TRAN_DRVR_EMP_EN, 0x0f),
2124 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PARRATE_REC_DETECT_IDLE_EN, 0x00),
2125 QMP_PHY_INIT_CFG(QSERDES_V4_TX_TX_INTERFACE_MODE, 0x00),
2126 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x11),
2127 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_RX, 0x11),
2128 QMP_PHY_INIT_CFG(QSERDES_V4_TX_TX_BAND, 0x4),
2129 QMP_PHY_INIT_CFG(QSERDES_V4_TX_TX_POL_INV, 0x0a),
2130 QMP_PHY_INIT_CFG(QSERDES_V4_TX_TX_DRV_LVL, 0x2a),
2131 QMP_PHY_INIT_CFG(QSERDES_V4_TX_TX_EMP_POST1_LVL, 0x20),
2132};
2133
2134static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_serdes_tbl[] = {
2135 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x08),
2136 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x34),
2137 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x08),
2138 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f),
2139 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x42),
2140 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE0, 0x24),
2141 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE2_MODE1, 0x03),
2142 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE1, 0xb4),
2143 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02),
2144 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
2145 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x82),
2146 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x03),
2147 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x55),
2148 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE0, 0x55),
2149 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x1a),
2150 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x0a),
2151 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x68),
2152 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x02),
2153 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0xaa),
2154 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0xab),
2155 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x34),
2156 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x14),
2157 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x01),
2158 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06),
2159 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16),
2160 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36),
2161 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06),
2162 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16),
2163 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36),
2164 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
2165 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca),
2166 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18),
2167 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xa2),
2168 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_BUF_ENABLE, 0x07),
2169 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01),
2170 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31),
2171 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01),
2172 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xde),
2173 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x07),
2174 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0x4c),
2175 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x06),
2176 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_ENABLE1, 0x90),
2177};
2178
2179static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_tx_tbl[] = {
2180 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
2181 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x5),
2182};
2183
2184static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_rx_tbl[] = {
2185 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03),
2186 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c),
2187 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
2188 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x07),
2189 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x6e),
2190 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x6e),
2191 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x4a),
2192 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
2193 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
2194 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70),
2195 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x17),
2196 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x54),
2197 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x37),
2198 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0xd4),
2199 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x54),
2200 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xdb),
2201 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x39),
2202 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0x31),
2203 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x24),
2204 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xe4),
2205 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xec),
2206 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x39),
2207 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0x36),
2208 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x7f),
2209 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0xff),
2210 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xff),
2211 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0xdb),
2212 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x75),
2213 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
2214 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
2215 QMP_PHY_INIT_CFG(QSERDES_V4_RX_AUX_DATA_TCOARSE_TFINE, 0xa0),
2216 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RCLK_AUXDATA_SEL, 0xc0),
2217 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c),
2218 QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x05),
2219 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c),
2220 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x03),
2221};
2222
2223static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_pcs_tbl[] = {
2224 QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
2225 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa),
2226 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RATE_SLEW_CNTRL1, 0x0b),
2227 QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d),
2228 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x01),
2229};
2230
2231static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_pcs_misc_tbl[] = {
2232 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
2233 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
2234 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
2235 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
2236 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_PRE, 0x00),
2237 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_POST, 0x58),
2238 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
2239};
2240
2241static const struct qmp_phy_init_tbl sm8250_qmp_pcie_serdes_tbl[] = {
2242 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x08),
2243 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x34),
2244 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x08),
2245 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f),
2246 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x42),
2247 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE0, 0x24),
2248 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE2_MODE1, 0x03),
2249 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE1, 0xb4),
2250 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02),
2251 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
2252 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x82),
2253 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x03),
2254 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x55),
2255 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE0, 0x55),
2256 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x1a),
2257 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x0a),
2258 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x68),
2259 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x02),
2260 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0xaa),
2261 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0xab),
2262 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x34),
2263 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x14),
2264 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x01),
2265 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06),
2266 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16),
2267 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36),
2268 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06),
2269 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16),
2270 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36),
2271 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
2272 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca),
2273 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18),
2274 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xa2),
2275 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01),
2276 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31),
2277 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01),
2278 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xde),
2279 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x07),
2280 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0x4c),
2281 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x06),
2282 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_ENABLE1, 0x90),
2283};
2284
2285static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_serdes_tbl[] = {
2286 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_BUF_ENABLE, 0x07),
2287};
2288
2289static const struct qmp_phy_init_tbl sm8250_qmp_pcie_tx_tbl[] = {
2290 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
2291 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x35),
2292 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x11),
2293};
2294
2295static const struct qmp_phy_init_tbl sm8250_qmp_pcie_rx_tbl[] = {
2296 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c),
2297 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x03),
2298 QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x1b),
2299 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
2300 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
2301 QMP_PHY_INIT_CFG(QSERDES_V4_RX_AUX_DATA_TCOARSE_TFINE, 0x30),
2302 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x04),
2303 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x07),
2304 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
2305 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70),
2306 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0e),
2307 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a),
2308 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0f),
2309 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03),
2310 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c),
2311 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x1e),
2312 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x17),
2313 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0xd4),
2314 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x54),
2315 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xdb),
2316 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x3b),
2317 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0x31),
2318 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x24),
2319 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xff),
2320 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x7f),
2321 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c),
2322 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xe4),
2323 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xec),
2324 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x3b),
2325 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0x36),
2326};
2327
2328static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_rx_tbl[] = {
2329 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RCLK_AUXDATA_SEL, 0x00),
2330 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x00),
2331 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
2332 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x3f),
2333 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x14),
2334 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x30),
2335};
2336
2337static const struct qmp_phy_init_tbl sm8250_qmp_pcie_pcs_tbl[] = {
2338 QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
2339 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0x77),
2340 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RATE_SLEW_CNTRL1, 0x0b),
2341};
2342
2343static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_pcs_tbl[] = {
2344 QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d),
2345 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x12),
2346};
2347
2348static const struct qmp_phy_init_tbl sm8250_qmp_pcie_pcs_misc_tbl[] = {
2349 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
2350 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
2351 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
2352 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P6_P7_PRE, 0x33),
2353 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_PRE, 0x00),
2354 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_POST, 0x58),
2355 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
2356};
2357
2358static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_pcs_misc_tbl[] = {
2359 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
2360 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_EQ_CONFIG2, 0x0f),
2361};
2362
2363static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_tx_tbl[] = {
2364 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PI_QEC_CTRL, 0x20),
2365};
2366
2367static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_rx_tbl[] = {
2368 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x04),
2369 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0xbf),
2370 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x15),
2371 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
2372};
2373
2374static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_pcs_tbl[] = {
2375 QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x05),
2376 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG2, 0x0f),
2377};
2378
2379static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_pcs_misc_tbl[] = {
2380 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG2, 0x0d),
2381 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG4, 0x07),
2382};
2383
2384static const struct qmp_phy_init_tbl sdx55_usb3_uniphy_tx_tbl[] = {
2385 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
2386 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0xd5),
2387 QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_2, 0x80),
2388 QMP_PHY_INIT_CFG(QSERDES_V4_TX_PI_QEC_CTRL, 0x20),
2389 QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x08),
2390};
2391
2392static const struct qmp_phy_init_tbl sdx55_usb3_uniphy_rx_tbl[] = {
2393 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x26),
2394 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x7f),
2395 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xbf),
2396 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x7f),
2397 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x7f),
2398 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb4),
2399 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x7b),
2400 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0x5c),
2401 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xdc),
2402 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0xdc),
2403 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x99),
2404 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH1, 0x048),
2405 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_THRESH2, 0x08),
2406 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN1, 0x00),
2407 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SB2_GAIN2, 0x04),
2408 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f),
2409 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff),
2410 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f),
2411 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
2412 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x09),
2413 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x54),
2414 QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x0c),
2415 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
2416 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a),
2417 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0a),
2418 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
2419 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x47),
2420 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
2421 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x04),
2422 QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x0e),
2423 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
2424 QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
2425 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
2426 QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x05),
2427 QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c),
2428 QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x1f),
2429};
2430
2431static const struct qmp_phy_init_tbl sdx55_qmp_pcie_serdes_tbl[] = {
2432 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BG_TIMER, 0x02),
2433 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIAS_EN_CLKBUFLR_EN, 0x18),
2434 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYS_CLK_CTRL, 0x07),
2435 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f),
2436 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x0a),
2437 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x0a),
2438 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x19),
2439 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x19),
2440 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x03),
2441 QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x03),
2442 QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x00),
2443 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x46),
2444 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_CFG, 0x04),
2445 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x7f),
2446 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x02),
2447 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0xff),
2448 QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x04),
2449 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x4b),
2450 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x50),
2451 QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x00),
2452 QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN0_MODE0, 0xfb),
2453 QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN1_MODE0, 0x01),
2454 QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN0_MODE1, 0xfb),
2455 QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN1_MODE1, 0x01),
2456 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02),
2457 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x12),
2458 QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_HS_SWITCH_SEL, 0x00),
2459 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE0, 0x05),
2460 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x04),
2461 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_CONFIG, 0x04),
2462 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_MISC1, 0x88),
2463 QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTERNAL_DIG_CORECLK_DIV, 0x03),
2464 QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_MODE, 0x17),
2465 QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_DC_LEVEL_CTRL, 0x0b),
2466 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0x56),
2467 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1d),
2468 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0x4b),
2469 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x1f),
2470 QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x22),
2471};
2472
2473static const struct qmp_phy_init_tbl sdx55_qmp_pcie_tx_tbl[] = {
2474 QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_LANE_MODE_1, 0x05),
2475 QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_LANE_MODE_2, 0xf6),
2476 QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_LANE_MODE_3, 0x13),
2477 QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_VMODE_CTRL1, 0x00),
2478 QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_PI_QEC_CTRL, 0x00),
2479};
2480
2481static const struct qmp_phy_init_tbl sdx55_qmp_pcie_rx_tbl[] = {
2482 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_FO_GAIN_RATE2, 0x0c),
2483 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_UCDR_PI_CONTROLS, 0x16),
2484 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_AUX_DATA_TCOARSE_TFINE, 0x7f),
2485 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_3, 0x55),
2486 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_DAC_ENABLE1, 0x0c),
2487 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_DAC_ENABLE2, 0x00),
2488 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_VGA_CAL_CNTRL2, 0x08),
2489 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x27),
2490 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B1, 0x1a),
2491 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B2, 0x5a),
2492 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B3, 0x09),
2493 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B4, 0x37),
2494 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B0, 0xbd),
2495 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B1, 0xf9),
2496 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B2, 0xbf),
2497 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B3, 0xce),
2498 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B4, 0x62),
2499 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B0, 0xbf),
2500 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B1, 0x7d),
2501 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B2, 0xbf),
2502 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B3, 0xcf),
2503 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B4, 0xd6),
2504 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_PHPRE_CTRL, 0xa0),
2505 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
2506 QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_MARG_COARSE_CTRL2, 0x12),
2507};
2508
2509static const struct qmp_phy_init_tbl sdx55_qmp_pcie_pcs_tbl[] = {
2510 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_RX_SIGDET_LVL, 0x77),
2511 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_EQ_CONFIG2, 0x01),
2512 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_EQ_CONFIG4, 0x16),
2513 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_EQ_CONFIG5, 0x02),
2514};
2515
2516static const struct qmp_phy_init_tbl sdx55_qmp_pcie_pcs_misc_tbl[] = {
2517 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_EQ_CONFIG1, 0x17),
2518 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G3_RXEQEVAL_TIME, 0x13),
2519 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G4_RXEQEVAL_TIME, 0x13),
2520 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G4_EQ_CONFIG2, 0x01),
2521 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G4_EQ_CONFIG5, 0x02),
2522 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_LANE1_INSIG_SW_CTRL2, 0x00),
2523 QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_LANE1_INSIG_MX_CTRL2, 0x00),
2524};
2525
2526static const struct qmp_phy_init_tbl sm8350_ufsphy_serdes_tbl[] = {
2527 QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0xd9),
2528 QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x11),
2529 QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_HS_SWITCH_SEL, 0x00),
2530 QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x42),
2531 QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02),
2532 QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f),
2533 QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_INITVAL2, 0x00),
2534 QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
2535 QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x82),
2536 QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x14),
2537 QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x18),
2538 QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x18),
2539 QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0xff),
2540 QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x19),
2541 QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xac),
2542 QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
2543 QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0x98),
2544 QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x14),
2545 QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x18),
2546 QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x18),
2547 QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0x65),
2548 QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x1e),
2549 QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xdd),
2550 QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x23),
2551
2552
2553 QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x06),
2554};
2555
2556static const struct qmp_phy_init_tbl sm8350_ufsphy_tx_tbl[] = {
2557 QMP_PHY_INIT_CFG(QSERDES_V5_TX_PWM_GEAR_1_DIVIDER_BAND0_1, 0x06),
2558 QMP_PHY_INIT_CFG(QSERDES_V5_TX_PWM_GEAR_2_DIVIDER_BAND0_1, 0x03),
2559 QMP_PHY_INIT_CFG(QSERDES_V5_TX_PWM_GEAR_3_DIVIDER_BAND0_1, 0x01),
2560 QMP_PHY_INIT_CFG(QSERDES_V5_TX_PWM_GEAR_4_DIVIDER_BAND0_1, 0x00),
2561 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0xf5),
2562 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_3, 0x3f),
2563 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x09),
2564 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x09),
2565 QMP_PHY_INIT_CFG(QSERDES_V5_TX_TRAN_DRVR_EMP_EN, 0x0c),
2566};
2567
2568static const struct qmp_phy_init_tbl sm8350_ufsphy_rx_tbl[] = {
2569 QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_LVL, 0x24),
2570 QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_CNTRL, 0x0f),
2571 QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_DEGLITCH_CNTRL, 0x1e),
2572 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_BAND, 0x18),
2573 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_FO_GAIN, 0x0a),
2574 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x5a),
2575 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0xf1),
2576 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_LOW, 0x80),
2577 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CTRL2, 0x80),
2578 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FO_GAIN, 0x0e),
2579 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_GAIN, 0x04),
2580 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_TERM_BW, 0x1b),
2581 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL1, 0x04),
2582 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL2, 0x06),
2583 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
2584 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1a),
2585 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x17),
2586 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x00),
2587 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_IDAC_MEASURE_TIME, 0x10),
2588 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
2589 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
2590 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0x6d),
2591 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0x6d),
2592 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0xed),
2593 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x3b),
2594 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0x3c),
2595 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0xe0),
2596 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0xc8),
2597 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0xc8),
2598 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x3b),
2599 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xb7),
2600 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_LOW, 0xe0),
2601 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH, 0xc8),
2602 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH2, 0xc8),
2603 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH3, 0x3b),
2604 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH4, 0xb7),
2605 QMP_PHY_INIT_CFG(QSERDES_V5_RX_DCC_CTRL1, 0x0c),
2606};
2607
2608static const struct qmp_phy_init_tbl sm8350_ufsphy_pcs_tbl[] = {
2609 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_RX_SIGDET_CTRL2, 0x6d),
2610 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_TX_LARGE_AMP_DRV_LVL, 0x0a),
2611 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_TX_SMALL_AMP_DRV_LVL, 0x02),
2612 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_TX_MID_TERM_CTRL1, 0x43),
2613 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_DEBUG_BUS_CLKSEL, 0x1f),
2614 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_RX_MIN_HIBERN8_TIME, 0xff),
2615 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_PLL_CNTL, 0x03),
2616 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_TIMER_20US_CORECLK_STEPS_MSB, 0x16),
2617 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_TIMER_20US_CORECLK_STEPS_LSB, 0xd8),
2618 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_TX_PWM_GEAR_BAND, 0xaa),
2619 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_TX_HS_GEAR_BAND, 0x06),
2620 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_TX_HSGEAR_CAPABILITY, 0x03),
2621 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_RX_HSGEAR_CAPABILITY, 0x03),
2622 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_RX_SIGDET_CTRL1, 0x0e),
2623 QMP_PHY_INIT_CFG(QPHY_V5_PCS_UFS_MULTI_LANE_CTRL1, 0x02),
2624};
2625
2626static const struct qmp_phy_init_tbl sm8350_usb3_tx_tbl[] = {
2627 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_TX, 0x00),
2628 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_RX, 0x00),
2629 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x16),
2630 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0e),
2631 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0x35),
2632 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_3, 0x3f),
2633 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x7f),
2634 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_5, 0x3f),
2635 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RCV_DETECT_LVL_2, 0x12),
2636 QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x21),
2637};
2638
2639static const struct qmp_phy_init_tbl sm8350_usb3_rx_tbl[] = {
2640 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FO_GAIN, 0x0a),
2641 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_GAIN, 0x05),
2642 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f),
2643 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
2644 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff),
2645 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f),
2646 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0x99),
2647 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH1, 0x08),
2648 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH2, 0x08),
2649 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_GAIN1, 0x00),
2650 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_GAIN2, 0x04),
2651 QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL1, 0x54),
2652 QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x0f),
2653 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
2654 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a),
2655 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0a),
2656 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
2657 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
2658 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x47),
2659 QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_CNTRL, 0x04),
2660 QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_DEGLITCH_CNTRL, 0x0e),
2661 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0xbb),
2662 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0x7b),
2663 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0xbb),
2664 QMP_PHY_INIT_CFG_LANE(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x3d, 1),
2665 QMP_PHY_INIT_CFG_LANE(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x3c, 2),
2666 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0xdb),
2667 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0x64),
2668 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0x24),
2669 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0xd2),
2670 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x13),
2671 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xa9),
2672 QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_EN_TIMER, 0x04),
2673 QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
2674 QMP_PHY_INIT_CFG(QSERDES_V5_RX_AUX_DATA_TCOARSE_TFINE, 0xa0),
2675 QMP_PHY_INIT_CFG(QSERDES_V5_RX_DCC_CTRL1, 0x0c),
2676 QMP_PHY_INIT_CFG(QSERDES_V5_RX_GM_CAL, 0x00),
2677 QMP_PHY_INIT_CFG(QSERDES_V5_RX_VTH_CODE, 0x10),
2678};
2679
2680static const struct qmp_phy_init_tbl sm8350_usb3_pcs_tbl[] = {
2681 QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_RCVR_DTCT_DLY_U3_L, 0x40),
2682 QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_RCVR_DTCT_DLY_U3_H, 0x00),
2683 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RCVR_DTCT_DLY_P1U2_L, 0xe7),
2684 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
2685 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG1, 0xd0),
2686 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG2, 0x07),
2687 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG3, 0x20),
2688 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG6, 0x13),
2689 QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x21),
2690 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa),
2691 QMP_PHY_INIT_CFG(QPHY_V4_PCS_CDR_RESET_TIME, 0x0a),
2692 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG1, 0x88),
2693 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG2, 0x13),
2694 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCS_TX_RX_CONFIG, 0x0c),
2695 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG1, 0x4b),
2696 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x10),
2697 QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
2698 QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_RXEQTRAINING_DFE_TIME_S2, 0x07),
2699};
2700
2701static const struct qmp_phy_init_tbl sm8350_usb3_uniphy_tx_tbl[] = {
2702 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0xa5),
2703 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_2, 0x82),
2704 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_3, 0x3f),
2705 QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f),
2706 QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x21),
2707 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x10),
2708 QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0e),
2709};
2710
2711static const struct qmp_phy_init_tbl sm8350_usb3_uniphy_rx_tbl[] = {
2712 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0xdc),
2713 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0xbd),
2714 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0xff),
2715 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0x7f),
2716 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0xff),
2717 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xa9),
2718 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x7b),
2719 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0xe4),
2720 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0x24),
2721 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0x64),
2722 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0x99),
2723 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH1, 0x08),
2724 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH2, 0x08),
2725 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_GAIN1, 0x00),
2726 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_GAIN2, 0x04),
2727 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_FO_GAIN, 0x2f),
2728 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_LOW, 0xff),
2729 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FASTLOCK_COUNT_HIGH, 0x0f),
2730 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FO_GAIN, 0x0a),
2731 QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL1, 0x54),
2732 QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x0f),
2733 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0f),
2734 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0a),
2735 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x47),
2736 QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
2737 QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_CNTRL, 0x04),
2738 QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_DEGLITCH_CNTRL, 0x0e),
2739 QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
2740 QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_GAIN, 0x05),
2741 QMP_PHY_INIT_CFG(QSERDES_V5_RX_GM_CAL, 0x00),
2742 QMP_PHY_INIT_CFG(QSERDES_V5_RX_SIGDET_ENABLES, 0x00),
2743};
2744
2745static const struct qmp_phy_init_tbl sm8350_usb3_uniphy_pcs_tbl[] = {
2746 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG1, 0xd0),
2747 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG2, 0x07),
2748 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG3, 0x20),
2749 QMP_PHY_INIT_CFG(QPHY_V4_PCS_LOCK_DETECT_CONFIG6, 0x13),
2750 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RCVR_DTCT_DLY_P1U2_L, 0xe7),
2751 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RCVR_DTCT_DLY_P1U2_H, 0x03),
2752 QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa),
2753 QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCS_TX_RX_CONFIG, 0x0c),
2754 QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_UNI_RXEQTRAINING_DFE_TIME_S2, 0x07),
2755 QMP_PHY_INIT_CFG(QPHY_V5_PCS_USB3_UNI_LFPS_DET_HIGH_COUNT_VAL, 0xf8),
2756 QMP_PHY_INIT_CFG(QPHY_V4_PCS_CDR_RESET_TIME, 0x0a),
2757 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG1, 0x88),
2758 QMP_PHY_INIT_CFG(QPHY_V4_PCS_ALIGN_DETECT_CONFIG2, 0x13),
2759 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG1, 0x4b),
2760 QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x10),
2761 QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x21),
2762};
2763
2764struct qmp_phy;
2765
2766
2767struct qmp_phy_cfg {
2768
2769 unsigned int type;
2770
2771 int nlanes;
2772
2773
2774 const struct qmp_phy_init_tbl *serdes_tbl;
2775 int serdes_tbl_num;
2776 const struct qmp_phy_init_tbl *serdes_tbl_sec;
2777 int serdes_tbl_num_sec;
2778 const struct qmp_phy_init_tbl *tx_tbl;
2779 int tx_tbl_num;
2780 const struct qmp_phy_init_tbl *tx_tbl_sec;
2781 int tx_tbl_num_sec;
2782 const struct qmp_phy_init_tbl *rx_tbl;
2783 int rx_tbl_num;
2784 const struct qmp_phy_init_tbl *rx_tbl_sec;
2785 int rx_tbl_num_sec;
2786 const struct qmp_phy_init_tbl *pcs_tbl;
2787 int pcs_tbl_num;
2788 const struct qmp_phy_init_tbl *pcs_tbl_sec;
2789 int pcs_tbl_num_sec;
2790 const struct qmp_phy_init_tbl *pcs_misc_tbl;
2791 int pcs_misc_tbl_num;
2792 const struct qmp_phy_init_tbl *pcs_misc_tbl_sec;
2793 int pcs_misc_tbl_num_sec;
2794
2795
2796 const struct qmp_phy_init_tbl *serdes_tbl_rbr;
2797 int serdes_tbl_rbr_num;
2798 const struct qmp_phy_init_tbl *serdes_tbl_hbr;
2799 int serdes_tbl_hbr_num;
2800 const struct qmp_phy_init_tbl *serdes_tbl_hbr2;
2801 int serdes_tbl_hbr2_num;
2802 const struct qmp_phy_init_tbl *serdes_tbl_hbr3;
2803 int serdes_tbl_hbr3_num;
2804
2805
2806 int (*configure_dp_phy)(struct qmp_phy *qphy);
2807 void (*configure_dp_tx)(struct qmp_phy *qphy);
2808 int (*calibrate_dp_phy)(struct qmp_phy *qphy);
2809 void (*dp_aux_init)(struct qmp_phy *qphy);
2810
2811
2812 const char * const *clk_list;
2813 int num_clks;
2814
2815 const char * const *reset_list;
2816 int num_resets;
2817
2818 const char * const *vreg_list;
2819 int num_vregs;
2820
2821
2822 const unsigned int *regs;
2823
2824 unsigned int start_ctrl;
2825 unsigned int pwrdn_ctrl;
2826 unsigned int mask_com_pcs_ready;
2827
2828 unsigned int phy_status;
2829
2830
2831 bool has_phy_com_ctrl;
2832
2833 bool has_lane_rst;
2834
2835 bool has_pwrdn_delay;
2836
2837 int pwrdn_delay_min;
2838 int pwrdn_delay_max;
2839
2840
2841 bool has_phy_dp_com_ctrl;
2842
2843 bool is_dual_lane_phy;
2844
2845
2846 bool no_pcs_sw_reset;
2847};
2848
2849struct qmp_phy_combo_cfg {
2850 const struct qmp_phy_cfg *usb_cfg;
2851 const struct qmp_phy_cfg *dp_cfg;
2852};
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872struct qmp_phy {
2873 struct phy *phy;
2874 const struct qmp_phy_cfg *cfg;
2875 void __iomem *serdes;
2876 void __iomem *tx;
2877 void __iomem *rx;
2878 void __iomem *pcs;
2879 void __iomem *tx2;
2880 void __iomem *rx2;
2881 void __iomem *pcs_misc;
2882 struct clk *pipe_clk;
2883 unsigned int index;
2884 struct qcom_qmp *qmp;
2885 struct reset_control *lane_rst;
2886 enum phy_mode mode;
2887 unsigned int dp_aux_cfg;
2888 struct phy_configure_opts_dp dp_opts;
2889 struct qmp_phy_dp_clks *dp_clks;
2890};
2891
2892struct qmp_phy_dp_clks {
2893 struct qmp_phy *qphy;
2894 struct clk_hw dp_link_hw;
2895 struct clk_hw dp_pixel_hw;
2896};
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913struct qcom_qmp {
2914 struct device *dev;
2915 void __iomem *dp_com;
2916
2917 struct clk_bulk_data *clks;
2918 struct reset_control **resets;
2919 struct regulator_bulk_data *vregs;
2920
2921 struct qmp_phy **phys;
2922
2923 struct mutex phy_mutex;
2924 int init_count;
2925
2926 struct reset_control *ufs_reset;
2927};
2928
2929static void qcom_qmp_v3_phy_dp_aux_init(struct qmp_phy *qphy);
2930static void qcom_qmp_v3_phy_configure_dp_tx(struct qmp_phy *qphy);
2931static int qcom_qmp_v3_phy_configure_dp_phy(struct qmp_phy *qphy);
2932static int qcom_qmp_v3_dp_phy_calibrate(struct qmp_phy *qphy);
2933
2934static void qcom_qmp_v4_phy_dp_aux_init(struct qmp_phy *qphy);
2935static void qcom_qmp_v4_phy_configure_dp_tx(struct qmp_phy *qphy);
2936static int qcom_qmp_v4_phy_configure_dp_phy(struct qmp_phy *qphy);
2937static int qcom_qmp_v4_dp_phy_calibrate(struct qmp_phy *qphy);
2938
2939static inline void qphy_setbits(void __iomem *base, u32 offset, u32 val)
2940{
2941 u32 reg;
2942
2943 reg = readl(base + offset);
2944 reg |= val;
2945 writel(reg, base + offset);
2946
2947
2948 readl(base + offset);
2949}
2950
2951static inline void qphy_clrbits(void __iomem *base, u32 offset, u32 val)
2952{
2953 u32 reg;
2954
2955 reg = readl(base + offset);
2956 reg &= ~val;
2957 writel(reg, base + offset);
2958
2959
2960 readl(base + offset);
2961}
2962
2963
2964static const char * const msm8996_phy_clk_l[] = {
2965 "aux", "cfg_ahb", "ref",
2966};
2967
2968static const char * const msm8996_ufs_phy_clk_l[] = {
2969 "ref",
2970};
2971
2972static const char * const qmp_v3_phy_clk_l[] = {
2973 "aux", "cfg_ahb", "ref", "com_aux",
2974};
2975
2976static const char * const sdm845_pciephy_clk_l[] = {
2977 "aux", "cfg_ahb", "ref", "refgen",
2978};
2979
2980static const char * const qmp_v4_phy_clk_l[] = {
2981 "aux", "ref_clk_src", "ref", "com_aux",
2982};
2983
2984
2985static const char * const qmp_v4_sm8250_usbphy_clk_l[] = {
2986 "aux", "ref_clk_src", "com_aux"
2987};
2988
2989static const char * const sdm845_ufs_phy_clk_l[] = {
2990 "ref", "ref_aux",
2991};
2992
2993
2994static const char * const qmp_v4_sdx55_usbphy_clk_l[] = {
2995 "aux", "cfg_ahb", "ref"
2996};
2997
2998
2999static const char * const msm8996_pciephy_reset_l[] = {
3000 "phy", "common", "cfg",
3001};
3002
3003static const char * const msm8996_usb3phy_reset_l[] = {
3004 "phy", "common",
3005};
3006
3007static const char * const sc7180_usb3phy_reset_l[] = {
3008 "phy",
3009};
3010
3011static const char * const sdm845_pciephy_reset_l[] = {
3012 "phy",
3013};
3014
3015
3016static const char * const qmp_phy_vreg_l[] = {
3017 "vdda-phy", "vdda-pll",
3018};
3019
3020static const struct qmp_phy_cfg ipq8074_usb3phy_cfg = {
3021 .type = PHY_TYPE_USB3,
3022 .nlanes = 1,
3023
3024 .serdes_tbl = ipq8074_usb3_serdes_tbl,
3025 .serdes_tbl_num = ARRAY_SIZE(ipq8074_usb3_serdes_tbl),
3026 .tx_tbl = msm8996_usb3_tx_tbl,
3027 .tx_tbl_num = ARRAY_SIZE(msm8996_usb3_tx_tbl),
3028 .rx_tbl = ipq8074_usb3_rx_tbl,
3029 .rx_tbl_num = ARRAY_SIZE(ipq8074_usb3_rx_tbl),
3030 .pcs_tbl = ipq8074_usb3_pcs_tbl,
3031 .pcs_tbl_num = ARRAY_SIZE(ipq8074_usb3_pcs_tbl),
3032 .clk_list = msm8996_phy_clk_l,
3033 .num_clks = ARRAY_SIZE(msm8996_phy_clk_l),
3034 .reset_list = msm8996_usb3phy_reset_l,
3035 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3036 .vreg_list = qmp_phy_vreg_l,
3037 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3038 .regs = usb3phy_regs_layout,
3039
3040 .start_ctrl = SERDES_START | PCS_START,
3041 .pwrdn_ctrl = SW_PWRDN,
3042 .phy_status = PHYSTATUS,
3043};
3044
3045static const struct qmp_phy_cfg msm8996_pciephy_cfg = {
3046 .type = PHY_TYPE_PCIE,
3047 .nlanes = 3,
3048
3049 .serdes_tbl = msm8996_pcie_serdes_tbl,
3050 .serdes_tbl_num = ARRAY_SIZE(msm8996_pcie_serdes_tbl),
3051 .tx_tbl = msm8996_pcie_tx_tbl,
3052 .tx_tbl_num = ARRAY_SIZE(msm8996_pcie_tx_tbl),
3053 .rx_tbl = msm8996_pcie_rx_tbl,
3054 .rx_tbl_num = ARRAY_SIZE(msm8996_pcie_rx_tbl),
3055 .pcs_tbl = msm8996_pcie_pcs_tbl,
3056 .pcs_tbl_num = ARRAY_SIZE(msm8996_pcie_pcs_tbl),
3057 .clk_list = msm8996_phy_clk_l,
3058 .num_clks = ARRAY_SIZE(msm8996_phy_clk_l),
3059 .reset_list = msm8996_pciephy_reset_l,
3060 .num_resets = ARRAY_SIZE(msm8996_pciephy_reset_l),
3061 .vreg_list = qmp_phy_vreg_l,
3062 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3063 .regs = pciephy_regs_layout,
3064
3065 .start_ctrl = PCS_START | PLL_READY_GATE_EN,
3066 .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
3067 .mask_com_pcs_ready = PCS_READY,
3068 .phy_status = PHYSTATUS,
3069
3070 .has_phy_com_ctrl = true,
3071 .has_lane_rst = true,
3072 .has_pwrdn_delay = true,
3073 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3074 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3075};
3076
3077static const struct qmp_phy_cfg msm8996_ufs_cfg = {
3078 .type = PHY_TYPE_UFS,
3079 .nlanes = 1,
3080
3081 .serdes_tbl = msm8996_ufs_serdes_tbl,
3082 .serdes_tbl_num = ARRAY_SIZE(msm8996_ufs_serdes_tbl),
3083 .tx_tbl = msm8996_ufs_tx_tbl,
3084 .tx_tbl_num = ARRAY_SIZE(msm8996_ufs_tx_tbl),
3085 .rx_tbl = msm8996_ufs_rx_tbl,
3086 .rx_tbl_num = ARRAY_SIZE(msm8996_ufs_rx_tbl),
3087
3088 .clk_list = msm8996_ufs_phy_clk_l,
3089 .num_clks = ARRAY_SIZE(msm8996_ufs_phy_clk_l),
3090
3091 .vreg_list = qmp_phy_vreg_l,
3092 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3093
3094 .regs = msm8996_ufsphy_regs_layout,
3095
3096 .start_ctrl = SERDES_START,
3097 .pwrdn_ctrl = SW_PWRDN,
3098 .phy_status = PHYSTATUS,
3099
3100 .no_pcs_sw_reset = true,
3101};
3102
3103static const struct qmp_phy_cfg msm8996_usb3phy_cfg = {
3104 .type = PHY_TYPE_USB3,
3105 .nlanes = 1,
3106
3107 .serdes_tbl = msm8996_usb3_serdes_tbl,
3108 .serdes_tbl_num = ARRAY_SIZE(msm8996_usb3_serdes_tbl),
3109 .tx_tbl = msm8996_usb3_tx_tbl,
3110 .tx_tbl_num = ARRAY_SIZE(msm8996_usb3_tx_tbl),
3111 .rx_tbl = msm8996_usb3_rx_tbl,
3112 .rx_tbl_num = ARRAY_SIZE(msm8996_usb3_rx_tbl),
3113 .pcs_tbl = msm8996_usb3_pcs_tbl,
3114 .pcs_tbl_num = ARRAY_SIZE(msm8996_usb3_pcs_tbl),
3115 .clk_list = msm8996_phy_clk_l,
3116 .num_clks = ARRAY_SIZE(msm8996_phy_clk_l),
3117 .reset_list = msm8996_usb3phy_reset_l,
3118 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3119 .vreg_list = qmp_phy_vreg_l,
3120 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3121 .regs = usb3phy_regs_layout,
3122
3123 .start_ctrl = SERDES_START | PCS_START,
3124 .pwrdn_ctrl = SW_PWRDN,
3125 .phy_status = PHYSTATUS,
3126};
3127
3128static const char * const ipq8074_pciephy_clk_l[] = {
3129 "aux", "cfg_ahb",
3130};
3131
3132static const char * const ipq8074_pciephy_reset_l[] = {
3133 "phy", "common",
3134};
3135
3136static const struct qmp_phy_cfg ipq8074_pciephy_cfg = {
3137 .type = PHY_TYPE_PCIE,
3138 .nlanes = 1,
3139
3140 .serdes_tbl = ipq8074_pcie_serdes_tbl,
3141 .serdes_tbl_num = ARRAY_SIZE(ipq8074_pcie_serdes_tbl),
3142 .tx_tbl = ipq8074_pcie_tx_tbl,
3143 .tx_tbl_num = ARRAY_SIZE(ipq8074_pcie_tx_tbl),
3144 .rx_tbl = ipq8074_pcie_rx_tbl,
3145 .rx_tbl_num = ARRAY_SIZE(ipq8074_pcie_rx_tbl),
3146 .pcs_tbl = ipq8074_pcie_pcs_tbl,
3147 .pcs_tbl_num = ARRAY_SIZE(ipq8074_pcie_pcs_tbl),
3148 .clk_list = ipq8074_pciephy_clk_l,
3149 .num_clks = ARRAY_SIZE(ipq8074_pciephy_clk_l),
3150 .reset_list = ipq8074_pciephy_reset_l,
3151 .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l),
3152 .vreg_list = NULL,
3153 .num_vregs = 0,
3154 .regs = pciephy_regs_layout,
3155
3156 .start_ctrl = SERDES_START | PCS_START,
3157 .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
3158 .phy_status = PHYSTATUS,
3159
3160 .has_phy_com_ctrl = false,
3161 .has_lane_rst = false,
3162 .has_pwrdn_delay = true,
3163 .pwrdn_delay_min = 995,
3164 .pwrdn_delay_max = 1005,
3165};
3166
3167static const struct qmp_phy_cfg ipq6018_pciephy_cfg = {
3168 .type = PHY_TYPE_PCIE,
3169 .nlanes = 1,
3170
3171 .serdes_tbl = ipq6018_pcie_serdes_tbl,
3172 .serdes_tbl_num = ARRAY_SIZE(ipq6018_pcie_serdes_tbl),
3173 .tx_tbl = ipq6018_pcie_tx_tbl,
3174 .tx_tbl_num = ARRAY_SIZE(ipq6018_pcie_tx_tbl),
3175 .rx_tbl = ipq6018_pcie_rx_tbl,
3176 .rx_tbl_num = ARRAY_SIZE(ipq6018_pcie_rx_tbl),
3177 .pcs_tbl = ipq6018_pcie_pcs_tbl,
3178 .pcs_tbl_num = ARRAY_SIZE(ipq6018_pcie_pcs_tbl),
3179 .clk_list = ipq8074_pciephy_clk_l,
3180 .num_clks = ARRAY_SIZE(ipq8074_pciephy_clk_l),
3181 .reset_list = ipq8074_pciephy_reset_l,
3182 .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l),
3183 .vreg_list = NULL,
3184 .num_vregs = 0,
3185 .regs = ipq_pciephy_gen3_regs_layout,
3186
3187 .start_ctrl = SERDES_START | PCS_START,
3188 .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
3189
3190 .has_phy_com_ctrl = false,
3191 .has_lane_rst = false,
3192 .has_pwrdn_delay = true,
3193 .pwrdn_delay_min = 995,
3194 .pwrdn_delay_max = 1005,
3195};
3196
3197static const struct qmp_phy_cfg sdm845_qmp_pciephy_cfg = {
3198 .type = PHY_TYPE_PCIE,
3199 .nlanes = 1,
3200
3201 .serdes_tbl = sdm845_qmp_pcie_serdes_tbl,
3202 .serdes_tbl_num = ARRAY_SIZE(sdm845_qmp_pcie_serdes_tbl),
3203 .tx_tbl = sdm845_qmp_pcie_tx_tbl,
3204 .tx_tbl_num = ARRAY_SIZE(sdm845_qmp_pcie_tx_tbl),
3205 .rx_tbl = sdm845_qmp_pcie_rx_tbl,
3206 .rx_tbl_num = ARRAY_SIZE(sdm845_qmp_pcie_rx_tbl),
3207 .pcs_tbl = sdm845_qmp_pcie_pcs_tbl,
3208 .pcs_tbl_num = ARRAY_SIZE(sdm845_qmp_pcie_pcs_tbl),
3209 .pcs_misc_tbl = sdm845_qmp_pcie_pcs_misc_tbl,
3210 .pcs_misc_tbl_num = ARRAY_SIZE(sdm845_qmp_pcie_pcs_misc_tbl),
3211 .clk_list = sdm845_pciephy_clk_l,
3212 .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l),
3213 .reset_list = sdm845_pciephy_reset_l,
3214 .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
3215 .vreg_list = qmp_phy_vreg_l,
3216 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3217 .regs = sdm845_qmp_pciephy_regs_layout,
3218
3219 .start_ctrl = PCS_START | SERDES_START,
3220 .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
3221 .phy_status = PHYSTATUS,
3222
3223 .has_pwrdn_delay = true,
3224 .pwrdn_delay_min = 995,
3225 .pwrdn_delay_max = 1005,
3226};
3227
3228static const struct qmp_phy_cfg sdm845_qhp_pciephy_cfg = {
3229 .type = PHY_TYPE_PCIE,
3230 .nlanes = 1,
3231
3232 .serdes_tbl = sdm845_qhp_pcie_serdes_tbl,
3233 .serdes_tbl_num = ARRAY_SIZE(sdm845_qhp_pcie_serdes_tbl),
3234 .tx_tbl = sdm845_qhp_pcie_tx_tbl,
3235 .tx_tbl_num = ARRAY_SIZE(sdm845_qhp_pcie_tx_tbl),
3236 .rx_tbl = sdm845_qhp_pcie_rx_tbl,
3237 .rx_tbl_num = ARRAY_SIZE(sdm845_qhp_pcie_rx_tbl),
3238 .pcs_tbl = sdm845_qhp_pcie_pcs_tbl,
3239 .pcs_tbl_num = ARRAY_SIZE(sdm845_qhp_pcie_pcs_tbl),
3240 .clk_list = sdm845_pciephy_clk_l,
3241 .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l),
3242 .reset_list = sdm845_pciephy_reset_l,
3243 .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
3244 .vreg_list = qmp_phy_vreg_l,
3245 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3246 .regs = sdm845_qhp_pciephy_regs_layout,
3247
3248 .start_ctrl = PCS_START | SERDES_START,
3249 .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
3250 .phy_status = PHYSTATUS,
3251
3252 .has_pwrdn_delay = true,
3253 .pwrdn_delay_min = 995,
3254 .pwrdn_delay_max = 1005,
3255};
3256
3257static const struct qmp_phy_cfg sm8250_qmp_gen3x1_pciephy_cfg = {
3258 .type = PHY_TYPE_PCIE,
3259 .nlanes = 1,
3260
3261 .serdes_tbl = sm8250_qmp_pcie_serdes_tbl,
3262 .serdes_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_serdes_tbl),
3263 .serdes_tbl_sec = sm8250_qmp_gen3x1_pcie_serdes_tbl,
3264 .serdes_tbl_num_sec = ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_serdes_tbl),
3265 .tx_tbl = sm8250_qmp_pcie_tx_tbl,
3266 .tx_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_tx_tbl),
3267 .rx_tbl = sm8250_qmp_pcie_rx_tbl,
3268 .rx_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_rx_tbl),
3269 .rx_tbl_sec = sm8250_qmp_gen3x1_pcie_rx_tbl,
3270 .rx_tbl_num_sec = ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_rx_tbl),
3271 .pcs_tbl = sm8250_qmp_pcie_pcs_tbl,
3272 .pcs_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_pcs_tbl),
3273 .pcs_tbl_sec = sm8250_qmp_gen3x1_pcie_pcs_tbl,
3274 .pcs_tbl_num_sec = ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_pcs_tbl),
3275 .pcs_misc_tbl = sm8250_qmp_pcie_pcs_misc_tbl,
3276 .pcs_misc_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_pcs_misc_tbl),
3277 .pcs_misc_tbl_sec = sm8250_qmp_gen3x1_pcie_pcs_misc_tbl,
3278 .pcs_misc_tbl_num_sec = ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_pcs_misc_tbl),
3279 .clk_list = sdm845_pciephy_clk_l,
3280 .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l),
3281 .reset_list = sdm845_pciephy_reset_l,
3282 .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
3283 .vreg_list = qmp_phy_vreg_l,
3284 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3285 .regs = sm8250_pcie_regs_layout,
3286
3287 .start_ctrl = PCS_START | SERDES_START,
3288 .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
3289 .phy_status = PHYSTATUS,
3290
3291 .has_pwrdn_delay = true,
3292 .pwrdn_delay_min = 995,
3293 .pwrdn_delay_max = 1005,
3294};
3295
3296static const struct qmp_phy_cfg sm8250_qmp_gen3x2_pciephy_cfg = {
3297 .type = PHY_TYPE_PCIE,
3298 .nlanes = 2,
3299
3300 .serdes_tbl = sm8250_qmp_pcie_serdes_tbl,
3301 .serdes_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_serdes_tbl),
3302 .tx_tbl = sm8250_qmp_pcie_tx_tbl,
3303 .tx_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_tx_tbl),
3304 .tx_tbl_sec = sm8250_qmp_gen3x2_pcie_tx_tbl,
3305 .tx_tbl_num_sec = ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_tx_tbl),
3306 .rx_tbl = sm8250_qmp_pcie_rx_tbl,
3307 .rx_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_rx_tbl),
3308 .rx_tbl_sec = sm8250_qmp_gen3x2_pcie_rx_tbl,
3309 .rx_tbl_num_sec = ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_rx_tbl),
3310 .pcs_tbl = sm8250_qmp_pcie_pcs_tbl,
3311 .pcs_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_pcs_tbl),
3312 .pcs_tbl_sec = sm8250_qmp_gen3x2_pcie_pcs_tbl,
3313 .pcs_tbl_num_sec = ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_pcs_tbl),
3314 .pcs_misc_tbl = sm8250_qmp_pcie_pcs_misc_tbl,
3315 .pcs_misc_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_pcs_misc_tbl),
3316 .pcs_misc_tbl_sec = sm8250_qmp_gen3x2_pcie_pcs_misc_tbl,
3317 .pcs_misc_tbl_num_sec = ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_pcs_misc_tbl),
3318 .clk_list = sdm845_pciephy_clk_l,
3319 .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l),
3320 .reset_list = sdm845_pciephy_reset_l,
3321 .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
3322 .vreg_list = qmp_phy_vreg_l,
3323 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3324 .regs = sm8250_pcie_regs_layout,
3325
3326 .start_ctrl = PCS_START | SERDES_START,
3327 .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
3328 .phy_status = PHYSTATUS,
3329
3330 .is_dual_lane_phy = true,
3331 .has_pwrdn_delay = true,
3332 .pwrdn_delay_min = 995,
3333 .pwrdn_delay_max = 1005,
3334};
3335
3336static const struct qmp_phy_cfg qmp_v3_usb3phy_cfg = {
3337 .type = PHY_TYPE_USB3,
3338 .nlanes = 1,
3339
3340 .serdes_tbl = qmp_v3_usb3_serdes_tbl,
3341 .serdes_tbl_num = ARRAY_SIZE(qmp_v3_usb3_serdes_tbl),
3342 .tx_tbl = qmp_v3_usb3_tx_tbl,
3343 .tx_tbl_num = ARRAY_SIZE(qmp_v3_usb3_tx_tbl),
3344 .rx_tbl = qmp_v3_usb3_rx_tbl,
3345 .rx_tbl_num = ARRAY_SIZE(qmp_v3_usb3_rx_tbl),
3346 .pcs_tbl = qmp_v3_usb3_pcs_tbl,
3347 .pcs_tbl_num = ARRAY_SIZE(qmp_v3_usb3_pcs_tbl),
3348 .clk_list = qmp_v3_phy_clk_l,
3349 .num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
3350 .reset_list = msm8996_usb3phy_reset_l,
3351 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3352 .vreg_list = qmp_phy_vreg_l,
3353 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3354 .regs = qmp_v3_usb3phy_regs_layout,
3355
3356 .start_ctrl = SERDES_START | PCS_START,
3357 .pwrdn_ctrl = SW_PWRDN,
3358 .phy_status = PHYSTATUS,
3359
3360 .has_pwrdn_delay = true,
3361 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3362 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3363
3364 .has_phy_dp_com_ctrl = true,
3365 .is_dual_lane_phy = true,
3366};
3367
3368static const struct qmp_phy_cfg sc7180_usb3phy_cfg = {
3369 .type = PHY_TYPE_USB3,
3370 .nlanes = 1,
3371
3372 .serdes_tbl = qmp_v3_usb3_serdes_tbl,
3373 .serdes_tbl_num = ARRAY_SIZE(qmp_v3_usb3_serdes_tbl),
3374 .tx_tbl = qmp_v3_usb3_tx_tbl,
3375 .tx_tbl_num = ARRAY_SIZE(qmp_v3_usb3_tx_tbl),
3376 .rx_tbl = qmp_v3_usb3_rx_tbl,
3377 .rx_tbl_num = ARRAY_SIZE(qmp_v3_usb3_rx_tbl),
3378 .pcs_tbl = qmp_v3_usb3_pcs_tbl,
3379 .pcs_tbl_num = ARRAY_SIZE(qmp_v3_usb3_pcs_tbl),
3380 .clk_list = qmp_v3_phy_clk_l,
3381 .num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
3382 .reset_list = sc7180_usb3phy_reset_l,
3383 .num_resets = ARRAY_SIZE(sc7180_usb3phy_reset_l),
3384 .vreg_list = qmp_phy_vreg_l,
3385 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3386 .regs = qmp_v3_usb3phy_regs_layout,
3387
3388 .start_ctrl = SERDES_START | PCS_START,
3389 .pwrdn_ctrl = SW_PWRDN,
3390 .phy_status = PHYSTATUS,
3391
3392 .has_pwrdn_delay = true,
3393 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3394 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3395
3396 .has_phy_dp_com_ctrl = true,
3397 .is_dual_lane_phy = true,
3398};
3399
3400static const struct qmp_phy_cfg sc7180_dpphy_cfg = {
3401 .type = PHY_TYPE_DP,
3402 .nlanes = 1,
3403
3404 .serdes_tbl = qmp_v3_dp_serdes_tbl,
3405 .serdes_tbl_num = ARRAY_SIZE(qmp_v3_dp_serdes_tbl),
3406 .tx_tbl = qmp_v3_dp_tx_tbl,
3407 .tx_tbl_num = ARRAY_SIZE(qmp_v3_dp_tx_tbl),
3408
3409 .serdes_tbl_rbr = qmp_v3_dp_serdes_tbl_rbr,
3410 .serdes_tbl_rbr_num = ARRAY_SIZE(qmp_v3_dp_serdes_tbl_rbr),
3411 .serdes_tbl_hbr = qmp_v3_dp_serdes_tbl_hbr,
3412 .serdes_tbl_hbr_num = ARRAY_SIZE(qmp_v3_dp_serdes_tbl_hbr),
3413 .serdes_tbl_hbr2 = qmp_v3_dp_serdes_tbl_hbr2,
3414 .serdes_tbl_hbr2_num = ARRAY_SIZE(qmp_v3_dp_serdes_tbl_hbr2),
3415 .serdes_tbl_hbr3 = qmp_v3_dp_serdes_tbl_hbr3,
3416 .serdes_tbl_hbr3_num = ARRAY_SIZE(qmp_v3_dp_serdes_tbl_hbr3),
3417
3418 .clk_list = qmp_v3_phy_clk_l,
3419 .num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
3420 .reset_list = sc7180_usb3phy_reset_l,
3421 .num_resets = ARRAY_SIZE(sc7180_usb3phy_reset_l),
3422 .vreg_list = qmp_phy_vreg_l,
3423 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3424 .regs = qmp_v3_usb3phy_regs_layout,
3425
3426 .has_phy_dp_com_ctrl = true,
3427 .is_dual_lane_phy = true,
3428
3429 .dp_aux_init = qcom_qmp_v3_phy_dp_aux_init,
3430 .configure_dp_tx = qcom_qmp_v3_phy_configure_dp_tx,
3431 .configure_dp_phy = qcom_qmp_v3_phy_configure_dp_phy,
3432 .calibrate_dp_phy = qcom_qmp_v3_dp_phy_calibrate,
3433};
3434
3435static const struct qmp_phy_combo_cfg sc7180_usb3dpphy_cfg = {
3436 .usb_cfg = &sc7180_usb3phy_cfg,
3437 .dp_cfg = &sc7180_dpphy_cfg,
3438};
3439
3440static const struct qmp_phy_cfg qmp_v3_usb3_uniphy_cfg = {
3441 .type = PHY_TYPE_USB3,
3442 .nlanes = 1,
3443
3444 .serdes_tbl = qmp_v3_usb3_uniphy_serdes_tbl,
3445 .serdes_tbl_num = ARRAY_SIZE(qmp_v3_usb3_uniphy_serdes_tbl),
3446 .tx_tbl = qmp_v3_usb3_uniphy_tx_tbl,
3447 .tx_tbl_num = ARRAY_SIZE(qmp_v3_usb3_uniphy_tx_tbl),
3448 .rx_tbl = qmp_v3_usb3_uniphy_rx_tbl,
3449 .rx_tbl_num = ARRAY_SIZE(qmp_v3_usb3_uniphy_rx_tbl),
3450 .pcs_tbl = qmp_v3_usb3_uniphy_pcs_tbl,
3451 .pcs_tbl_num = ARRAY_SIZE(qmp_v3_usb3_uniphy_pcs_tbl),
3452 .clk_list = qmp_v3_phy_clk_l,
3453 .num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
3454 .reset_list = msm8996_usb3phy_reset_l,
3455 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3456 .vreg_list = qmp_phy_vreg_l,
3457 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3458 .regs = qmp_v3_usb3phy_regs_layout,
3459
3460 .start_ctrl = SERDES_START | PCS_START,
3461 .pwrdn_ctrl = SW_PWRDN,
3462 .phy_status = PHYSTATUS,
3463
3464 .has_pwrdn_delay = true,
3465 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3466 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3467};
3468
3469static const struct qmp_phy_cfg sdm845_ufsphy_cfg = {
3470 .type = PHY_TYPE_UFS,
3471 .nlanes = 2,
3472
3473 .serdes_tbl = sdm845_ufsphy_serdes_tbl,
3474 .serdes_tbl_num = ARRAY_SIZE(sdm845_ufsphy_serdes_tbl),
3475 .tx_tbl = sdm845_ufsphy_tx_tbl,
3476 .tx_tbl_num = ARRAY_SIZE(sdm845_ufsphy_tx_tbl),
3477 .rx_tbl = sdm845_ufsphy_rx_tbl,
3478 .rx_tbl_num = ARRAY_SIZE(sdm845_ufsphy_rx_tbl),
3479 .pcs_tbl = sdm845_ufsphy_pcs_tbl,
3480 .pcs_tbl_num = ARRAY_SIZE(sdm845_ufsphy_pcs_tbl),
3481 .clk_list = sdm845_ufs_phy_clk_l,
3482 .num_clks = ARRAY_SIZE(sdm845_ufs_phy_clk_l),
3483 .vreg_list = qmp_phy_vreg_l,
3484 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3485 .regs = sdm845_ufsphy_regs_layout,
3486
3487 .start_ctrl = SERDES_START,
3488 .pwrdn_ctrl = SW_PWRDN,
3489 .phy_status = PHYSTATUS,
3490
3491 .is_dual_lane_phy = true,
3492 .no_pcs_sw_reset = true,
3493};
3494
3495static const struct qmp_phy_cfg sm6115_ufsphy_cfg = {
3496 .type = PHY_TYPE_UFS,
3497 .nlanes = 1,
3498
3499 .serdes_tbl = sm6115_ufsphy_serdes_tbl,
3500 .serdes_tbl_num = ARRAY_SIZE(sm6115_ufsphy_serdes_tbl),
3501 .tx_tbl = sm6115_ufsphy_tx_tbl,
3502 .tx_tbl_num = ARRAY_SIZE(sm6115_ufsphy_tx_tbl),
3503 .rx_tbl = sm6115_ufsphy_rx_tbl,
3504 .rx_tbl_num = ARRAY_SIZE(sm6115_ufsphy_rx_tbl),
3505 .pcs_tbl = sm6115_ufsphy_pcs_tbl,
3506 .pcs_tbl_num = ARRAY_SIZE(sm6115_ufsphy_pcs_tbl),
3507 .clk_list = sdm845_ufs_phy_clk_l,
3508 .num_clks = ARRAY_SIZE(sdm845_ufs_phy_clk_l),
3509 .vreg_list = qmp_phy_vreg_l,
3510 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3511 .regs = sm6115_ufsphy_regs_layout,
3512
3513 .start_ctrl = SERDES_START,
3514 .pwrdn_ctrl = SW_PWRDN,
3515
3516 .is_dual_lane_phy = false,
3517 .no_pcs_sw_reset = true,
3518};
3519
3520static const struct qmp_phy_cfg msm8998_pciephy_cfg = {
3521 .type = PHY_TYPE_PCIE,
3522 .nlanes = 1,
3523
3524 .serdes_tbl = msm8998_pcie_serdes_tbl,
3525 .serdes_tbl_num = ARRAY_SIZE(msm8998_pcie_serdes_tbl),
3526 .tx_tbl = msm8998_pcie_tx_tbl,
3527 .tx_tbl_num = ARRAY_SIZE(msm8998_pcie_tx_tbl),
3528 .rx_tbl = msm8998_pcie_rx_tbl,
3529 .rx_tbl_num = ARRAY_SIZE(msm8998_pcie_rx_tbl),
3530 .pcs_tbl = msm8998_pcie_pcs_tbl,
3531 .pcs_tbl_num = ARRAY_SIZE(msm8998_pcie_pcs_tbl),
3532 .clk_list = msm8996_phy_clk_l,
3533 .num_clks = ARRAY_SIZE(msm8996_phy_clk_l),
3534 .reset_list = ipq8074_pciephy_reset_l,
3535 .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l),
3536 .vreg_list = qmp_phy_vreg_l,
3537 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3538 .regs = pciephy_regs_layout,
3539
3540 .start_ctrl = SERDES_START | PCS_START,
3541 .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
3542 .phy_status = PHYSTATUS,
3543};
3544
3545static const struct qmp_phy_cfg msm8998_usb3phy_cfg = {
3546 .type = PHY_TYPE_USB3,
3547 .nlanes = 1,
3548
3549 .serdes_tbl = msm8998_usb3_serdes_tbl,
3550 .serdes_tbl_num = ARRAY_SIZE(msm8998_usb3_serdes_tbl),
3551 .tx_tbl = msm8998_usb3_tx_tbl,
3552 .tx_tbl_num = ARRAY_SIZE(msm8998_usb3_tx_tbl),
3553 .rx_tbl = msm8998_usb3_rx_tbl,
3554 .rx_tbl_num = ARRAY_SIZE(msm8998_usb3_rx_tbl),
3555 .pcs_tbl = msm8998_usb3_pcs_tbl,
3556 .pcs_tbl_num = ARRAY_SIZE(msm8998_usb3_pcs_tbl),
3557 .clk_list = msm8996_phy_clk_l,
3558 .num_clks = ARRAY_SIZE(msm8996_phy_clk_l),
3559 .reset_list = msm8996_usb3phy_reset_l,
3560 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3561 .vreg_list = qmp_phy_vreg_l,
3562 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3563 .regs = qmp_v3_usb3phy_regs_layout,
3564
3565 .start_ctrl = SERDES_START | PCS_START,
3566 .pwrdn_ctrl = SW_PWRDN,
3567 .phy_status = PHYSTATUS,
3568
3569 .is_dual_lane_phy = true,
3570};
3571
3572static const struct qmp_phy_cfg sm8150_ufsphy_cfg = {
3573 .type = PHY_TYPE_UFS,
3574 .nlanes = 2,
3575
3576 .serdes_tbl = sm8150_ufsphy_serdes_tbl,
3577 .serdes_tbl_num = ARRAY_SIZE(sm8150_ufsphy_serdes_tbl),
3578 .tx_tbl = sm8150_ufsphy_tx_tbl,
3579 .tx_tbl_num = ARRAY_SIZE(sm8150_ufsphy_tx_tbl),
3580 .rx_tbl = sm8150_ufsphy_rx_tbl,
3581 .rx_tbl_num = ARRAY_SIZE(sm8150_ufsphy_rx_tbl),
3582 .pcs_tbl = sm8150_ufsphy_pcs_tbl,
3583 .pcs_tbl_num = ARRAY_SIZE(sm8150_ufsphy_pcs_tbl),
3584 .clk_list = sdm845_ufs_phy_clk_l,
3585 .num_clks = ARRAY_SIZE(sdm845_ufs_phy_clk_l),
3586 .vreg_list = qmp_phy_vreg_l,
3587 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3588 .regs = sm8150_ufsphy_regs_layout,
3589
3590 .start_ctrl = SERDES_START,
3591 .pwrdn_ctrl = SW_PWRDN,
3592 .phy_status = PHYSTATUS,
3593
3594 .is_dual_lane_phy = true,
3595};
3596
3597static const struct qmp_phy_cfg sm8150_usb3phy_cfg = {
3598 .type = PHY_TYPE_USB3,
3599 .nlanes = 1,
3600
3601 .serdes_tbl = sm8150_usb3_serdes_tbl,
3602 .serdes_tbl_num = ARRAY_SIZE(sm8150_usb3_serdes_tbl),
3603 .tx_tbl = sm8150_usb3_tx_tbl,
3604 .tx_tbl_num = ARRAY_SIZE(sm8150_usb3_tx_tbl),
3605 .rx_tbl = sm8150_usb3_rx_tbl,
3606 .rx_tbl_num = ARRAY_SIZE(sm8150_usb3_rx_tbl),
3607 .pcs_tbl = sm8150_usb3_pcs_tbl,
3608 .pcs_tbl_num = ARRAY_SIZE(sm8150_usb3_pcs_tbl),
3609 .clk_list = qmp_v4_phy_clk_l,
3610 .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
3611 .reset_list = msm8996_usb3phy_reset_l,
3612 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3613 .vreg_list = qmp_phy_vreg_l,
3614 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3615 .regs = qmp_v4_usb3phy_regs_layout,
3616
3617 .start_ctrl = SERDES_START | PCS_START,
3618 .pwrdn_ctrl = SW_PWRDN,
3619 .phy_status = PHYSTATUS,
3620
3621
3622 .has_pwrdn_delay = true,
3623 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3624 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3625
3626 .has_phy_dp_com_ctrl = true,
3627 .is_dual_lane_phy = true,
3628};
3629
3630static const struct qmp_phy_cfg sc8180x_pciephy_cfg = {
3631 .type = PHY_TYPE_PCIE,
3632 .nlanes = 1,
3633
3634 .serdes_tbl = sc8180x_qmp_pcie_serdes_tbl,
3635 .serdes_tbl_num = ARRAY_SIZE(sm8250_qmp_pcie_serdes_tbl),
3636 .tx_tbl = sc8180x_qmp_pcie_tx_tbl,
3637 .tx_tbl_num = ARRAY_SIZE(sc8180x_qmp_pcie_tx_tbl),
3638 .rx_tbl = sc8180x_qmp_pcie_rx_tbl,
3639 .rx_tbl_num = ARRAY_SIZE(sc8180x_qmp_pcie_rx_tbl),
3640 .pcs_tbl = sc8180x_qmp_pcie_pcs_tbl,
3641 .pcs_tbl_num = ARRAY_SIZE(sc8180x_qmp_pcie_pcs_tbl),
3642 .pcs_misc_tbl = sc8180x_qmp_pcie_pcs_misc_tbl,
3643 .pcs_misc_tbl_num = ARRAY_SIZE(sc8180x_qmp_pcie_pcs_misc_tbl),
3644 .clk_list = sdm845_pciephy_clk_l,
3645 .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l),
3646 .reset_list = sdm845_pciephy_reset_l,
3647 .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
3648 .vreg_list = qmp_phy_vreg_l,
3649 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3650 .regs = sm8250_pcie_regs_layout,
3651
3652 .start_ctrl = PCS_START | SERDES_START,
3653 .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL,
3654
3655 .has_pwrdn_delay = true,
3656 .pwrdn_delay_min = 995,
3657 .pwrdn_delay_max = 1005,
3658};
3659
3660static const struct qmp_phy_cfg sc8180x_dpphy_cfg = {
3661 .type = PHY_TYPE_DP,
3662 .nlanes = 1,
3663
3664 .serdes_tbl = qmp_v4_dp_serdes_tbl,
3665 .serdes_tbl_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl),
3666 .tx_tbl = qmp_v4_dp_tx_tbl,
3667 .tx_tbl_num = ARRAY_SIZE(qmp_v4_dp_tx_tbl),
3668
3669 .serdes_tbl_rbr = qmp_v4_dp_serdes_tbl_rbr,
3670 .serdes_tbl_rbr_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl_rbr),
3671 .serdes_tbl_hbr = qmp_v4_dp_serdes_tbl_hbr,
3672 .serdes_tbl_hbr_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl_hbr),
3673 .serdes_tbl_hbr2 = qmp_v4_dp_serdes_tbl_hbr2,
3674 .serdes_tbl_hbr2_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl_hbr2),
3675 .serdes_tbl_hbr3 = qmp_v4_dp_serdes_tbl_hbr3,
3676 .serdes_tbl_hbr3_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl_hbr3),
3677
3678 .clk_list = qmp_v3_phy_clk_l,
3679 .num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
3680 .reset_list = sc7180_usb3phy_reset_l,
3681 .num_resets = ARRAY_SIZE(sc7180_usb3phy_reset_l),
3682 .vreg_list = qmp_phy_vreg_l,
3683 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3684 .regs = qmp_v3_usb3phy_regs_layout,
3685
3686 .has_phy_dp_com_ctrl = true,
3687 .is_dual_lane_phy = true,
3688
3689 .dp_aux_init = qcom_qmp_v4_phy_dp_aux_init,
3690 .configure_dp_tx = qcom_qmp_v4_phy_configure_dp_tx,
3691 .configure_dp_phy = qcom_qmp_v4_phy_configure_dp_phy,
3692 .calibrate_dp_phy = qcom_qmp_v4_dp_phy_calibrate,
3693};
3694
3695static const struct qmp_phy_combo_cfg sc8180x_usb3dpphy_cfg = {
3696 .usb_cfg = &sm8150_usb3phy_cfg,
3697 .dp_cfg = &sc8180x_dpphy_cfg,
3698};
3699
3700static const struct qmp_phy_cfg sm8150_usb3_uniphy_cfg = {
3701 .type = PHY_TYPE_USB3,
3702 .nlanes = 1,
3703
3704 .serdes_tbl = sm8150_usb3_uniphy_serdes_tbl,
3705 .serdes_tbl_num = ARRAY_SIZE(sm8150_usb3_uniphy_serdes_tbl),
3706 .tx_tbl = sm8150_usb3_uniphy_tx_tbl,
3707 .tx_tbl_num = ARRAY_SIZE(sm8150_usb3_uniphy_tx_tbl),
3708 .rx_tbl = sm8150_usb3_uniphy_rx_tbl,
3709 .rx_tbl_num = ARRAY_SIZE(sm8150_usb3_uniphy_rx_tbl),
3710 .pcs_tbl = sm8150_usb3_uniphy_pcs_tbl,
3711 .pcs_tbl_num = ARRAY_SIZE(sm8150_usb3_uniphy_pcs_tbl),
3712 .clk_list = qmp_v4_phy_clk_l,
3713 .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
3714 .reset_list = msm8996_usb3phy_reset_l,
3715 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3716 .vreg_list = qmp_phy_vreg_l,
3717 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3718 .regs = qmp_v4_usb3_uniphy_regs_layout,
3719
3720 .start_ctrl = SERDES_START | PCS_START,
3721 .pwrdn_ctrl = SW_PWRDN,
3722 .phy_status = PHYSTATUS,
3723
3724 .has_pwrdn_delay = true,
3725 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3726 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3727};
3728
3729static const struct qmp_phy_cfg sm8250_usb3phy_cfg = {
3730 .type = PHY_TYPE_USB3,
3731 .nlanes = 1,
3732
3733 .serdes_tbl = sm8150_usb3_serdes_tbl,
3734 .serdes_tbl_num = ARRAY_SIZE(sm8150_usb3_serdes_tbl),
3735 .tx_tbl = sm8250_usb3_tx_tbl,
3736 .tx_tbl_num = ARRAY_SIZE(sm8250_usb3_tx_tbl),
3737 .rx_tbl = sm8250_usb3_rx_tbl,
3738 .rx_tbl_num = ARRAY_SIZE(sm8250_usb3_rx_tbl),
3739 .pcs_tbl = sm8250_usb3_pcs_tbl,
3740 .pcs_tbl_num = ARRAY_SIZE(sm8250_usb3_pcs_tbl),
3741 .clk_list = qmp_v4_sm8250_usbphy_clk_l,
3742 .num_clks = ARRAY_SIZE(qmp_v4_sm8250_usbphy_clk_l),
3743 .reset_list = msm8996_usb3phy_reset_l,
3744 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3745 .vreg_list = qmp_phy_vreg_l,
3746 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3747 .regs = qmp_v4_usb3phy_regs_layout,
3748
3749 .start_ctrl = SERDES_START | PCS_START,
3750 .pwrdn_ctrl = SW_PWRDN,
3751 .phy_status = PHYSTATUS,
3752
3753 .has_pwrdn_delay = true,
3754 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3755 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3756
3757 .has_phy_dp_com_ctrl = true,
3758 .is_dual_lane_phy = true,
3759};
3760
3761static const struct qmp_phy_cfg sm8250_usb3_uniphy_cfg = {
3762 .type = PHY_TYPE_USB3,
3763 .nlanes = 1,
3764
3765 .serdes_tbl = sm8150_usb3_uniphy_serdes_tbl,
3766 .serdes_tbl_num = ARRAY_SIZE(sm8150_usb3_uniphy_serdes_tbl),
3767 .tx_tbl = sm8250_usb3_uniphy_tx_tbl,
3768 .tx_tbl_num = ARRAY_SIZE(sm8250_usb3_uniphy_tx_tbl),
3769 .rx_tbl = sm8250_usb3_uniphy_rx_tbl,
3770 .rx_tbl_num = ARRAY_SIZE(sm8250_usb3_uniphy_rx_tbl),
3771 .pcs_tbl = sm8250_usb3_uniphy_pcs_tbl,
3772 .pcs_tbl_num = ARRAY_SIZE(sm8250_usb3_uniphy_pcs_tbl),
3773 .clk_list = qmp_v4_phy_clk_l,
3774 .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
3775 .reset_list = msm8996_usb3phy_reset_l,
3776 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3777 .vreg_list = qmp_phy_vreg_l,
3778 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3779 .regs = qmp_v4_usb3_uniphy_regs_layout,
3780
3781 .start_ctrl = SERDES_START | PCS_START,
3782 .pwrdn_ctrl = SW_PWRDN,
3783 .phy_status = PHYSTATUS,
3784
3785 .has_pwrdn_delay = true,
3786 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3787 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3788};
3789
3790static const struct qmp_phy_cfg sm8250_dpphy_cfg = {
3791 .type = PHY_TYPE_DP,
3792 .nlanes = 1,
3793
3794 .serdes_tbl = qmp_v4_dp_serdes_tbl,
3795 .serdes_tbl_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl),
3796 .tx_tbl = qmp_v4_dp_tx_tbl,
3797 .tx_tbl_num = ARRAY_SIZE(qmp_v4_dp_tx_tbl),
3798
3799 .serdes_tbl_rbr = qmp_v4_dp_serdes_tbl_rbr,
3800 .serdes_tbl_rbr_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl_rbr),
3801 .serdes_tbl_hbr = qmp_v4_dp_serdes_tbl_hbr,
3802 .serdes_tbl_hbr_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl_hbr),
3803 .serdes_tbl_hbr2 = qmp_v4_dp_serdes_tbl_hbr2,
3804 .serdes_tbl_hbr2_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl_hbr2),
3805 .serdes_tbl_hbr3 = qmp_v4_dp_serdes_tbl_hbr3,
3806 .serdes_tbl_hbr3_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl_hbr3),
3807
3808 .clk_list = qmp_v4_phy_clk_l,
3809 .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
3810 .reset_list = msm8996_usb3phy_reset_l,
3811 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3812 .vreg_list = qmp_phy_vreg_l,
3813 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3814 .regs = qmp_v4_usb3phy_regs_layout,
3815
3816 .has_phy_dp_com_ctrl = true,
3817 .is_dual_lane_phy = true,
3818
3819 .dp_aux_init = qcom_qmp_v4_phy_dp_aux_init,
3820 .configure_dp_tx = qcom_qmp_v4_phy_configure_dp_tx,
3821 .configure_dp_phy = qcom_qmp_v4_phy_configure_dp_phy,
3822 .calibrate_dp_phy = qcom_qmp_v4_dp_phy_calibrate,
3823};
3824
3825static const struct qmp_phy_combo_cfg sm8250_usb3dpphy_cfg = {
3826 .usb_cfg = &sm8250_usb3phy_cfg,
3827 .dp_cfg = &sm8250_dpphy_cfg,
3828};
3829
3830static const struct qmp_phy_cfg sdx55_usb3_uniphy_cfg = {
3831 .type = PHY_TYPE_USB3,
3832 .nlanes = 1,
3833
3834 .serdes_tbl = sm8150_usb3_uniphy_serdes_tbl,
3835 .serdes_tbl_num = ARRAY_SIZE(sm8150_usb3_uniphy_serdes_tbl),
3836 .tx_tbl = sdx55_usb3_uniphy_tx_tbl,
3837 .tx_tbl_num = ARRAY_SIZE(sdx55_usb3_uniphy_tx_tbl),
3838 .rx_tbl = sdx55_usb3_uniphy_rx_tbl,
3839 .rx_tbl_num = ARRAY_SIZE(sdx55_usb3_uniphy_rx_tbl),
3840 .pcs_tbl = sm8250_usb3_uniphy_pcs_tbl,
3841 .pcs_tbl_num = ARRAY_SIZE(sm8250_usb3_uniphy_pcs_tbl),
3842 .clk_list = qmp_v4_sdx55_usbphy_clk_l,
3843 .num_clks = ARRAY_SIZE(qmp_v4_sdx55_usbphy_clk_l),
3844 .reset_list = msm8996_usb3phy_reset_l,
3845 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3846 .vreg_list = qmp_phy_vreg_l,
3847 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3848 .regs = qmp_v4_usb3_uniphy_regs_layout,
3849
3850 .start_ctrl = SERDES_START | PCS_START,
3851 .pwrdn_ctrl = SW_PWRDN,
3852 .phy_status = PHYSTATUS,
3853
3854 .has_pwrdn_delay = true,
3855 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3856 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3857};
3858
3859static const struct qmp_phy_cfg sdx55_qmp_pciephy_cfg = {
3860 .type = PHY_TYPE_PCIE,
3861 .nlanes = 2,
3862
3863 .serdes_tbl = sdx55_qmp_pcie_serdes_tbl,
3864 .serdes_tbl_num = ARRAY_SIZE(sdx55_qmp_pcie_serdes_tbl),
3865 .tx_tbl = sdx55_qmp_pcie_tx_tbl,
3866 .tx_tbl_num = ARRAY_SIZE(sdx55_qmp_pcie_tx_tbl),
3867 .rx_tbl = sdx55_qmp_pcie_rx_tbl,
3868 .rx_tbl_num = ARRAY_SIZE(sdx55_qmp_pcie_rx_tbl),
3869 .pcs_tbl = sdx55_qmp_pcie_pcs_tbl,
3870 .pcs_tbl_num = ARRAY_SIZE(sdx55_qmp_pcie_pcs_tbl),
3871 .pcs_misc_tbl = sdx55_qmp_pcie_pcs_misc_tbl,
3872 .pcs_misc_tbl_num = ARRAY_SIZE(sdx55_qmp_pcie_pcs_misc_tbl),
3873 .clk_list = sdm845_pciephy_clk_l,
3874 .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l),
3875 .reset_list = sdm845_pciephy_reset_l,
3876 .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l),
3877 .vreg_list = qmp_phy_vreg_l,
3878 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3879 .regs = sm8250_pcie_regs_layout,
3880
3881 .start_ctrl = PCS_START | SERDES_START,
3882 .pwrdn_ctrl = SW_PWRDN,
3883 .phy_status = PHYSTATUS_4_20,
3884
3885 .is_dual_lane_phy = true,
3886 .has_pwrdn_delay = true,
3887 .pwrdn_delay_min = 995,
3888 .pwrdn_delay_max = 1005,
3889};
3890
3891static const struct qmp_phy_cfg sm8350_ufsphy_cfg = {
3892 .type = PHY_TYPE_UFS,
3893 .nlanes = 2,
3894
3895 .serdes_tbl = sm8350_ufsphy_serdes_tbl,
3896 .serdes_tbl_num = ARRAY_SIZE(sm8350_ufsphy_serdes_tbl),
3897 .tx_tbl = sm8350_ufsphy_tx_tbl,
3898 .tx_tbl_num = ARRAY_SIZE(sm8350_ufsphy_tx_tbl),
3899 .rx_tbl = sm8350_ufsphy_rx_tbl,
3900 .rx_tbl_num = ARRAY_SIZE(sm8350_ufsphy_rx_tbl),
3901 .pcs_tbl = sm8350_ufsphy_pcs_tbl,
3902 .pcs_tbl_num = ARRAY_SIZE(sm8350_ufsphy_pcs_tbl),
3903 .clk_list = sdm845_ufs_phy_clk_l,
3904 .num_clks = ARRAY_SIZE(sdm845_ufs_phy_clk_l),
3905 .vreg_list = qmp_phy_vreg_l,
3906 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3907 .regs = sm8150_ufsphy_regs_layout,
3908
3909 .start_ctrl = SERDES_START,
3910 .pwrdn_ctrl = SW_PWRDN,
3911 .phy_status = PHYSTATUS,
3912
3913 .is_dual_lane_phy = true,
3914};
3915
3916static const struct qmp_phy_cfg sm8350_usb3phy_cfg = {
3917 .type = PHY_TYPE_USB3,
3918 .nlanes = 1,
3919
3920 .serdes_tbl = sm8150_usb3_serdes_tbl,
3921 .serdes_tbl_num = ARRAY_SIZE(sm8150_usb3_serdes_tbl),
3922 .tx_tbl = sm8350_usb3_tx_tbl,
3923 .tx_tbl_num = ARRAY_SIZE(sm8350_usb3_tx_tbl),
3924 .rx_tbl = sm8350_usb3_rx_tbl,
3925 .rx_tbl_num = ARRAY_SIZE(sm8350_usb3_rx_tbl),
3926 .pcs_tbl = sm8350_usb3_pcs_tbl,
3927 .pcs_tbl_num = ARRAY_SIZE(sm8350_usb3_pcs_tbl),
3928 .clk_list = qmp_v4_sm8250_usbphy_clk_l,
3929 .num_clks = ARRAY_SIZE(qmp_v4_sm8250_usbphy_clk_l),
3930 .reset_list = msm8996_usb3phy_reset_l,
3931 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3932 .vreg_list = qmp_phy_vreg_l,
3933 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3934 .regs = qmp_v4_usb3phy_regs_layout,
3935
3936 .start_ctrl = SERDES_START | PCS_START,
3937 .pwrdn_ctrl = SW_PWRDN,
3938 .phy_status = PHYSTATUS,
3939
3940 .has_pwrdn_delay = true,
3941 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3942 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3943
3944 .has_phy_dp_com_ctrl = true,
3945 .is_dual_lane_phy = true,
3946};
3947
3948static const struct qmp_phy_cfg sm8350_usb3_uniphy_cfg = {
3949 .type = PHY_TYPE_USB3,
3950 .nlanes = 1,
3951
3952 .serdes_tbl = sm8150_usb3_uniphy_serdes_tbl,
3953 .serdes_tbl_num = ARRAY_SIZE(sm8150_usb3_uniphy_serdes_tbl),
3954 .tx_tbl = sm8350_usb3_uniphy_tx_tbl,
3955 .tx_tbl_num = ARRAY_SIZE(sm8350_usb3_uniphy_tx_tbl),
3956 .rx_tbl = sm8350_usb3_uniphy_rx_tbl,
3957 .rx_tbl_num = ARRAY_SIZE(sm8350_usb3_uniphy_rx_tbl),
3958 .pcs_tbl = sm8350_usb3_uniphy_pcs_tbl,
3959 .pcs_tbl_num = ARRAY_SIZE(sm8350_usb3_uniphy_pcs_tbl),
3960 .clk_list = qmp_v4_phy_clk_l,
3961 .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
3962 .reset_list = msm8996_usb3phy_reset_l,
3963 .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
3964 .vreg_list = qmp_phy_vreg_l,
3965 .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
3966 .regs = sm8350_usb3_uniphy_regs_layout,
3967
3968 .start_ctrl = SERDES_START | PCS_START,
3969 .pwrdn_ctrl = SW_PWRDN,
3970 .phy_status = PHYSTATUS,
3971
3972 .has_pwrdn_delay = true,
3973 .pwrdn_delay_min = POWER_DOWN_DELAY_US_MIN,
3974 .pwrdn_delay_max = POWER_DOWN_DELAY_US_MAX,
3975};
3976
3977static void qcom_qmp_phy_configure_lane(void __iomem *base,
3978 const unsigned int *regs,
3979 const struct qmp_phy_init_tbl tbl[],
3980 int num,
3981 u8 lane_mask)
3982{
3983 int i;
3984 const struct qmp_phy_init_tbl *t = tbl;
3985
3986 if (!t)
3987 return;
3988
3989 for (i = 0; i < num; i++, t++) {
3990 if (!(t->lane_mask & lane_mask))
3991 continue;
3992
3993 if (t->in_layout)
3994 writel(t->val, base + regs[t->offset]);
3995 else
3996 writel(t->val, base + t->offset);
3997 }
3998}
3999
4000static void qcom_qmp_phy_configure(void __iomem *base,
4001 const unsigned int *regs,
4002 const struct qmp_phy_init_tbl tbl[],
4003 int num)
4004{
4005 qcom_qmp_phy_configure_lane(base, regs, tbl, num, 0xff);
4006}
4007
4008static int qcom_qmp_phy_serdes_init(struct qmp_phy *qphy)
4009{
4010 struct qcom_qmp *qmp = qphy->qmp;
4011 const struct qmp_phy_cfg *cfg = qphy->cfg;
4012 void __iomem *serdes = qphy->serdes;
4013 const struct phy_configure_opts_dp *dp_opts = &qphy->dp_opts;
4014 const struct qmp_phy_init_tbl *serdes_tbl = cfg->serdes_tbl;
4015 int serdes_tbl_num = cfg->serdes_tbl_num;
4016 int ret;
4017
4018 qcom_qmp_phy_configure(serdes, cfg->regs, serdes_tbl, serdes_tbl_num);
4019 if (cfg->serdes_tbl_sec)
4020 qcom_qmp_phy_configure(serdes, cfg->regs, cfg->serdes_tbl_sec,
4021 cfg->serdes_tbl_num_sec);
4022
4023 if (cfg->type == PHY_TYPE_DP) {
4024 switch (dp_opts->link_rate) {
4025 case 1620:
4026 qcom_qmp_phy_configure(serdes, cfg->regs,
4027 cfg->serdes_tbl_rbr,
4028 cfg->serdes_tbl_rbr_num);
4029 break;
4030 case 2700:
4031 qcom_qmp_phy_configure(serdes, cfg->regs,
4032 cfg->serdes_tbl_hbr,
4033 cfg->serdes_tbl_hbr_num);
4034 break;
4035 case 5400:
4036 qcom_qmp_phy_configure(serdes, cfg->regs,
4037 cfg->serdes_tbl_hbr2,
4038 cfg->serdes_tbl_hbr2_num);
4039 break;
4040 case 8100:
4041 qcom_qmp_phy_configure(serdes, cfg->regs,
4042 cfg->serdes_tbl_hbr3,
4043 cfg->serdes_tbl_hbr3_num);
4044 break;
4045 default:
4046
4047 return -EINVAL;
4048 }
4049 }
4050
4051
4052 if (cfg->has_phy_com_ctrl) {
4053 void __iomem *status;
4054 unsigned int mask, val;
4055
4056 qphy_clrbits(serdes, cfg->regs[QPHY_COM_SW_RESET], SW_RESET);
4057 qphy_setbits(serdes, cfg->regs[QPHY_COM_START_CONTROL],
4058 SERDES_START | PCS_START);
4059
4060 status = serdes + cfg->regs[QPHY_COM_PCS_READY_STATUS];
4061 mask = cfg->mask_com_pcs_ready;
4062
4063 ret = readl_poll_timeout(status, val, (val & mask), 10,
4064 PHY_INIT_COMPLETE_TIMEOUT);
4065 if (ret) {
4066 dev_err(qmp->dev,
4067 "phy common block init timed-out\n");
4068 return ret;
4069 }
4070 }
4071
4072 return 0;
4073}
4074
4075static void qcom_qmp_v3_phy_dp_aux_init(struct qmp_phy *qphy)
4076{
4077 writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN |
4078 DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN,
4079 qphy->pcs + QSERDES_DP_PHY_PD_CTL);
4080
4081
4082 writel(QSERDES_V3_COM_BIAS_EN | QSERDES_V3_COM_BIAS_EN_MUX |
4083 QSERDES_V3_COM_CLKBUF_L_EN | QSERDES_V3_COM_EN_SYSCLK_TX_SEL,
4084 qphy->serdes + QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN);
4085
4086 writel(DP_PHY_PD_CTL_PSR_PWRDN, qphy->pcs + QSERDES_DP_PHY_PD_CTL);
4087
4088 writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN |
4089 DP_PHY_PD_CTL_LANE_0_1_PWRDN |
4090 DP_PHY_PD_CTL_LANE_2_3_PWRDN | DP_PHY_PD_CTL_PLL_PWRDN |
4091 DP_PHY_PD_CTL_DP_CLAMP_EN,
4092 qphy->pcs + QSERDES_DP_PHY_PD_CTL);
4093
4094 writel(QSERDES_V3_COM_BIAS_EN |
4095 QSERDES_V3_COM_BIAS_EN_MUX | QSERDES_V3_COM_CLKBUF_R_EN |
4096 QSERDES_V3_COM_CLKBUF_L_EN | QSERDES_V3_COM_EN_SYSCLK_TX_SEL |
4097 QSERDES_V3_COM_CLKBUF_RX_DRIVE_L,
4098 qphy->serdes + QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN);
4099
4100 writel(0x00, qphy->pcs + QSERDES_DP_PHY_AUX_CFG0);
4101 writel(0x13, qphy->pcs + QSERDES_DP_PHY_AUX_CFG1);
4102 writel(0x24, qphy->pcs + QSERDES_DP_PHY_AUX_CFG2);
4103 writel(0x00, qphy->pcs + QSERDES_DP_PHY_AUX_CFG3);
4104 writel(0x0a, qphy->pcs + QSERDES_DP_PHY_AUX_CFG4);
4105 writel(0x26, qphy->pcs + QSERDES_DP_PHY_AUX_CFG5);
4106 writel(0x0a, qphy->pcs + QSERDES_DP_PHY_AUX_CFG6);
4107 writel(0x03, qphy->pcs + QSERDES_DP_PHY_AUX_CFG7);
4108 writel(0xbb, qphy->pcs + QSERDES_DP_PHY_AUX_CFG8);
4109 writel(0x03, qphy->pcs + QSERDES_DP_PHY_AUX_CFG9);
4110 qphy->dp_aux_cfg = 0;
4111
4112 writel(PHY_AUX_STOP_ERR_MASK | PHY_AUX_DEC_ERR_MASK |
4113 PHY_AUX_SYNC_ERR_MASK | PHY_AUX_ALIGN_ERR_MASK |
4114 PHY_AUX_REQ_ERR_MASK,
4115 qphy->pcs + QSERDES_V3_DP_PHY_AUX_INTERRUPT_MASK);
4116}
4117
4118static const u8 qmp_dp_v3_pre_emphasis_hbr3_hbr2[4][4] = {
4119 { 0x00, 0x0c, 0x15, 0x1a },
4120 { 0x02, 0x0e, 0x16, 0xff },
4121 { 0x02, 0x11, 0xff, 0xff },
4122 { 0x04, 0xff, 0xff, 0xff }
4123};
4124
4125static const u8 qmp_dp_v3_voltage_swing_hbr3_hbr2[4][4] = {
4126 { 0x02, 0x12, 0x16, 0x1a },
4127 { 0x09, 0x19, 0x1f, 0xff },
4128 { 0x10, 0x1f, 0xff, 0xff },
4129 { 0x1f, 0xff, 0xff, 0xff }
4130};
4131
4132static const u8 qmp_dp_v3_pre_emphasis_hbr_rbr[4][4] = {
4133 { 0x00, 0x0c, 0x14, 0x19 },
4134 { 0x00, 0x0b, 0x12, 0xff },
4135 { 0x00, 0x0b, 0xff, 0xff },
4136 { 0x04, 0xff, 0xff, 0xff }
4137};
4138
4139static const u8 qmp_dp_v3_voltage_swing_hbr_rbr[4][4] = {
4140 { 0x08, 0x0f, 0x16, 0x1f },
4141 { 0x11, 0x1e, 0x1f, 0xff },
4142 { 0x19, 0x1f, 0xff, 0xff },
4143 { 0x1f, 0xff, 0xff, 0xff }
4144};
4145
4146static int qcom_qmp_phy_configure_dp_swing(struct qmp_phy *qphy,
4147 unsigned int drv_lvl_reg, unsigned int emp_post_reg)
4148{
4149 const struct phy_configure_opts_dp *dp_opts = &qphy->dp_opts;
4150 unsigned int v_level = 0, p_level = 0;
4151 u8 voltage_swing_cfg, pre_emphasis_cfg;
4152 int i;
4153
4154 for (i = 0; i < dp_opts->lanes; i++) {
4155 v_level = max(v_level, dp_opts->voltage[i]);
4156 p_level = max(p_level, dp_opts->pre[i]);
4157 }
4158
4159 if (dp_opts->link_rate <= 2700) {
4160 voltage_swing_cfg = qmp_dp_v3_voltage_swing_hbr_rbr[v_level][p_level];
4161 pre_emphasis_cfg = qmp_dp_v3_pre_emphasis_hbr_rbr[v_level][p_level];
4162 } else {
4163 voltage_swing_cfg = qmp_dp_v3_voltage_swing_hbr3_hbr2[v_level][p_level];
4164 pre_emphasis_cfg = qmp_dp_v3_pre_emphasis_hbr3_hbr2[v_level][p_level];
4165 }
4166
4167
4168 if (voltage_swing_cfg == 0xFF && pre_emphasis_cfg == 0xFF)
4169 return -EINVAL;
4170
4171
4172 voltage_swing_cfg |= DP_PHY_TXn_TX_DRV_LVL_MUX_EN;
4173 pre_emphasis_cfg |= DP_PHY_TXn_TX_EMP_POST1_LVL_MUX_EN;
4174
4175 writel(voltage_swing_cfg, qphy->tx + drv_lvl_reg);
4176 writel(pre_emphasis_cfg, qphy->tx + emp_post_reg);
4177 writel(voltage_swing_cfg, qphy->tx2 + drv_lvl_reg);
4178 writel(pre_emphasis_cfg, qphy->tx2 + emp_post_reg);
4179
4180 return 0;
4181}
4182
4183static void qcom_qmp_v3_phy_configure_dp_tx(struct qmp_phy *qphy)
4184{
4185 const struct phy_configure_opts_dp *dp_opts = &qphy->dp_opts;
4186 u32 bias_en, drvr_en;
4187
4188 if (qcom_qmp_phy_configure_dp_swing(qphy,
4189 QSERDES_V3_TX_TX_DRV_LVL,
4190 QSERDES_V3_TX_TX_EMP_POST1_LVL) < 0)
4191 return;
4192
4193 if (dp_opts->lanes == 1) {
4194 bias_en = 0x3e;
4195 drvr_en = 0x13;
4196 } else {
4197 bias_en = 0x3f;
4198 drvr_en = 0x10;
4199 }
4200
4201 writel(drvr_en, qphy->tx + QSERDES_V3_TX_HIGHZ_DRVR_EN);
4202 writel(bias_en, qphy->tx + QSERDES_V3_TX_TRANSCEIVER_BIAS_EN);
4203 writel(drvr_en, qphy->tx2 + QSERDES_V3_TX_HIGHZ_DRVR_EN);
4204 writel(bias_en, qphy->tx2 + QSERDES_V3_TX_TRANSCEIVER_BIAS_EN);
4205}
4206
4207static bool qcom_qmp_phy_configure_dp_mode(struct qmp_phy *qphy)
4208{
4209 u32 val;
4210 bool reverse = false;
4211
4212 val = DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN |
4213 DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN;
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229 val |= DP_PHY_PD_CTL_LANE_2_3_PWRDN;
4230 writel(val, qphy->pcs + QSERDES_DP_PHY_PD_CTL);
4231
4232 writel(0x5c, qphy->pcs + QSERDES_DP_PHY_MODE);
4233
4234 return reverse;
4235}
4236
4237static int qcom_qmp_v3_phy_configure_dp_phy(struct qmp_phy *qphy)
4238{
4239 const struct qmp_phy_dp_clks *dp_clks = qphy->dp_clks;
4240 const struct phy_configure_opts_dp *dp_opts = &qphy->dp_opts;
4241 u32 phy_vco_div, status;
4242 unsigned long pixel_freq;
4243
4244 qcom_qmp_phy_configure_dp_mode(qphy);
4245
4246 writel(0x05, qphy->pcs + QSERDES_V3_DP_PHY_TX0_TX1_LANE_CTL);
4247 writel(0x05, qphy->pcs + QSERDES_V3_DP_PHY_TX2_TX3_LANE_CTL);
4248
4249 switch (dp_opts->link_rate) {
4250 case 1620:
4251 phy_vco_div = 0x1;
4252 pixel_freq = 1620000000UL / 2;
4253 break;
4254 case 2700:
4255 phy_vco_div = 0x1;
4256 pixel_freq = 2700000000UL / 2;
4257 break;
4258 case 5400:
4259 phy_vco_div = 0x2;
4260 pixel_freq = 5400000000UL / 4;
4261 break;
4262 case 8100:
4263 phy_vco_div = 0x0;
4264 pixel_freq = 8100000000UL / 6;
4265 break;
4266 default:
4267
4268 return -EINVAL;
4269 }
4270 writel(phy_vco_div, qphy->pcs + QSERDES_V3_DP_PHY_VCO_DIV);
4271
4272 clk_set_rate(dp_clks->dp_link_hw.clk, dp_opts->link_rate * 100000);
4273 clk_set_rate(dp_clks->dp_pixel_hw.clk, pixel_freq);
4274
4275 writel(0x04, qphy->pcs + QSERDES_DP_PHY_AUX_CFG2);
4276 writel(0x01, qphy->pcs + QSERDES_DP_PHY_CFG);
4277 writel(0x05, qphy->pcs + QSERDES_DP_PHY_CFG);
4278 writel(0x01, qphy->pcs + QSERDES_DP_PHY_CFG);
4279 writel(0x09, qphy->pcs + QSERDES_DP_PHY_CFG);
4280
4281 writel(0x20, qphy->serdes + QSERDES_V3_COM_RESETSM_CNTRL);
4282
4283 if (readl_poll_timeout(qphy->serdes + QSERDES_V3_COM_C_READY_STATUS,
4284 status,
4285 ((status & BIT(0)) > 0),
4286 500,
4287 10000))
4288 return -ETIMEDOUT;
4289
4290 writel(0x19, qphy->pcs + QSERDES_DP_PHY_CFG);
4291
4292 if (readl_poll_timeout(qphy->pcs + QSERDES_V3_DP_PHY_STATUS,
4293 status,
4294 ((status & BIT(1)) > 0),
4295 500,
4296 10000))
4297 return -ETIMEDOUT;
4298
4299 writel(0x18, qphy->pcs + QSERDES_DP_PHY_CFG);
4300 udelay(2000);
4301 writel(0x19, qphy->pcs + QSERDES_DP_PHY_CFG);
4302
4303 return readl_poll_timeout(qphy->pcs + QSERDES_V3_DP_PHY_STATUS,
4304 status,
4305 ((status & BIT(1)) > 0),
4306 500,
4307 10000);
4308}
4309
4310
4311
4312
4313
4314static int qcom_qmp_v3_dp_phy_calibrate(struct qmp_phy *qphy)
4315{
4316 static const u8 cfg1_settings[] = { 0x13, 0x23, 0x1d };
4317 u8 val;
4318
4319 qphy->dp_aux_cfg++;
4320 qphy->dp_aux_cfg %= ARRAY_SIZE(cfg1_settings);
4321 val = cfg1_settings[qphy->dp_aux_cfg];
4322
4323 writel(val, qphy->pcs + QSERDES_DP_PHY_AUX_CFG1);
4324
4325 return 0;
4326}
4327
4328static void qcom_qmp_v4_phy_dp_aux_init(struct qmp_phy *qphy)
4329{
4330 writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_PSR_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN |
4331 DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN,
4332 qphy->pcs + QSERDES_DP_PHY_PD_CTL);
4333
4334
4335 writel(0x17, qphy->serdes + QSERDES_V4_COM_BIAS_EN_CLKBUFLR_EN);
4336
4337 writel(0x00, qphy->pcs + QSERDES_DP_PHY_AUX_CFG0);
4338 writel(0x13, qphy->pcs + QSERDES_DP_PHY_AUX_CFG1);
4339 writel(0xa4, qphy->pcs + QSERDES_DP_PHY_AUX_CFG2);
4340 writel(0x00, qphy->pcs + QSERDES_DP_PHY_AUX_CFG3);
4341 writel(0x0a, qphy->pcs + QSERDES_DP_PHY_AUX_CFG4);
4342 writel(0x26, qphy->pcs + QSERDES_DP_PHY_AUX_CFG5);
4343 writel(0x0a, qphy->pcs + QSERDES_DP_PHY_AUX_CFG6);
4344 writel(0x03, qphy->pcs + QSERDES_DP_PHY_AUX_CFG7);
4345 writel(0xb7, qphy->pcs + QSERDES_DP_PHY_AUX_CFG8);
4346 writel(0x03, qphy->pcs + QSERDES_DP_PHY_AUX_CFG9);
4347 qphy->dp_aux_cfg = 0;
4348
4349 writel(PHY_AUX_STOP_ERR_MASK | PHY_AUX_DEC_ERR_MASK |
4350 PHY_AUX_SYNC_ERR_MASK | PHY_AUX_ALIGN_ERR_MASK |
4351 PHY_AUX_REQ_ERR_MASK,
4352 qphy->pcs + QSERDES_V4_DP_PHY_AUX_INTERRUPT_MASK);
4353}
4354
4355static void qcom_qmp_v4_phy_configure_dp_tx(struct qmp_phy *qphy)
4356{
4357
4358 writel(0x27, qphy->tx + QSERDES_V4_TX_TX_DRV_LVL);
4359 writel(0x27, qphy->tx2 + QSERDES_V4_TX_TX_DRV_LVL);
4360
4361 writel(0x20, qphy->tx + QSERDES_V4_TX_TX_EMP_POST1_LVL);
4362 writel(0x20, qphy->tx2 + QSERDES_V4_TX_TX_EMP_POST1_LVL);
4363
4364 qcom_qmp_phy_configure_dp_swing(qphy,
4365 QSERDES_V4_TX_TX_DRV_LVL,
4366 QSERDES_V4_TX_TX_EMP_POST1_LVL);
4367}
4368
4369static int qcom_qmp_v4_phy_configure_dp_phy(struct qmp_phy *qphy)
4370{
4371 const struct qmp_phy_dp_clks *dp_clks = qphy->dp_clks;
4372 const struct phy_configure_opts_dp *dp_opts = &qphy->dp_opts;
4373 u32 phy_vco_div, status;
4374 unsigned long pixel_freq;
4375 u32 bias0_en, drvr0_en, bias1_en, drvr1_en;
4376 bool reverse;
4377
4378 writel(0x0f, qphy->pcs + QSERDES_V4_DP_PHY_CFG_1);
4379
4380 reverse = qcom_qmp_phy_configure_dp_mode(qphy);
4381
4382 writel(0x13, qphy->pcs + QSERDES_DP_PHY_AUX_CFG1);
4383 writel(0xa4, qphy->pcs + QSERDES_DP_PHY_AUX_CFG2);
4384
4385 writel(0x05, qphy->pcs + QSERDES_V4_DP_PHY_TX0_TX1_LANE_CTL);
4386 writel(0x05, qphy->pcs + QSERDES_V4_DP_PHY_TX2_TX3_LANE_CTL);
4387
4388 switch (dp_opts->link_rate) {
4389 case 1620:
4390 phy_vco_div = 0x1;
4391 pixel_freq = 1620000000UL / 2;
4392 break;
4393 case 2700:
4394 phy_vco_div = 0x1;
4395 pixel_freq = 2700000000UL / 2;
4396 break;
4397 case 5400:
4398 phy_vco_div = 0x2;
4399 pixel_freq = 5400000000UL / 4;
4400 break;
4401 case 8100:
4402 phy_vco_div = 0x0;
4403 pixel_freq = 8100000000UL / 6;
4404 break;
4405 default:
4406
4407 return -EINVAL;
4408 }
4409 writel(phy_vco_div, qphy->pcs + QSERDES_V4_DP_PHY_VCO_DIV);
4410
4411 clk_set_rate(dp_clks->dp_link_hw.clk, dp_opts->link_rate * 100000);
4412 clk_set_rate(dp_clks->dp_pixel_hw.clk, pixel_freq);
4413
4414 writel(0x01, qphy->pcs + QSERDES_DP_PHY_CFG);
4415 writel(0x05, qphy->pcs + QSERDES_DP_PHY_CFG);
4416 writel(0x01, qphy->pcs + QSERDES_DP_PHY_CFG);
4417 writel(0x09, qphy->pcs + QSERDES_DP_PHY_CFG);
4418
4419 writel(0x20, qphy->serdes + QSERDES_V4_COM_RESETSM_CNTRL);
4420
4421 if (readl_poll_timeout(qphy->serdes + QSERDES_V4_COM_C_READY_STATUS,
4422 status,
4423 ((status & BIT(0)) > 0),
4424 500,
4425 10000))
4426 return -ETIMEDOUT;
4427
4428 if (readl_poll_timeout(qphy->serdes + QSERDES_V4_COM_CMN_STATUS,
4429 status,
4430 ((status & BIT(0)) > 0),
4431 500,
4432 10000))
4433 return -ETIMEDOUT;
4434
4435 if (readl_poll_timeout(qphy->serdes + QSERDES_V4_COM_CMN_STATUS,
4436 status,
4437 ((status & BIT(1)) > 0),
4438 500,
4439 10000))
4440 return -ETIMEDOUT;
4441
4442 writel(0x19, qphy->pcs + QSERDES_DP_PHY_CFG);
4443
4444 if (readl_poll_timeout(qphy->pcs + QSERDES_V4_DP_PHY_STATUS,
4445 status,
4446 ((status & BIT(0)) > 0),
4447 500,
4448 10000))
4449 return -ETIMEDOUT;
4450
4451 if (readl_poll_timeout(qphy->pcs + QSERDES_V4_DP_PHY_STATUS,
4452 status,
4453 ((status & BIT(1)) > 0),
4454 500,
4455 10000))
4456 return -ETIMEDOUT;
4457
4458
4459
4460
4461
4462
4463 if (dp_opts->lanes == 1) {
4464 bias0_en = reverse ? 0x3e : 0x15;
4465 bias1_en = reverse ? 0x15 : 0x3e;
4466 drvr0_en = reverse ? 0x13 : 0x10;
4467 drvr1_en = reverse ? 0x10 : 0x13;
4468 } else if (dp_opts->lanes == 2) {
4469 bias0_en = reverse ? 0x3f : 0x15;
4470 bias1_en = reverse ? 0x15 : 0x3f;
4471 drvr0_en = 0x10;
4472 drvr1_en = 0x10;
4473 } else {
4474 bias0_en = 0x3f;
4475 bias1_en = 0x3f;
4476 drvr0_en = 0x10;
4477 drvr1_en = 0x10;
4478 }
4479
4480 writel(drvr0_en, qphy->tx + QSERDES_V4_TX_HIGHZ_DRVR_EN);
4481 writel(bias0_en, qphy->tx + QSERDES_V4_TX_TRANSCEIVER_BIAS_EN);
4482 writel(drvr1_en, qphy->tx2 + QSERDES_V4_TX_HIGHZ_DRVR_EN);
4483 writel(bias1_en, qphy->tx2 + QSERDES_V4_TX_TRANSCEIVER_BIAS_EN);
4484
4485 writel(0x18, qphy->pcs + QSERDES_DP_PHY_CFG);
4486 udelay(2000);
4487 writel(0x19, qphy->pcs + QSERDES_DP_PHY_CFG);
4488
4489 if (readl_poll_timeout(qphy->pcs + QSERDES_V4_DP_PHY_STATUS,
4490 status,
4491 ((status & BIT(1)) > 0),
4492 500,
4493 10000))
4494 return -ETIMEDOUT;
4495
4496 writel(0x0a, qphy->tx + QSERDES_V4_TX_TX_POL_INV);
4497 writel(0x0a, qphy->tx2 + QSERDES_V4_TX_TX_POL_INV);
4498
4499 writel(0x27, qphy->tx + QSERDES_V4_TX_TX_DRV_LVL);
4500 writel(0x27, qphy->tx2 + QSERDES_V4_TX_TX_DRV_LVL);
4501
4502 writel(0x20, qphy->tx + QSERDES_V4_TX_TX_EMP_POST1_LVL);
4503 writel(0x20, qphy->tx2 + QSERDES_V4_TX_TX_EMP_POST1_LVL);
4504
4505 return 0;
4506}
4507
4508
4509
4510
4511
4512static int qcom_qmp_v4_dp_phy_calibrate(struct qmp_phy *qphy)
4513{
4514 static const u8 cfg1_settings[] = { 0x20, 0x13, 0x23, 0x1d };
4515 u8 val;
4516
4517 qphy->dp_aux_cfg++;
4518 qphy->dp_aux_cfg %= ARRAY_SIZE(cfg1_settings);
4519 val = cfg1_settings[qphy->dp_aux_cfg];
4520
4521 writel(val, qphy->pcs + QSERDES_DP_PHY_AUX_CFG1);
4522
4523 return 0;
4524}
4525
4526static int qcom_qmp_dp_phy_configure(struct phy *phy, union phy_configure_opts *opts)
4527{
4528 const struct phy_configure_opts_dp *dp_opts = &opts->dp;
4529 struct qmp_phy *qphy = phy_get_drvdata(phy);
4530 const struct qmp_phy_cfg *cfg = qphy->cfg;
4531
4532 memcpy(&qphy->dp_opts, dp_opts, sizeof(*dp_opts));
4533 if (qphy->dp_opts.set_voltages) {
4534 cfg->configure_dp_tx(qphy);
4535 qphy->dp_opts.set_voltages = 0;
4536 }
4537
4538 return 0;
4539}
4540
4541static int qcom_qmp_dp_phy_calibrate(struct phy *phy)
4542{
4543 struct qmp_phy *qphy = phy_get_drvdata(phy);
4544 const struct qmp_phy_cfg *cfg = qphy->cfg;
4545
4546 if (cfg->calibrate_dp_phy)
4547 return cfg->calibrate_dp_phy(qphy);
4548
4549 return 0;
4550}
4551
4552static int qcom_qmp_phy_com_init(struct qmp_phy *qphy)
4553{
4554 struct qcom_qmp *qmp = qphy->qmp;
4555 const struct qmp_phy_cfg *cfg = qphy->cfg;
4556 void __iomem *serdes = qphy->serdes;
4557 void __iomem *pcs = qphy->pcs;
4558 void __iomem *dp_com = qmp->dp_com;
4559 int ret, i;
4560
4561 mutex_lock(&qmp->phy_mutex);
4562 if (qmp->init_count++) {
4563 mutex_unlock(&qmp->phy_mutex);
4564 return 0;
4565 }
4566
4567
4568 ret = regulator_bulk_enable(cfg->num_vregs, qmp->vregs);
4569 if (ret) {
4570 dev_err(qmp->dev, "failed to enable regulators, err=%d\n", ret);
4571 goto err_reg_enable;
4572 }
4573
4574 for (i = 0; i < cfg->num_resets; i++) {
4575 ret = reset_control_assert(qmp->resets[i]);
4576 if (ret) {
4577 dev_err(qmp->dev, "%s reset assert failed\n",
4578 cfg->reset_list[i]);
4579 goto err_rst_assert;
4580 }
4581 }
4582
4583 for (i = cfg->num_resets - 1; i >= 0; i--) {
4584 ret = reset_control_deassert(qmp->resets[i]);
4585 if (ret) {
4586 dev_err(qmp->dev, "%s reset deassert failed\n",
4587 qphy->cfg->reset_list[i]);
4588 goto err_rst;
4589 }
4590 }
4591
4592 ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks);
4593 if (ret)
4594 goto err_rst;
4595
4596 if (cfg->has_phy_dp_com_ctrl) {
4597 qphy_setbits(dp_com, QPHY_V3_DP_COM_POWER_DOWN_CTRL,
4598 SW_PWRDN);
4599
4600 qphy_setbits(dp_com, QPHY_V3_DP_COM_RESET_OVRD_CTRL,
4601 SW_DPPHY_RESET_MUX | SW_DPPHY_RESET |
4602 SW_USB3PHY_RESET_MUX | SW_USB3PHY_RESET);
4603
4604
4605 qphy_setbits(dp_com, QPHY_V3_DP_COM_TYPEC_CTRL, 0x02);
4606
4607 qphy_setbits(dp_com, QPHY_V3_DP_COM_PHY_MODE_CTRL,
4608 USB3_MODE | DP_MODE);
4609
4610
4611 qphy_clrbits(dp_com, QPHY_V3_DP_COM_RESET_OVRD_CTRL,
4612 SW_DPPHY_RESET_MUX | SW_DPPHY_RESET |
4613 SW_USB3PHY_RESET_MUX | SW_USB3PHY_RESET);
4614
4615 qphy_clrbits(dp_com, QPHY_V3_DP_COM_SWI_CTRL, 0x03);
4616 qphy_clrbits(dp_com, QPHY_V3_DP_COM_SW_RESET, SW_RESET);
4617 }
4618
4619 if (cfg->has_phy_com_ctrl) {
4620 qphy_setbits(serdes, cfg->regs[QPHY_COM_POWER_DOWN_CONTROL],
4621 SW_PWRDN);
4622 } else {
4623 if (cfg->regs[QPHY_PCS_POWER_DOWN_CONTROL])
4624 qphy_setbits(pcs,
4625 cfg->regs[QPHY_PCS_POWER_DOWN_CONTROL],
4626 cfg->pwrdn_ctrl);
4627 else
4628 qphy_setbits(pcs, QPHY_POWER_DOWN_CONTROL,
4629 cfg->pwrdn_ctrl);
4630 }
4631
4632 mutex_unlock(&qmp->phy_mutex);
4633
4634 return 0;
4635
4636err_rst:
4637 while (++i < cfg->num_resets)
4638 reset_control_assert(qmp->resets[i]);
4639err_rst_assert:
4640 regulator_bulk_disable(cfg->num_vregs, qmp->vregs);
4641err_reg_enable:
4642 mutex_unlock(&qmp->phy_mutex);
4643
4644 return ret;
4645}
4646
4647static int qcom_qmp_phy_com_exit(struct qmp_phy *qphy)
4648{
4649 struct qcom_qmp *qmp = qphy->qmp;
4650 const struct qmp_phy_cfg *cfg = qphy->cfg;
4651 void __iomem *serdes = qphy->serdes;
4652 int i = cfg->num_resets;
4653
4654 mutex_lock(&qmp->phy_mutex);
4655 if (--qmp->init_count) {
4656 mutex_unlock(&qmp->phy_mutex);
4657 return 0;
4658 }
4659
4660 reset_control_assert(qmp->ufs_reset);
4661 if (cfg->has_phy_com_ctrl) {
4662 qphy_setbits(serdes, cfg->regs[QPHY_COM_START_CONTROL],
4663 SERDES_START | PCS_START);
4664 qphy_clrbits(serdes, cfg->regs[QPHY_COM_SW_RESET],
4665 SW_RESET);
4666 qphy_setbits(serdes, cfg->regs[QPHY_COM_POWER_DOWN_CONTROL],
4667 SW_PWRDN);
4668 }
4669
4670 while (--i >= 0)
4671 reset_control_assert(qmp->resets[i]);
4672
4673 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks);
4674
4675 regulator_bulk_disable(cfg->num_vregs, qmp->vregs);
4676
4677 mutex_unlock(&qmp->phy_mutex);
4678
4679 return 0;
4680}
4681
4682static int qcom_qmp_phy_init(struct phy *phy)
4683{
4684 struct qmp_phy *qphy = phy_get_drvdata(phy);
4685 struct qcom_qmp *qmp = qphy->qmp;
4686 const struct qmp_phy_cfg *cfg = qphy->cfg;
4687 int ret;
4688 dev_vdbg(qmp->dev, "Initializing QMP phy\n");
4689
4690 if (cfg->no_pcs_sw_reset) {
4691
4692
4693
4694
4695
4696 if (!qmp->ufs_reset) {
4697 qmp->ufs_reset =
4698 devm_reset_control_get_exclusive(qmp->dev,
4699 "ufsphy");
4700
4701 if (IS_ERR(qmp->ufs_reset)) {
4702 ret = PTR_ERR(qmp->ufs_reset);
4703 dev_err(qmp->dev,
4704 "failed to get UFS reset: %d\n",
4705 ret);
4706
4707 qmp->ufs_reset = NULL;
4708 return ret;
4709 }
4710 }
4711
4712 ret = reset_control_assert(qmp->ufs_reset);
4713 if (ret)
4714 return ret;
4715 }
4716
4717 ret = qcom_qmp_phy_com_init(qphy);
4718 if (ret)
4719 return ret;
4720
4721 if (cfg->type == PHY_TYPE_DP)
4722 cfg->dp_aux_init(qphy);
4723
4724 return 0;
4725}
4726
4727static int qcom_qmp_phy_power_on(struct phy *phy)
4728{
4729 struct qmp_phy *qphy = phy_get_drvdata(phy);
4730 struct qcom_qmp *qmp = qphy->qmp;
4731 const struct qmp_phy_cfg *cfg = qphy->cfg;
4732 void __iomem *tx = qphy->tx;
4733 void __iomem *rx = qphy->rx;
4734 void __iomem *pcs = qphy->pcs;
4735 void __iomem *pcs_misc = qphy->pcs_misc;
4736 void __iomem *status;
4737 unsigned int mask, val, ready;
4738 int ret;
4739
4740 qcom_qmp_phy_serdes_init(qphy);
4741
4742 if (cfg->has_lane_rst) {
4743 ret = reset_control_deassert(qphy->lane_rst);
4744 if (ret) {
4745 dev_err(qmp->dev, "lane%d reset deassert failed\n",
4746 qphy->index);
4747 goto err_lane_rst;
4748 }
4749 }
4750
4751 ret = clk_prepare_enable(qphy->pipe_clk);
4752 if (ret) {
4753 dev_err(qmp->dev, "pipe_clk enable failed err=%d\n", ret);
4754 goto err_clk_enable;
4755 }
4756
4757
4758 qcom_qmp_phy_configure_lane(tx, cfg->regs,
4759 cfg->tx_tbl, cfg->tx_tbl_num, 1);
4760 if (cfg->tx_tbl_sec)
4761 qcom_qmp_phy_configure_lane(tx, cfg->regs, cfg->tx_tbl_sec,
4762 cfg->tx_tbl_num_sec, 1);
4763
4764
4765 if (cfg->is_dual_lane_phy) {
4766 qcom_qmp_phy_configure_lane(qphy->tx2, cfg->regs,
4767 cfg->tx_tbl, cfg->tx_tbl_num, 2);
4768 if (cfg->tx_tbl_sec)
4769 qcom_qmp_phy_configure_lane(qphy->tx2, cfg->regs,
4770 cfg->tx_tbl_sec,
4771 cfg->tx_tbl_num_sec, 2);
4772 }
4773
4774
4775 if (cfg->type == PHY_TYPE_DP)
4776 cfg->configure_dp_tx(qphy);
4777
4778 qcom_qmp_phy_configure_lane(rx, cfg->regs,
4779 cfg->rx_tbl, cfg->rx_tbl_num, 1);
4780 if (cfg->rx_tbl_sec)
4781 qcom_qmp_phy_configure_lane(rx, cfg->regs,
4782 cfg->rx_tbl_sec, cfg->rx_tbl_num_sec, 1);
4783
4784 if (cfg->is_dual_lane_phy) {
4785 qcom_qmp_phy_configure_lane(qphy->rx2, cfg->regs,
4786 cfg->rx_tbl, cfg->rx_tbl_num, 2);
4787 if (cfg->rx_tbl_sec)
4788 qcom_qmp_phy_configure_lane(qphy->rx2, cfg->regs,
4789 cfg->rx_tbl_sec,
4790 cfg->rx_tbl_num_sec, 2);
4791 }
4792
4793
4794 if (cfg->type == PHY_TYPE_DP) {
4795 cfg->configure_dp_phy(qphy);
4796 } else {
4797 qcom_qmp_phy_configure(pcs, cfg->regs, cfg->pcs_tbl, cfg->pcs_tbl_num);
4798 if (cfg->pcs_tbl_sec)
4799 qcom_qmp_phy_configure(pcs, cfg->regs, cfg->pcs_tbl_sec,
4800 cfg->pcs_tbl_num_sec);
4801 }
4802
4803 ret = reset_control_deassert(qmp->ufs_reset);
4804 if (ret)
4805 goto err_lane_rst;
4806
4807 qcom_qmp_phy_configure(pcs_misc, cfg->regs, cfg->pcs_misc_tbl,
4808 cfg->pcs_misc_tbl_num);
4809 if (cfg->pcs_misc_tbl_sec)
4810 qcom_qmp_phy_configure(pcs_misc, cfg->regs, cfg->pcs_misc_tbl_sec,
4811 cfg->pcs_misc_tbl_num_sec);
4812
4813
4814
4815
4816
4817 if(cfg->type == PHY_TYPE_PCIE)
4818 qphy_setbits(pcs, QPHY_POWER_DOWN_CONTROL, cfg->pwrdn_ctrl);
4819
4820 if (cfg->has_pwrdn_delay)
4821 usleep_range(cfg->pwrdn_delay_min, cfg->pwrdn_delay_max);
4822
4823 if (cfg->type != PHY_TYPE_DP) {
4824
4825 if (!cfg->no_pcs_sw_reset)
4826 qphy_clrbits(pcs, cfg->regs[QPHY_SW_RESET], SW_RESET);
4827
4828 qphy_setbits(pcs, cfg->regs[QPHY_START_CTRL], cfg->start_ctrl);
4829
4830 if (cfg->type == PHY_TYPE_UFS) {
4831 status = pcs + cfg->regs[QPHY_PCS_READY_STATUS];
4832 mask = PCS_READY;
4833 ready = PCS_READY;
4834 } else {
4835 status = pcs + cfg->regs[QPHY_PCS_STATUS];
4836 mask = cfg->phy_status;
4837 ready = 0;
4838 }
4839
4840 ret = readl_poll_timeout(status, val, (val & mask) == ready, 10,
4841 PHY_INIT_COMPLETE_TIMEOUT);
4842 if (ret) {
4843 dev_err(qmp->dev, "phy initialization timed-out\n");
4844 goto err_pcs_ready;
4845 }
4846 }
4847 return 0;
4848
4849err_pcs_ready:
4850 clk_disable_unprepare(qphy->pipe_clk);
4851err_clk_enable:
4852 if (cfg->has_lane_rst)
4853 reset_control_assert(qphy->lane_rst);
4854err_lane_rst:
4855 return ret;
4856}
4857
4858static int qcom_qmp_phy_power_off(struct phy *phy)
4859{
4860 struct qmp_phy *qphy = phy_get_drvdata(phy);
4861 const struct qmp_phy_cfg *cfg = qphy->cfg;
4862
4863 clk_disable_unprepare(qphy->pipe_clk);
4864
4865 if (cfg->type == PHY_TYPE_DP) {
4866
4867 writel(DP_PHY_PD_CTL_PSR_PWRDN, qphy->pcs + QSERDES_DP_PHY_PD_CTL);
4868 } else {
4869
4870 if (!cfg->no_pcs_sw_reset)
4871 qphy_setbits(qphy->pcs, cfg->regs[QPHY_SW_RESET], SW_RESET);
4872
4873
4874 qphy_clrbits(qphy->pcs, cfg->regs[QPHY_START_CTRL], cfg->start_ctrl);
4875
4876
4877 if (cfg->regs[QPHY_PCS_POWER_DOWN_CONTROL]) {
4878 qphy_clrbits(qphy->pcs, cfg->regs[QPHY_PCS_POWER_DOWN_CONTROL],
4879 cfg->pwrdn_ctrl);
4880 } else {
4881 qphy_clrbits(qphy->pcs, QPHY_POWER_DOWN_CONTROL,
4882 cfg->pwrdn_ctrl);
4883 }
4884 }
4885
4886 return 0;
4887}
4888
4889static int qcom_qmp_phy_exit(struct phy *phy)
4890{
4891 struct qmp_phy *qphy = phy_get_drvdata(phy);
4892 const struct qmp_phy_cfg *cfg = qphy->cfg;
4893
4894 if (cfg->has_lane_rst)
4895 reset_control_assert(qphy->lane_rst);
4896
4897 qcom_qmp_phy_com_exit(qphy);
4898
4899 return 0;
4900}
4901
4902static int qcom_qmp_phy_enable(struct phy *phy)
4903{
4904 int ret;
4905
4906 ret = qcom_qmp_phy_init(phy);
4907 if (ret)
4908 return ret;
4909
4910 ret = qcom_qmp_phy_power_on(phy);
4911 if (ret)
4912 qcom_qmp_phy_exit(phy);
4913
4914 return ret;
4915}
4916
4917static int qcom_qmp_phy_disable(struct phy *phy)
4918{
4919 int ret;
4920
4921 ret = qcom_qmp_phy_power_off(phy);
4922 if (ret)
4923 return ret;
4924 return qcom_qmp_phy_exit(phy);
4925}
4926
4927static int qcom_qmp_phy_set_mode(struct phy *phy,
4928 enum phy_mode mode, int submode)
4929{
4930 struct qmp_phy *qphy = phy_get_drvdata(phy);
4931
4932 qphy->mode = mode;
4933
4934 return 0;
4935}
4936
4937static void qcom_qmp_phy_enable_autonomous_mode(struct qmp_phy *qphy)
4938{
4939 const struct qmp_phy_cfg *cfg = qphy->cfg;
4940 void __iomem *pcs = qphy->pcs;
4941 void __iomem *pcs_misc = qphy->pcs_misc;
4942 u32 intr_mask;
4943
4944 if (qphy->mode == PHY_MODE_USB_HOST_SS ||
4945 qphy->mode == PHY_MODE_USB_DEVICE_SS)
4946 intr_mask = ARCVR_DTCT_EN | ALFPS_DTCT_EN;
4947 else
4948 intr_mask = ARCVR_DTCT_EN | ARCVR_DTCT_EVENT_SEL;
4949
4950
4951 qphy_setbits(pcs, cfg->regs[QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR], IRQ_CLEAR);
4952
4953 qphy_clrbits(pcs, cfg->regs[QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR], IRQ_CLEAR);
4954
4955 qphy_clrbits(pcs, cfg->regs[QPHY_PCS_AUTONOMOUS_MODE_CTRL],
4956 ARCVR_DTCT_EN | ALFPS_DTCT_EN | ARCVR_DTCT_EVENT_SEL);
4957
4958
4959 qphy_setbits(pcs, cfg->regs[QPHY_PCS_AUTONOMOUS_MODE_CTRL], intr_mask);
4960
4961
4962 if (pcs_misc)
4963 qphy_clrbits(pcs_misc, QPHY_V3_PCS_MISC_CLAMP_ENABLE, CLAMP_EN);
4964}
4965
4966static void qcom_qmp_phy_disable_autonomous_mode(struct qmp_phy *qphy)
4967{
4968 const struct qmp_phy_cfg *cfg = qphy->cfg;
4969 void __iomem *pcs = qphy->pcs;
4970 void __iomem *pcs_misc = qphy->pcs_misc;
4971
4972
4973 if (pcs_misc)
4974 qphy_setbits(pcs_misc, QPHY_V3_PCS_MISC_CLAMP_ENABLE, CLAMP_EN);
4975
4976 qphy_clrbits(pcs, cfg->regs[QPHY_PCS_AUTONOMOUS_MODE_CTRL],
4977 ARCVR_DTCT_EN | ARCVR_DTCT_EVENT_SEL | ALFPS_DTCT_EN);
4978
4979 qphy_setbits(pcs, cfg->regs[QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR], IRQ_CLEAR);
4980
4981 qphy_clrbits(pcs, cfg->regs[QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR], IRQ_CLEAR);
4982}
4983
4984static int __maybe_unused qcom_qmp_phy_runtime_suspend(struct device *dev)
4985{
4986 struct qcom_qmp *qmp = dev_get_drvdata(dev);
4987 struct qmp_phy *qphy = qmp->phys[0];
4988 const struct qmp_phy_cfg *cfg = qphy->cfg;
4989
4990 dev_vdbg(dev, "Suspending QMP phy, mode:%d\n", qphy->mode);
4991
4992
4993 if (cfg->type != PHY_TYPE_USB3)
4994 return 0;
4995
4996 if (!qmp->init_count) {
4997 dev_vdbg(dev, "PHY not initialized, bailing out\n");
4998 return 0;
4999 }
5000
5001 qcom_qmp_phy_enable_autonomous_mode(qphy);
5002
5003 clk_disable_unprepare(qphy->pipe_clk);
5004 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks);
5005
5006 return 0;
5007}
5008
5009static int __maybe_unused qcom_qmp_phy_runtime_resume(struct device *dev)
5010{
5011 struct qcom_qmp *qmp = dev_get_drvdata(dev);
5012 struct qmp_phy *qphy = qmp->phys[0];
5013 const struct qmp_phy_cfg *cfg = qphy->cfg;
5014 int ret = 0;
5015
5016 dev_vdbg(dev, "Resuming QMP phy, mode:%d\n", qphy->mode);
5017
5018
5019 if (cfg->type != PHY_TYPE_USB3)
5020 return 0;
5021
5022 if (!qmp->init_count) {
5023 dev_vdbg(dev, "PHY not initialized, bailing out\n");
5024 return 0;
5025 }
5026
5027 ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks);
5028 if (ret)
5029 return ret;
5030
5031 ret = clk_prepare_enable(qphy->pipe_clk);
5032 if (ret) {
5033 dev_err(dev, "pipe_clk enable failed, err=%d\n", ret);
5034 clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks);
5035 return ret;
5036 }
5037
5038 qcom_qmp_phy_disable_autonomous_mode(qphy);
5039
5040 return 0;
5041}
5042
5043static int qcom_qmp_phy_vreg_init(struct device *dev, const struct qmp_phy_cfg *cfg)
5044{
5045 struct qcom_qmp *qmp = dev_get_drvdata(dev);
5046 int num = cfg->num_vregs;
5047 int i;
5048
5049 qmp->vregs = devm_kcalloc(dev, num, sizeof(*qmp->vregs), GFP_KERNEL);
5050 if (!qmp->vregs)
5051 return -ENOMEM;
5052
5053 for (i = 0; i < num; i++)
5054 qmp->vregs[i].supply = cfg->vreg_list[i];
5055
5056 return devm_regulator_bulk_get(dev, num, qmp->vregs);
5057}
5058
5059static int qcom_qmp_phy_reset_init(struct device *dev, const struct qmp_phy_cfg *cfg)
5060{
5061 struct qcom_qmp *qmp = dev_get_drvdata(dev);
5062 int i;
5063
5064 qmp->resets = devm_kcalloc(dev, cfg->num_resets,
5065 sizeof(*qmp->resets), GFP_KERNEL);
5066 if (!qmp->resets)
5067 return -ENOMEM;
5068
5069 for (i = 0; i < cfg->num_resets; i++) {
5070 struct reset_control *rst;
5071 const char *name = cfg->reset_list[i];
5072
5073 rst = devm_reset_control_get(dev, name);
5074 if (IS_ERR(rst)) {
5075 dev_err(dev, "failed to get %s reset\n", name);
5076 return PTR_ERR(rst);
5077 }
5078 qmp->resets[i] = rst;
5079 }
5080
5081 return 0;
5082}
5083
5084static int qcom_qmp_phy_clk_init(struct device *dev, const struct qmp_phy_cfg *cfg)
5085{
5086 struct qcom_qmp *qmp = dev_get_drvdata(dev);
5087 int num = cfg->num_clks;
5088 int i;
5089
5090 qmp->clks = devm_kcalloc(dev, num, sizeof(*qmp->clks), GFP_KERNEL);
5091 if (!qmp->clks)
5092 return -ENOMEM;
5093
5094 for (i = 0; i < num; i++)
5095 qmp->clks[i].id = cfg->clk_list[i];
5096
5097 return devm_clk_bulk_get(dev, num, qmp->clks);
5098}
5099
5100static void phy_clk_release_provider(void *res)
5101{
5102 of_clk_del_provider(res);
5103}
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123static int phy_pipe_clk_register(struct qcom_qmp *qmp, struct device_node *np)
5124{
5125 struct clk_fixed_rate *fixed;
5126 struct clk_init_data init = { };
5127 int ret;
5128
5129 ret = of_property_read_string(np, "clock-output-names", &init.name);
5130 if (ret) {
5131 dev_err(qmp->dev, "%pOFn: No clock-output-names\n", np);
5132 return ret;
5133 }
5134
5135 fixed = devm_kzalloc(qmp->dev, sizeof(*fixed), GFP_KERNEL);
5136 if (!fixed)
5137 return -ENOMEM;
5138
5139 init.ops = &clk_fixed_rate_ops;
5140
5141
5142 fixed->fixed_rate = 125000000;
5143 fixed->hw.init = &init;
5144
5145 ret = devm_clk_hw_register(qmp->dev, &fixed->hw);
5146 if (ret)
5147 return ret;
5148
5149 ret = of_clk_add_hw_provider(np, of_clk_hw_simple_get, &fixed->hw);
5150 if (ret)
5151 return ret;
5152
5153
5154
5155
5156
5157 ret = devm_add_action(qmp->dev, phy_clk_release_provider, np);
5158 if (ret)
5159 phy_clk_release_provider(np);
5160
5161 return ret;
5162}
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213static int qcom_qmp_dp_pixel_clk_determine_rate(struct clk_hw *hw,
5214 struct clk_rate_request *req)
5215{
5216 switch (req->rate) {
5217 case 1620000000UL / 2:
5218 case 2700000000UL / 2:
5219
5220 return 0;
5221 default:
5222 return -EINVAL;
5223 }
5224}
5225
5226static unsigned long
5227qcom_qmp_dp_pixel_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
5228{
5229 const struct qmp_phy_dp_clks *dp_clks;
5230 const struct qmp_phy *qphy;
5231 const struct phy_configure_opts_dp *dp_opts;
5232
5233 dp_clks = container_of(hw, struct qmp_phy_dp_clks, dp_pixel_hw);
5234 qphy = dp_clks->qphy;
5235 dp_opts = &qphy->dp_opts;
5236
5237 switch (dp_opts->link_rate) {
5238 case 1620:
5239 return 1620000000UL / 2;
5240 case 2700:
5241 return 2700000000UL / 2;
5242 case 5400:
5243 return 5400000000UL / 4;
5244 case 8100:
5245 return 8100000000UL / 6;
5246 default:
5247 return 0;
5248 }
5249}
5250
5251static const struct clk_ops qcom_qmp_dp_pixel_clk_ops = {
5252 .determine_rate = qcom_qmp_dp_pixel_clk_determine_rate,
5253 .recalc_rate = qcom_qmp_dp_pixel_clk_recalc_rate,
5254};
5255
5256static int qcom_qmp_dp_link_clk_determine_rate(struct clk_hw *hw,
5257 struct clk_rate_request *req)
5258{
5259 switch (req->rate) {
5260 case 162000000:
5261 case 270000000:
5262 case 540000000:
5263 case 810000000:
5264 return 0;
5265 default:
5266 return -EINVAL;
5267 }
5268}
5269
5270static unsigned long
5271qcom_qmp_dp_link_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
5272{
5273 const struct qmp_phy_dp_clks *dp_clks;
5274 const struct qmp_phy *qphy;
5275 const struct phy_configure_opts_dp *dp_opts;
5276
5277 dp_clks = container_of(hw, struct qmp_phy_dp_clks, dp_link_hw);
5278 qphy = dp_clks->qphy;
5279 dp_opts = &qphy->dp_opts;
5280
5281 switch (dp_opts->link_rate) {
5282 case 1620:
5283 case 2700:
5284 case 5400:
5285 case 8100:
5286 return dp_opts->link_rate * 100000;
5287 default:
5288 return 0;
5289 }
5290}
5291
5292static const struct clk_ops qcom_qmp_dp_link_clk_ops = {
5293 .determine_rate = qcom_qmp_dp_link_clk_determine_rate,
5294 .recalc_rate = qcom_qmp_dp_link_clk_recalc_rate,
5295};
5296
5297static struct clk_hw *
5298qcom_qmp_dp_clks_hw_get(struct of_phandle_args *clkspec, void *data)
5299{
5300 struct qmp_phy_dp_clks *dp_clks = data;
5301 unsigned int idx = clkspec->args[0];
5302
5303 if (idx >= 2) {
5304 pr_err("%s: invalid index %u\n", __func__, idx);
5305 return ERR_PTR(-EINVAL);
5306 }
5307
5308 if (idx == 0)
5309 return &dp_clks->dp_link_hw;
5310
5311 return &dp_clks->dp_pixel_hw;
5312}
5313
5314static int phy_dp_clks_register(struct qcom_qmp *qmp, struct qmp_phy *qphy,
5315 struct device_node *np)
5316{
5317 struct clk_init_data init = { };
5318 struct qmp_phy_dp_clks *dp_clks;
5319 char name[64];
5320 int ret;
5321
5322 dp_clks = devm_kzalloc(qmp->dev, sizeof(*dp_clks), GFP_KERNEL);
5323 if (!dp_clks)
5324 return -ENOMEM;
5325
5326 dp_clks->qphy = qphy;
5327 qphy->dp_clks = dp_clks;
5328
5329 snprintf(name, sizeof(name), "%s::link_clk", dev_name(qmp->dev));
5330 init.ops = &qcom_qmp_dp_link_clk_ops;
5331 init.name = name;
5332 dp_clks->dp_link_hw.init = &init;
5333 ret = devm_clk_hw_register(qmp->dev, &dp_clks->dp_link_hw);
5334 if (ret)
5335 return ret;
5336
5337 snprintf(name, sizeof(name), "%s::vco_div_clk", dev_name(qmp->dev));
5338 init.ops = &qcom_qmp_dp_pixel_clk_ops;
5339 init.name = name;
5340 dp_clks->dp_pixel_hw.init = &init;
5341 ret = devm_clk_hw_register(qmp->dev, &dp_clks->dp_pixel_hw);
5342 if (ret)
5343 return ret;
5344
5345 ret = of_clk_add_hw_provider(np, qcom_qmp_dp_clks_hw_get, dp_clks);
5346 if (ret)
5347 return ret;
5348
5349
5350
5351
5352
5353 ret = devm_add_action(qmp->dev, phy_clk_release_provider, np);
5354 if (ret)
5355 phy_clk_release_provider(np);
5356
5357 return ret;
5358}
5359
5360static const struct phy_ops qcom_qmp_phy_gen_ops = {
5361 .init = qcom_qmp_phy_enable,
5362 .exit = qcom_qmp_phy_disable,
5363 .set_mode = qcom_qmp_phy_set_mode,
5364 .owner = THIS_MODULE,
5365};
5366
5367static const struct phy_ops qcom_qmp_phy_dp_ops = {
5368 .init = qcom_qmp_phy_init,
5369 .configure = qcom_qmp_dp_phy_configure,
5370 .power_on = qcom_qmp_phy_power_on,
5371 .calibrate = qcom_qmp_dp_phy_calibrate,
5372 .power_off = qcom_qmp_phy_power_off,
5373 .exit = qcom_qmp_phy_exit,
5374 .set_mode = qcom_qmp_phy_set_mode,
5375 .owner = THIS_MODULE,
5376};
5377
5378static const struct phy_ops qcom_qmp_pcie_ufs_ops = {
5379 .power_on = qcom_qmp_phy_enable,
5380 .power_off = qcom_qmp_phy_disable,
5381 .set_mode = qcom_qmp_phy_set_mode,
5382 .owner = THIS_MODULE,
5383};
5384
5385static
5386int qcom_qmp_phy_create(struct device *dev, struct device_node *np, int id,
5387 void __iomem *serdes, const struct qmp_phy_cfg *cfg)
5388{
5389 struct qcom_qmp *qmp = dev_get_drvdata(dev);
5390 struct phy *generic_phy;
5391 struct qmp_phy *qphy;
5392 const struct phy_ops *ops;
5393 char prop_name[MAX_PROP_NAME];
5394 int ret;
5395
5396 qphy = devm_kzalloc(dev, sizeof(*qphy), GFP_KERNEL);
5397 if (!qphy)
5398 return -ENOMEM;
5399
5400 qphy->cfg = cfg;
5401 qphy->serdes = serdes;
5402
5403
5404
5405
5406
5407
5408 qphy->tx = of_iomap(np, 0);
5409 if (!qphy->tx)
5410 return -ENOMEM;
5411
5412 qphy->rx = of_iomap(np, 1);
5413 if (!qphy->rx)
5414 return -ENOMEM;
5415
5416 qphy->pcs = of_iomap(np, 2);
5417 if (!qphy->pcs)
5418 return -ENOMEM;
5419
5420
5421
5422
5423
5424
5425
5426 if (cfg->is_dual_lane_phy) {
5427 qphy->tx2 = of_iomap(np, 3);
5428 qphy->rx2 = of_iomap(np, 4);
5429 if (!qphy->tx2 || !qphy->rx2) {
5430 dev_warn(dev,
5431 "Underspecified device tree, falling back to legacy register regions\n");
5432
5433
5434 qphy->pcs_misc = qphy->tx2;
5435 qphy->tx2 = qphy->tx + QMP_PHY_LEGACY_LANE_STRIDE;
5436 qphy->rx2 = qphy->rx + QMP_PHY_LEGACY_LANE_STRIDE;
5437
5438 } else {
5439 qphy->pcs_misc = of_iomap(np, 5);
5440 }
5441
5442 } else {
5443 qphy->pcs_misc = of_iomap(np, 3);
5444 }
5445
5446 if (!qphy->pcs_misc)
5447 dev_vdbg(dev, "PHY pcs_misc-reg not used\n");
5448
5449
5450
5451
5452
5453
5454
5455
5456 snprintf(prop_name, sizeof(prop_name), "pipe%d", id);
5457 qphy->pipe_clk = of_clk_get_by_name(np, prop_name);
5458 if (IS_ERR(qphy->pipe_clk)) {
5459 if (cfg->type == PHY_TYPE_PCIE ||
5460 cfg->type == PHY_TYPE_USB3) {
5461 ret = PTR_ERR(qphy->pipe_clk);
5462 if (ret != -EPROBE_DEFER)
5463 dev_err(dev,
5464 "failed to get lane%d pipe_clk, %d\n",
5465 id, ret);
5466 return ret;
5467 }
5468 qphy->pipe_clk = NULL;
5469 }
5470
5471
5472 if (cfg->has_lane_rst) {
5473 snprintf(prop_name, sizeof(prop_name), "lane%d", id);
5474 qphy->lane_rst = of_reset_control_get(np, prop_name);
5475 if (IS_ERR(qphy->lane_rst)) {
5476 dev_err(dev, "failed to get lane%d reset\n", id);
5477 return PTR_ERR(qphy->lane_rst);
5478 }
5479 }
5480
5481 if (cfg->type == PHY_TYPE_UFS || cfg->type == PHY_TYPE_PCIE)
5482 ops = &qcom_qmp_pcie_ufs_ops;
5483 else if (cfg->type == PHY_TYPE_DP)
5484 ops = &qcom_qmp_phy_dp_ops;
5485 else
5486 ops = &qcom_qmp_phy_gen_ops;
5487
5488 generic_phy = devm_phy_create(dev, np, ops);
5489 if (IS_ERR(generic_phy)) {
5490 ret = PTR_ERR(generic_phy);
5491 dev_err(dev, "failed to create qphy %d\n", ret);
5492 return ret;
5493 }
5494
5495 qphy->phy = generic_phy;
5496 qphy->index = id;
5497 qphy->qmp = qmp;
5498 qmp->phys[id] = qphy;
5499 phy_set_drvdata(generic_phy, qphy);
5500
5501 return 0;
5502}
5503
5504static const struct of_device_id qcom_qmp_phy_of_match_table[] = {
5505 {
5506 .compatible = "qcom,ipq8074-qmp-usb3-phy",
5507 .data = &ipq8074_usb3phy_cfg,
5508 }, {
5509 .compatible = "qcom,msm8996-qmp-pcie-phy",
5510 .data = &msm8996_pciephy_cfg,
5511 }, {
5512 .compatible = "qcom,msm8996-qmp-ufs-phy",
5513 .data = &msm8996_ufs_cfg,
5514 }, {
5515 .compatible = "qcom,msm8996-qmp-usb3-phy",
5516 .data = &msm8996_usb3phy_cfg,
5517 }, {
5518 .compatible = "qcom,msm8998-qmp-pcie-phy",
5519 .data = &msm8998_pciephy_cfg,
5520 }, {
5521 .compatible = "qcom,msm8998-qmp-ufs-phy",
5522 .data = &sdm845_ufsphy_cfg,
5523 }, {
5524 .compatible = "qcom,ipq8074-qmp-pcie-phy",
5525 .data = &ipq8074_pciephy_cfg,
5526 }, {
5527 .compatible = "qcom,ipq6018-qmp-pcie-phy",
5528 .data = &ipq6018_pciephy_cfg,
5529 }, {
5530 .compatible = "qcom,ipq6018-qmp-usb3-phy",
5531 .data = &ipq8074_usb3phy_cfg,
5532 }, {
5533 .compatible = "qcom,sc7180-qmp-usb3-phy",
5534 .data = &sc7180_usb3phy_cfg,
5535 }, {
5536 .compatible = "qcom,sc7180-qmp-usb3-dp-phy",
5537
5538 }, {
5539 .compatible = "qcom,sc8180x-qmp-pcie-phy",
5540 .data = &sc8180x_pciephy_cfg,
5541 }, {
5542 .compatible = "qcom,sc8180x-qmp-ufs-phy",
5543 .data = &sm8150_ufsphy_cfg,
5544 }, {
5545 .compatible = "qcom,sc8180x-qmp-usb3-phy",
5546 .data = &sm8150_usb3phy_cfg,
5547 }, {
5548 .compatible = "qcom,sc8180x-qmp-usb3-dp-phy",
5549
5550 }, {
5551 .compatible = "qcom,sdm845-qhp-pcie-phy",
5552 .data = &sdm845_qhp_pciephy_cfg,
5553 }, {
5554 .compatible = "qcom,sdm845-qmp-pcie-phy",
5555 .data = &sdm845_qmp_pciephy_cfg,
5556 }, {
5557 .compatible = "qcom,sdm845-qmp-usb3-phy",
5558 .data = &qmp_v3_usb3phy_cfg,
5559 }, {
5560 .compatible = "qcom,sdm845-qmp-usb3-uni-phy",
5561 .data = &qmp_v3_usb3_uniphy_cfg,
5562 }, {
5563 .compatible = "qcom,sdm845-qmp-ufs-phy",
5564 .data = &sdm845_ufsphy_cfg,
5565 }, {
5566 .compatible = "qcom,msm8998-qmp-usb3-phy",
5567 .data = &msm8998_usb3phy_cfg,
5568 }, {
5569 .compatible = "qcom,sm6115-qmp-ufs-phy",
5570 .data = &sm6115_ufsphy_cfg,
5571 }, {
5572 .compatible = "qcom,sm8150-qmp-ufs-phy",
5573 .data = &sm8150_ufsphy_cfg,
5574 }, {
5575 .compatible = "qcom,sm8250-qmp-ufs-phy",
5576 .data = &sm8150_ufsphy_cfg,
5577 }, {
5578 .compatible = "qcom,sm8150-qmp-usb3-phy",
5579 .data = &sm8150_usb3phy_cfg,
5580 }, {
5581 .compatible = "qcom,sm8150-qmp-usb3-uni-phy",
5582 .data = &sm8150_usb3_uniphy_cfg,
5583 }, {
5584 .compatible = "qcom,sm8250-qmp-usb3-phy",
5585 .data = &sm8250_usb3phy_cfg,
5586 }, {
5587 .compatible = "qcom,sm8250-qmp-usb3-dp-phy",
5588
5589 }, {
5590 .compatible = "qcom,sm8250-qmp-usb3-uni-phy",
5591 .data = &sm8250_usb3_uniphy_cfg,
5592 }, {
5593 .compatible = "qcom,sm8250-qmp-gen3x1-pcie-phy",
5594 .data = &sm8250_qmp_gen3x1_pciephy_cfg,
5595 }, {
5596 .compatible = "qcom,sm8250-qmp-gen3x2-pcie-phy",
5597 .data = &sm8250_qmp_gen3x2_pciephy_cfg,
5598 }, {
5599 .compatible = "qcom,sm8350-qmp-ufs-phy",
5600 .data = &sm8350_ufsphy_cfg,
5601 }, {
5602 .compatible = "qcom,sm8250-qmp-modem-pcie-phy",
5603 .data = &sm8250_qmp_gen3x2_pciephy_cfg,
5604 }, {
5605 .compatible = "qcom,sdx55-qmp-pcie-phy",
5606 .data = &sdx55_qmp_pciephy_cfg,
5607 }, {
5608 .compatible = "qcom,sdx55-qmp-usb3-uni-phy",
5609 .data = &sdx55_usb3_uniphy_cfg,
5610 }, {
5611 .compatible = "qcom,sm8350-qmp-usb3-phy",
5612 .data = &sm8350_usb3phy_cfg,
5613 }, {
5614 .compatible = "qcom,sm8350-qmp-usb3-uni-phy",
5615 .data = &sm8350_usb3_uniphy_cfg,
5616 },
5617 { },
5618};
5619MODULE_DEVICE_TABLE(of, qcom_qmp_phy_of_match_table);
5620
5621static const struct of_device_id qcom_qmp_combo_phy_of_match_table[] = {
5622 {
5623 .compatible = "qcom,sc7180-qmp-usb3-dp-phy",
5624 .data = &sc7180_usb3dpphy_cfg,
5625 },
5626 {
5627 .compatible = "qcom,sm8250-qmp-usb3-dp-phy",
5628 .data = &sm8250_usb3dpphy_cfg,
5629 },
5630 {
5631 .compatible = "qcom,sc8180x-qmp-usb3-dp-phy",
5632 .data = &sc8180x_usb3dpphy_cfg,
5633 },
5634 { }
5635};
5636
5637static const struct dev_pm_ops qcom_qmp_phy_pm_ops = {
5638 SET_RUNTIME_PM_OPS(qcom_qmp_phy_runtime_suspend,
5639 qcom_qmp_phy_runtime_resume, NULL)
5640};
5641
5642static int qcom_qmp_phy_probe(struct platform_device *pdev)
5643{
5644 struct qcom_qmp *qmp;
5645 struct device *dev = &pdev->dev;
5646 struct device_node *child;
5647 struct phy_provider *phy_provider;
5648 void __iomem *serdes;
5649 void __iomem *usb_serdes;
5650 void __iomem *dp_serdes = NULL;
5651 const struct qmp_phy_combo_cfg *combo_cfg = NULL;
5652 const struct qmp_phy_cfg *cfg = NULL;
5653 const struct qmp_phy_cfg *usb_cfg = NULL;
5654 const struct qmp_phy_cfg *dp_cfg = NULL;
5655 int num, id, expected_phys;
5656 int ret;
5657
5658 qmp = devm_kzalloc(dev, sizeof(*qmp), GFP_KERNEL);
5659 if (!qmp)
5660 return -ENOMEM;
5661
5662 qmp->dev = dev;
5663 dev_set_drvdata(dev, qmp);
5664
5665
5666 cfg = of_device_get_match_data(dev);
5667 if (!cfg) {
5668 const struct of_device_id *match;
5669
5670 match = of_match_device(qcom_qmp_combo_phy_of_match_table, dev);
5671 if (!match)
5672 return -EINVAL;
5673
5674 combo_cfg = match->data;
5675 if (!combo_cfg)
5676 return -EINVAL;
5677
5678 usb_cfg = combo_cfg->usb_cfg;
5679 cfg = usb_cfg;
5680 }
5681
5682
5683 usb_serdes = serdes = devm_platform_ioremap_resource(pdev, 0);
5684 if (IS_ERR(serdes))
5685 return PTR_ERR(serdes);
5686
5687
5688 if (combo_cfg || cfg->has_phy_dp_com_ctrl) {
5689 qmp->dp_com = devm_platform_ioremap_resource(pdev, 1);
5690 if (IS_ERR(qmp->dp_com))
5691 return PTR_ERR(qmp->dp_com);
5692 }
5693
5694 if (combo_cfg) {
5695
5696 dp_serdes = devm_platform_ioremap_resource(pdev, 2);
5697 if (IS_ERR(dp_serdes))
5698 return PTR_ERR(dp_serdes);
5699
5700 dp_cfg = combo_cfg->dp_cfg;
5701 expected_phys = 2;
5702 } else {
5703 expected_phys = cfg->nlanes;
5704 }
5705
5706 mutex_init(&qmp->phy_mutex);
5707
5708 ret = qcom_qmp_phy_clk_init(dev, cfg);
5709 if (ret)
5710 return ret;
5711
5712 ret = qcom_qmp_phy_reset_init(dev, cfg);
5713 if (ret)
5714 return ret;
5715
5716 ret = qcom_qmp_phy_vreg_init(dev, cfg);
5717 if (ret) {
5718 if (ret != -EPROBE_DEFER)
5719 dev_err(dev, "failed to get regulator supplies: %d\n",
5720 ret);
5721 return ret;
5722 }
5723
5724 num = of_get_available_child_count(dev->of_node);
5725
5726 if (num > expected_phys)
5727 return -EINVAL;
5728
5729 qmp->phys = devm_kcalloc(dev, num, sizeof(*qmp->phys), GFP_KERNEL);
5730 if (!qmp->phys)
5731 return -ENOMEM;
5732
5733 pm_runtime_set_active(dev);
5734 pm_runtime_enable(dev);
5735
5736
5737
5738
5739 pm_runtime_forbid(dev);
5740
5741 id = 0;
5742 for_each_available_child_of_node(dev->of_node, child) {
5743 if (of_node_name_eq(child, "dp-phy")) {
5744 cfg = dp_cfg;
5745 serdes = dp_serdes;
5746 } else if (of_node_name_eq(child, "usb3-phy")) {
5747 cfg = usb_cfg;
5748 serdes = usb_serdes;
5749 }
5750
5751
5752 ret = qcom_qmp_phy_create(dev, child, id, serdes, cfg);
5753 if (ret) {
5754 dev_err(dev, "failed to create lane%d phy, %d\n",
5755 id, ret);
5756 goto err_node_put;
5757 }
5758
5759
5760
5761
5762
5763 if (cfg->type == PHY_TYPE_USB3 || cfg->type == PHY_TYPE_PCIE) {
5764 ret = phy_pipe_clk_register(qmp, child);
5765 if (ret) {
5766 dev_err(qmp->dev,
5767 "failed to register pipe clock source\n");
5768 goto err_node_put;
5769 }
5770 } else if (cfg->type == PHY_TYPE_DP) {
5771 ret = phy_dp_clks_register(qmp, qmp->phys[id], child);
5772 if (ret) {
5773 dev_err(qmp->dev,
5774 "failed to register DP clock source\n");
5775 goto err_node_put;
5776 }
5777 }
5778 id++;
5779 }
5780
5781 phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
5782 if (!IS_ERR(phy_provider))
5783 dev_info(dev, "Registered Qcom-QMP phy\n");
5784 else
5785 pm_runtime_disable(dev);
5786
5787 return PTR_ERR_OR_ZERO(phy_provider);
5788
5789err_node_put:
5790 pm_runtime_disable(dev);
5791 of_node_put(child);
5792 return ret;
5793}
5794
5795static struct platform_driver qcom_qmp_phy_driver = {
5796 .probe = qcom_qmp_phy_probe,
5797 .driver = {
5798 .name = "qcom-qmp-phy",
5799 .pm = &qcom_qmp_phy_pm_ops,
5800 .of_match_table = qcom_qmp_phy_of_match_table,
5801 },
5802};
5803
5804module_platform_driver(qcom_qmp_phy_driver);
5805
5806MODULE_AUTHOR("Vivek Gautam <vivek.gautam@codeaurora.org>");
5807MODULE_DESCRIPTION("Qualcomm QMP PHY driver");
5808MODULE_LICENSE("GPL v2");
5809