xref: /linux/drivers/phy/tegra/xusb-tegra210.c (revision 376b1446153ca67e7028e6b9555d9b17477f568b)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2014-2020, NVIDIA CORPORATION.  All rights reserved.
4  * Copyright (C) 2015 Google, Inc.
5  */
6 
7 #include <linux/clk.h>
8 #include <linux/clk/tegra.h>
9 #include <linux/delay.h>
10 #include <linux/io.h>
11 #include <linux/mailbox_client.h>
12 #include <linux/module.h>
13 #include <linux/of.h>
14 #include <linux/of_platform.h>
15 #include <linux/phy/phy.h>
16 #include <linux/platform_device.h>
17 #include <linux/regmap.h>
18 #include <linux/regulator/consumer.h>
19 #include <linux/reset.h>
20 #include <linux/slab.h>
21 
22 #include <soc/tegra/fuse.h>
23 
24 #include "xusb.h"
25 
26 #define FUSE_SKU_CALIB_HS_CURR_LEVEL_PADX_SHIFT(x) \
27 					((x) ? (11 + ((x) - 1) * 6) : 0)
28 #define FUSE_SKU_CALIB_HS_CURR_LEVEL_PAD_MASK 0x3f
29 #define FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_SHIFT 7
30 #define FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_MASK 0xf
31 
32 #define FUSE_USB_CALIB_EXT_RPD_CTRL_SHIFT 0
33 #define FUSE_USB_CALIB_EXT_RPD_CTRL_MASK 0x1f
34 
35 #define XUSB_PADCTL_USB2_PAD_MUX 0x004
36 #define XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_SHIFT 16
37 #define XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_MASK 0x3
38 #define XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_XUSB 0x1
39 #define XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_SHIFT 18
40 #define XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_MASK 0x3
41 #define XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_XUSB 0x1
42 
43 #define XUSB_PADCTL_USB2_PORT_CAP 0x008
44 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DISABLED(x) (0x0 << ((x) * 4))
45 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_HOST(x) (0x1 << ((x) * 4))
46 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DEVICE(x) (0x2 << ((x) * 4))
47 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_OTG(x) (0x3 << ((x) * 4))
48 #define XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_MASK(x) (0x3 << ((x) * 4))
49 
50 #define XUSB_PADCTL_SS_PORT_MAP 0x014
51 #define XUSB_PADCTL_SS_PORT_MAP_PORTX_INTERNAL(x) (1 << (((x) * 5) + 4))
52 #define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_SHIFT(x) ((x) * 5)
53 #define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK(x) (0x7 << ((x) * 5))
54 #define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(x, v) (((v) & 0x7) << ((x) * 5))
55 #define XUSB_PADCTL_SS_PORT_MAP_PORT_DISABLED 0x7
56 
57 #define XUSB_PADCTL_ELPG_PROGRAM_0 0x20
58 #define   USB2_PORT_WAKE_INTERRUPT_ENABLE(x)      BIT((x))
59 #define   USB2_PORT_WAKEUP_EVENT(x)               BIT((x) + 7)
60 #define   SS_PORT_WAKE_INTERRUPT_ENABLE(x)        BIT((x) + 14)
61 #define   SS_PORT_WAKEUP_EVENT(x)                 BIT((x) + 21)
62 #define   USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(x) BIT((x) + 28)
63 #define   USB2_HSIC_PORT_WAKEUP_EVENT(x)          BIT((x) + 30)
64 #define   ALL_WAKE_EVENTS ( \
65 		USB2_PORT_WAKEUP_EVENT(0) | USB2_PORT_WAKEUP_EVENT(1) | \
66 		USB2_PORT_WAKEUP_EVENT(2) | USB2_PORT_WAKEUP_EVENT(3) | \
67 		SS_PORT_WAKEUP_EVENT(0) | SS_PORT_WAKEUP_EVENT(1) | \
68 		SS_PORT_WAKEUP_EVENT(2) | SS_PORT_WAKEUP_EVENT(3) | \
69 		USB2_HSIC_PORT_WAKEUP_EVENT(0))
70 
71 #define XUSB_PADCTL_ELPG_PROGRAM1 0x024
72 #define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN (1 << 31)
73 #define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN_EARLY (1 << 30)
74 #define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN (1 << 29)
75 #define XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(x) (1 << (2 + (x) * 3))
76 #define XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(x) \
77 							(1 << (1 + (x) * 3))
78 #define XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(x) (1 << ((x) * 3))
79 
80 #define XUSB_PADCTL_USB3_PAD_MUX 0x028
81 #define XUSB_PADCTL_USB3_PAD_MUX_PCIE_IDDQ_DISABLE(x) (1 << (1 + (x)))
82 #define XUSB_PADCTL_USB3_PAD_MUX_SATA_IDDQ_DISABLE(x) (1 << (8 + (x)))
83 
84 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL0(x) (0x080 + (x) * 0x40)
85 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIP (1 << 18)
86 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIN (1 << 22)
87 
88 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL1(x) (0x084 + (x) * 0x40)
89 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_SHIFT 7
90 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_MASK 0x3
91 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_VAL 0x1
92 #define XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_FIX18 (1 << 6)
93 
94 #define XUSB_PADCTL_USB2_OTG_PADX_CTL0(x) (0x088 + (x) * 0x40)
95 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD_ZI (1 << 29)
96 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD2 (1 << 27)
97 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD (1 << 26)
98 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_SHIFT 0
99 #define XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_MASK 0x3f
100 
101 #define XUSB_PADCTL_USB2_OTG_PADX_CTL1(x) (0x08c + (x) * 0x40)
102 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_SHIFT 26
103 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_MASK 0x1f
104 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_SHIFT 3
105 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_MASK 0xf
106 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DR (1 << 2)
107 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DISC_OVRD (1 << 1)
108 #define XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_CHRP_OVRD (1 << 0)
109 #define   RPD_CTRL(x)                      (((x) & 0x1f) << 26)
110 #define   RPD_CTRL_VALUE(x)                (((x) >> 26) & 0x1f)
111 
112 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0 0x284
113 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_PD (1 << 11)
114 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_SHIFT 3
115 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_MASK 0x7
116 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_VAL 0x7
117 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_SHIFT 0
118 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_MASK 0x7
119 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_VAL 0x2
120 
121 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1 0x288
122 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_PD_TRK (1 << 26)
123 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_SHIFT 19
124 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_MASK 0x7f
125 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_VAL 0x0a
126 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_SHIFT 12
127 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_MASK 0x7f
128 #define XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_VAL 0x1e
129 #define   TCTRL_VALUE(x)                (((x) & 0x3f) >> 0)
130 #define   PCTRL_VALUE(x)                (((x) >> 6) & 0x3f)
131 
132 #define XUSB_PADCTL_HSIC_PADX_CTL0(x) (0x300 + (x) * 0x20)
133 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPU_STROBE (1 << 18)
134 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA1 (1 << 17)
135 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA0 (1 << 16)
136 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPD_STROBE (1 << 15)
137 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA1 (1 << 14)
138 #define XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA0 (1 << 13)
139 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_STROBE (1 << 9)
140 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA1 (1 << 8)
141 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA0 (1 << 7)
142 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_STROBE (1 << 6)
143 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA1 (1 << 5)
144 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA0 (1 << 4)
145 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_STROBE (1 << 3)
146 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA1 (1 << 2)
147 #define XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA0 (1 << 1)
148 
149 #define XUSB_PADCTL_HSIC_PADX_CTL1(x) (0x304 + (x) * 0x20)
150 #define XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_SHIFT 0
151 #define XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_MASK 0xf
152 
153 #define XUSB_PADCTL_HSIC_PADX_CTL2(x) (0x308 + (x) * 0x20)
154 #define XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_SHIFT 8
155 #define XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_MASK 0xf
156 #define XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_SHIFT 0
157 #define XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_MASK 0xff
158 
159 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL 0x340
160 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_PD_TRK (1 << 19)
161 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_SHIFT 12
162 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_MASK 0x7f
163 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_VAL 0x0a
164 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_SHIFT 5
165 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_MASK 0x7f
166 #define XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_VAL 0x1e
167 
168 #define XUSB_PADCTL_HSIC_STRB_TRIM_CONTROL 0x344
169 
170 #define XUSB_PADCTL_UPHY_PLL_P0_CTL1 0x360
171 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT 20
172 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_MASK 0xff
173 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_USB_VAL 0x19
174 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SATA_VAL 0x1e
175 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_SHIFT 16
176 #define XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_MASK 0x3
177 #define XUSB_PADCTL_UPHY_PLL_CTL1_LOCKDET_STATUS (1 << 15)
178 #define XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD (1 << 4)
179 #define XUSB_PADCTL_UPHY_PLL_CTL1_ENABLE (1 << 3)
180 #define XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_SHIFT 1
181 #define XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_MASK 0x3
182 #define XUSB_PADCTL_UPHY_PLL_CTL1_IDDQ (1 << 0)
183 
184 #define XUSB_PADCTL_UPHY_PLL_P0_CTL2 0x364
185 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT 4
186 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_MASK 0xffffff
187 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_VAL 0x136
188 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD (1 << 2)
189 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE (1 << 1)
190 #define XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN (1 << 0)
191 
192 #define XUSB_PADCTL_UPHY_PLL_P0_CTL4 0x36c
193 #define XUSB_PADCTL_UPHY_PLL_CTL4_XDIGCLK_EN (1 << 19)
194 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_EN (1 << 15)
195 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT 12
196 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_MASK 0x3
197 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_USB_VAL 0x2
198 #define XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SATA_VAL 0x0
199 #define XUSB_PADCTL_UPHY_PLL_CTL4_REFCLKBUF_EN (1 << 8)
200 #define XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_SHIFT 4
201 #define XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_MASK 0xf
202 
203 #define XUSB_PADCTL_UPHY_PLL_P0_CTL5 0x370
204 #define XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT 16
205 #define XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_MASK 0xff
206 #define XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_VAL 0x2a
207 
208 #define XUSB_PADCTL_UPHY_PLL_P0_CTL8 0x37c
209 #define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE (1 << 31)
210 #define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD (1 << 15)
211 #define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN (1 << 13)
212 #define XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN (1 << 12)
213 
214 #define XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL1(x) (0x460 + (x) * 0x40)
215 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_SHIFT 20
216 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_MASK 0x3
217 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_VAL 0x1
218 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_TERM_EN BIT(18)
219 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_MODE_OVRD BIT(13)
220 
221 #define XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(x) (0x464 + (x) * 0x40)
222 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ BIT(0)
223 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ_OVRD BIT(1)
224 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_MASK GENMASK(5, 4)
225 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_VAL GENMASK(5, 4)
226 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_PWR_OVRD BIT(24)
227 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ BIT(8)
228 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ_OVRD BIT(9)
229 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_MASK GENMASK(13, 12)
230 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_VAL GENMASK(13, 12)
231 #define XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_PWR_OVRD BIT(25)
232 
233 #define XUSB_PADCTL_UPHY_PLL_S0_CTL1 0x860
234 
235 #define XUSB_PADCTL_UPHY_PLL_S0_CTL2 0x864
236 
237 #define XUSB_PADCTL_UPHY_PLL_S0_CTL4 0x86c
238 
239 #define XUSB_PADCTL_UPHY_PLL_S0_CTL5 0x870
240 
241 #define XUSB_PADCTL_UPHY_PLL_S0_CTL8 0x87c
242 
243 #define XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL1 0x960
244 #define XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL2 0x964
245 
246 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL1(x) (0xa60 + (x) * 0x40)
247 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_SHIFT 16
248 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_MASK 0x3
249 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_VAL 0x2
250 
251 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL2(x) (0xa64 + (x) * 0x40)
252 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_SHIFT 0
253 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_MASK 0xffff
254 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_VAL 0x00fc
255 
256 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL3(x) (0xa68 + (x) * 0x40)
257 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL3_RX_DFE_VAL 0xc0077f1f
258 
259 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL4(x) (0xa6c + (x) * 0x40)
260 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_SHIFT 16
261 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_MASK 0xffff
262 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_VAL 0x01c7
263 
264 #define XUSB_PADCTL_UPHY_USB3_PADX_ECTL6(x) (0xa74 + (x) * 0x40)
265 #define XUSB_PADCTL_UPHY_USB3_PAD_ECTL6_RX_EQ_CTRL_H_VAL 0xfcf01368
266 
267 #define XUSB_PADCTL_USB2_VBUS_ID 0xc60
268 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON (1 << 14)
269 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT 18
270 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_MASK 0xf
271 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_FLOATING 8
272 #define XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_GROUNDED 0
273 
274 /* USB2 SLEEPWALK registers */
275 #define UTMIP(_port, _offset1, _offset2) \
276 		(((_port) <= 2) ? (_offset1) : (_offset2))
277 
278 #define PMC_UTMIP_UHSIC_SLEEP_CFG(x)	UTMIP(x, 0x1fc, 0x4d0)
279 #define   UTMIP_MASTER_ENABLE(x)		UTMIP(x, BIT(8 * (x)), BIT(0))
280 #define   UTMIP_FSLS_USE_PMC(x)			UTMIP(x, BIT(8 * (x) + 1), \
281 							BIT(1))
282 #define   UTMIP_PCTRL_USE_PMC(x)		UTMIP(x, BIT(8 * (x) + 2), \
283 							BIT(2))
284 #define   UTMIP_TCTRL_USE_PMC(x)		UTMIP(x, BIT(8 * (x) + 3), \
285 							BIT(3))
286 #define   UTMIP_WAKE_VAL(_port, _value)		(((_value) & 0xf) << \
287 					(UTMIP(_port, 8 * (_port) + 4, 4)))
288 #define   UTMIP_WAKE_VAL_NONE(_port)		UTMIP_WAKE_VAL(_port, 12)
289 #define   UTMIP_WAKE_VAL_ANY(_port)		UTMIP_WAKE_VAL(_port, 15)
290 
291 #define PMC_UTMIP_UHSIC_SLEEP_CFG1	(0x4d0)
292 #define   UTMIP_RPU_SWITC_LOW_USE_PMC_PX(x)	BIT((x) + 8)
293 #define   UTMIP_RPD_CTRL_USE_PMC_PX(x)		BIT((x) + 16)
294 
295 #define PMC_UTMIP_MASTER_CONFIG		(0x274)
296 #define   UTMIP_PWR(x)				UTMIP(x, BIT(x), BIT(4))
297 #define   UHSIC_PWR				BIT(3)
298 
299 #define PMC_USB_DEBOUNCE_DEL		(0xec)
300 #define   DEBOUNCE_VAL(x)			(((x) & 0xffff) << 0)
301 #define   UTMIP_LINE_DEB_CNT(x)			(((x) & 0xf) << 16)
302 #define   UHSIC_LINE_DEB_CNT(x)			(((x) & 0xf) << 20)
303 
304 #define PMC_UTMIP_UHSIC_FAKE(x)		UTMIP(x, 0x218, 0x294)
305 #define   UTMIP_FAKE_USBOP_VAL(x)		UTMIP(x, BIT(4 * (x)), BIT(8))
306 #define   UTMIP_FAKE_USBON_VAL(x)		UTMIP(x, BIT(4 * (x) + 1), \
307 							BIT(9))
308 #define   UTMIP_FAKE_USBOP_EN(x)		UTMIP(x, BIT(4 * (x) + 2), \
309 							BIT(10))
310 #define   UTMIP_FAKE_USBON_EN(x)		UTMIP(x, BIT(4 * (x) + 3), \
311 							BIT(11))
312 
313 #define PMC_UTMIP_UHSIC_SLEEPWALK_CFG(x)	UTMIP(x, 0x200, 0x288)
314 #define   UTMIP_LINEVAL_WALK_EN(x)		UTMIP(x, BIT(8 * (x) + 7), \
315 							BIT(15))
316 
317 #define PMC_USB_AO			(0xf0)
318 #define   USBOP_VAL_PD(x)			UTMIP(x, BIT(4 * (x)), BIT(20))
319 #define   USBON_VAL_PD(x)			UTMIP(x, BIT(4 * (x) + 1), \
320 							BIT(21))
321 #define   STROBE_VAL_PD				BIT(12)
322 #define   DATA0_VAL_PD				BIT(13)
323 #define   DATA1_VAL_PD				BIT(24)
324 
325 #define PMC_UTMIP_UHSIC_SAVED_STATE(x)	UTMIP(x, 0x1f0, 0x280)
326 #define   SPEED(_port, _value)			(((_value) & 0x3) << \
327 						(UTMIP(_port, 8 * (_port), 8)))
328 #define   UTMI_HS(_port)			SPEED(_port, 0)
329 #define   UTMI_FS(_port)			SPEED(_port, 1)
330 #define   UTMI_LS(_port)			SPEED(_port, 2)
331 #define   UTMI_RST(_port)			SPEED(_port, 3)
332 
333 #define PMC_UTMIP_UHSIC_TRIGGERS		(0x1ec)
334 #define   UTMIP_CLR_WALK_PTR(x)			UTMIP(x, BIT(x), BIT(16))
335 #define   UTMIP_CAP_CFG(x)			UTMIP(x, BIT((x) + 4), BIT(17))
336 #define   UTMIP_CLR_WAKE_ALARM(x)		UTMIP(x, BIT((x) + 12), \
337 							BIT(19))
338 #define   UHSIC_CLR_WALK_PTR			BIT(3)
339 #define   UHSIC_CLR_WAKE_ALARM			BIT(15)
340 
341 #define PMC_UTMIP_SLEEPWALK_PX(x)	UTMIP(x, 0x204 + (4 * (x)), \
342 							0x4e0)
343 /* phase A */
344 #define   UTMIP_USBOP_RPD_A			BIT(0)
345 #define   UTMIP_USBON_RPD_A			BIT(1)
346 #define   UTMIP_AP_A				BIT(4)
347 #define   UTMIP_AN_A				BIT(5)
348 #define   UTMIP_HIGHZ_A				BIT(6)
349 /* phase B */
350 #define   UTMIP_USBOP_RPD_B			BIT(8)
351 #define   UTMIP_USBON_RPD_B			BIT(9)
352 #define   UTMIP_AP_B				BIT(12)
353 #define   UTMIP_AN_B				BIT(13)
354 #define   UTMIP_HIGHZ_B				BIT(14)
355 /* phase C */
356 #define   UTMIP_USBOP_RPD_C			BIT(16)
357 #define   UTMIP_USBON_RPD_C			BIT(17)
358 #define   UTMIP_AP_C				BIT(20)
359 #define   UTMIP_AN_C				BIT(21)
360 #define   UTMIP_HIGHZ_C				BIT(22)
361 /* phase D */
362 #define   UTMIP_USBOP_RPD_D			BIT(24)
363 #define   UTMIP_USBON_RPD_D			BIT(25)
364 #define   UTMIP_AP_D				BIT(28)
365 #define   UTMIP_AN_D				BIT(29)
366 #define   UTMIP_HIGHZ_D				BIT(30)
367 
368 #define PMC_UTMIP_UHSIC_LINE_WAKEUP	(0x26c)
369 #define   UTMIP_LINE_WAKEUP_EN(x)		UTMIP(x, BIT(x), BIT(4))
370 #define   UHSIC_LINE_WAKEUP_EN			BIT(3)
371 
372 #define PMC_UTMIP_TERM_PAD_CFG		(0x1f8)
373 #define   PCTRL_VAL(x)				(((x) & 0x3f) << 1)
374 #define   TCTRL_VAL(x)				(((x) & 0x3f) << 7)
375 
376 #define PMC_UTMIP_PAD_CFGX(x)		(0x4c0 + (4 * (x)))
377 #define   RPD_CTRL_PX(x)			(((x) & 0x1f) << 22)
378 
379 #define PMC_UHSIC_SLEEP_CFG	PMC_UTMIP_UHSIC_SLEEP_CFG(0)
380 #define   UHSIC_MASTER_ENABLE			BIT(24)
381 #define   UHSIC_WAKE_VAL(_value)		(((_value) & 0xf) << 28)
382 #define   UHSIC_WAKE_VAL_SD10			UHSIC_WAKE_VAL(2)
383 #define   UHSIC_WAKE_VAL_NONE			UHSIC_WAKE_VAL(12)
384 
385 #define PMC_UHSIC_FAKE			PMC_UTMIP_UHSIC_FAKE(0)
386 #define   UHSIC_FAKE_STROBE_VAL			BIT(12)
387 #define   UHSIC_FAKE_DATA_VAL			BIT(13)
388 #define   UHSIC_FAKE_STROBE_EN			BIT(14)
389 #define   UHSIC_FAKE_DATA_EN			BIT(15)
390 
391 #define PMC_UHSIC_SAVED_STATE		PMC_UTMIP_UHSIC_SAVED_STATE(0)
392 #define   UHSIC_MODE(_value)			(((_value) & 0x1) << 24)
393 #define   UHSIC_HS				UHSIC_MODE(0)
394 #define   UHSIC_RST				UHSIC_MODE(1)
395 
396 #define PMC_UHSIC_SLEEPWALK_CFG		PMC_UTMIP_UHSIC_SLEEPWALK_CFG(0)
397 #define   UHSIC_WAKE_WALK_EN			BIT(30)
398 #define   UHSIC_LINEVAL_WALK_EN			BIT(31)
399 
400 #define PMC_UHSIC_SLEEPWALK_P0		(0x210)
401 #define   UHSIC_DATA0_RPD_A			BIT(1)
402 #define   UHSIC_DATA0_RPU_B			BIT(11)
403 #define   UHSIC_DATA0_RPU_C			BIT(19)
404 #define   UHSIC_DATA0_RPU_D			BIT(27)
405 #define   UHSIC_STROBE_RPU_A			BIT(2)
406 #define   UHSIC_STROBE_RPD_B			BIT(8)
407 #define   UHSIC_STROBE_RPD_C			BIT(16)
408 #define   UHSIC_STROBE_RPD_D			BIT(24)
409 
410 struct tegra210_xusb_fuse_calibration {
411 	u32 hs_curr_level[4];
412 	u32 hs_term_range_adj;
413 	u32 rpd_ctrl;
414 };
415 
416 struct tegra210_xusb_padctl_context {
417 	u32 usb2_pad_mux;
418 	u32 usb2_port_cap;
419 	u32 ss_port_map;
420 	u32 usb3_pad_mux;
421 };
422 
423 struct tegra210_xusb_padctl {
424 	struct tegra_xusb_padctl base;
425 	struct regmap *regmap;
426 
427 	struct tegra210_xusb_fuse_calibration fuse;
428 	struct tegra210_xusb_padctl_context context;
429 };
430 
431 static inline struct tegra210_xusb_padctl *
432 to_tegra210_xusb_padctl(struct tegra_xusb_padctl *padctl)
433 {
434 	return container_of(padctl, struct tegra210_xusb_padctl, base);
435 }
436 
437 static const struct tegra_xusb_lane_map tegra210_usb3_map[] = {
438 	{ 0, "pcie", 6 },
439 	{ 1, "pcie", 5 },
440 	{ 2, "pcie", 0 },
441 	{ 2, "pcie", 3 },
442 	{ 3, "pcie", 4 },
443 	{ 3, "sata", 0 },
444 	{ 0, NULL,   0 }
445 };
446 
447 static int tegra210_usb3_lane_map(struct tegra_xusb_lane *lane)
448 {
449 	const struct tegra_xusb_lane_map *map;
450 
451 	for (map = tegra210_usb3_map; map->type; map++) {
452 		if (map->index == lane->index &&
453 		    strcmp(map->type, lane->pad->soc->name) == 0) {
454 			dev_dbg(lane->pad->padctl->dev, "lane = %s map to port = usb3-%d\n",
455 				lane->pad->soc->lanes[lane->index].name, map->port);
456 			return map->port;
457 		}
458 	}
459 
460 	return -EINVAL;
461 }
462 
463 /* must be called under padctl->lock */
464 static int tegra210_pex_uphy_enable(struct tegra_xusb_padctl *padctl)
465 {
466 	struct tegra_xusb_pcie_pad *pcie = to_pcie_pad(padctl->pcie);
467 	unsigned long timeout;
468 	u32 value;
469 	unsigned int i;
470 	int err;
471 
472 	if (pcie->enable)
473 		return 0;
474 
475 	err = clk_prepare_enable(pcie->pll);
476 	if (err < 0)
477 		return err;
478 
479 	if (tegra210_plle_hw_sequence_is_enabled())
480 		goto skip_pll_init;
481 
482 	err = reset_control_deassert(pcie->rst);
483 	if (err < 0)
484 		goto disable;
485 
486 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
487 	value &= ~(XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_MASK <<
488 		   XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT);
489 	value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_VAL <<
490 		 XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT;
491 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
492 
493 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL5);
494 	value &= ~(XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_MASK <<
495 		   XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT);
496 	value |= XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_VAL <<
497 		 XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT;
498 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL5);
499 
500 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
501 	value |= XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD;
502 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
503 
504 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
505 	value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD;
506 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
507 
508 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
509 	value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD;
510 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
511 
512 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL4);
513 	value &= ~((XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_MASK <<
514 		    XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT) |
515 		   (XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_MASK <<
516 		    XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_SHIFT));
517 	value |= (XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_USB_VAL <<
518 		  XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT) |
519 		 XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_EN;
520 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL4);
521 
522 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
523 	value &= ~((XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_MASK <<
524 		    XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_SHIFT) |
525 		   (XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_MASK <<
526 		    XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT));
527 	value |= XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_USB_VAL <<
528 		 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT;
529 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
530 
531 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
532 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_IDDQ;
533 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
534 
535 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
536 	value &= ~(XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_MASK <<
537 		   XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_SHIFT);
538 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
539 
540 	usleep_range(10, 20);
541 
542 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL4);
543 	value |= XUSB_PADCTL_UPHY_PLL_CTL4_REFCLKBUF_EN;
544 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL4);
545 
546 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
547 	value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN;
548 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
549 
550 	timeout = jiffies + msecs_to_jiffies(100);
551 
552 	while (time_before(jiffies, timeout)) {
553 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
554 		if (value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE)
555 			break;
556 
557 		usleep_range(10, 20);
558 	}
559 
560 	if (time_after_eq(jiffies, timeout)) {
561 		err = -ETIMEDOUT;
562 		goto reset;
563 	}
564 
565 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
566 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN;
567 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
568 
569 	timeout = jiffies + msecs_to_jiffies(100);
570 
571 	while (time_before(jiffies, timeout)) {
572 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
573 		if (!(value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE))
574 			break;
575 
576 		usleep_range(10, 20);
577 	}
578 
579 	if (time_after_eq(jiffies, timeout)) {
580 		err = -ETIMEDOUT;
581 		goto reset;
582 	}
583 
584 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
585 	value |= XUSB_PADCTL_UPHY_PLL_CTL1_ENABLE;
586 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
587 
588 	timeout = jiffies + msecs_to_jiffies(100);
589 
590 	while (time_before(jiffies, timeout)) {
591 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
592 		if (value & XUSB_PADCTL_UPHY_PLL_CTL1_LOCKDET_STATUS)
593 			break;
594 
595 		usleep_range(10, 20);
596 	}
597 
598 	if (time_after_eq(jiffies, timeout)) {
599 		err = -ETIMEDOUT;
600 		goto reset;
601 	}
602 
603 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
604 	value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN |
605 		 XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN;
606 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
607 
608 	timeout = jiffies + msecs_to_jiffies(100);
609 
610 	while (time_before(jiffies, timeout)) {
611 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
612 		if (value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE)
613 			break;
614 
615 		usleep_range(10, 20);
616 	}
617 
618 	if (time_after_eq(jiffies, timeout)) {
619 		err = -ETIMEDOUT;
620 		goto reset;
621 	}
622 
623 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
624 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN;
625 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
626 
627 	timeout = jiffies + msecs_to_jiffies(100);
628 
629 	while (time_before(jiffies, timeout)) {
630 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
631 		if (!(value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE))
632 			break;
633 
634 		usleep_range(10, 20);
635 	}
636 
637 	if (time_after_eq(jiffies, timeout)) {
638 		err = -ETIMEDOUT;
639 		goto reset;
640 	}
641 
642 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
643 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN;
644 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
645 
646 	tegra210_xusb_pll_hw_control_enable();
647 
648 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
649 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD;
650 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL1);
651 
652 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
653 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD;
654 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL2);
655 
656 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
657 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD;
658 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_P0_CTL8);
659 
660 	usleep_range(10, 20);
661 
662 	tegra210_xusb_pll_hw_sequence_start();
663 
664 skip_pll_init:
665 	pcie->enable = true;
666 
667 	for (i = 0; i < padctl->pcie->soc->num_lanes; i++) {
668 		value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
669 		value |= XUSB_PADCTL_USB3_PAD_MUX_PCIE_IDDQ_DISABLE(i);
670 		padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX);
671 	}
672 
673 	return 0;
674 
675 reset:
676 	reset_control_assert(pcie->rst);
677 disable:
678 	clk_disable_unprepare(pcie->pll);
679 	return err;
680 }
681 
682 static void tegra210_pex_uphy_disable(struct tegra_xusb_padctl *padctl)
683 {
684 	struct tegra_xusb_pcie_pad *pcie = to_pcie_pad(padctl->pcie);
685 	u32 value;
686 	unsigned int i;
687 
688 	if (WARN_ON(!pcie->enable))
689 		return;
690 
691 	pcie->enable = false;
692 
693 	for (i = 0; i < padctl->pcie->soc->num_lanes; i++) {
694 		value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
695 		value &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_IDDQ_DISABLE(i);
696 		padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX);
697 	}
698 
699 	clk_disable_unprepare(pcie->pll);
700 }
701 
702 /* must be called under padctl->lock */
703 static int tegra210_sata_uphy_enable(struct tegra_xusb_padctl *padctl)
704 {
705 	struct tegra_xusb_sata_pad *sata = to_sata_pad(padctl->sata);
706 	struct tegra_xusb_lane *lane = tegra_xusb_find_lane(padctl, "sata", 0);
707 	unsigned long timeout;
708 	u32 value;
709 	unsigned int i;
710 	int err;
711 	bool usb;
712 
713 	if (sata->enable)
714 		return 0;
715 
716 	if (IS_ERR(lane))
717 		return 0;
718 
719 	if (tegra210_plle_hw_sequence_is_enabled())
720 		goto skip_pll_init;
721 
722 	usb = tegra_xusb_lane_check(lane, "usb3-ss");
723 
724 	err = clk_prepare_enable(sata->pll);
725 	if (err < 0)
726 		return err;
727 
728 	err = reset_control_deassert(sata->rst);
729 	if (err < 0)
730 		goto disable;
731 
732 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
733 	value &= ~(XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_MASK <<
734 		   XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT);
735 	value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_VAL <<
736 		 XUSB_PADCTL_UPHY_PLL_CTL2_CAL_CTRL_SHIFT;
737 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
738 
739 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL5);
740 	value &= ~(XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_MASK <<
741 		   XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT);
742 	value |= XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_VAL <<
743 		 XUSB_PADCTL_UPHY_PLL_CTL5_DCO_CTRL_SHIFT;
744 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL5);
745 
746 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
747 	value |= XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD;
748 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
749 
750 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
751 	value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD;
752 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
753 
754 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
755 	value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD;
756 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
757 
758 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL4);
759 	value &= ~((XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_MASK <<
760 		    XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT) |
761 		   (XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_MASK <<
762 		    XUSB_PADCTL_UPHY_PLL_CTL4_REFCLK_SEL_SHIFT));
763 	value |= XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_EN;
764 
765 	if (usb)
766 		value |= (XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_USB_VAL <<
767 			  XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT);
768 	else
769 		value |= (XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SATA_VAL <<
770 			  XUSB_PADCTL_UPHY_PLL_CTL4_TXCLKREF_SEL_SHIFT);
771 
772 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL4_XDIGCLK_EN;
773 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL4);
774 
775 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
776 	value &= ~((XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_MASK <<
777 		    XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_MDIV_SHIFT) |
778 		   (XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_MASK <<
779 		    XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT));
780 
781 	if (usb)
782 		value |= XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_USB_VAL <<
783 			 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT;
784 	else
785 		value |= XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SATA_VAL <<
786 			 XUSB_PADCTL_UPHY_PLL_CTL1_FREQ_NDIV_SHIFT;
787 
788 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
789 
790 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
791 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_IDDQ;
792 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
793 
794 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
795 	value &= ~(XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_MASK <<
796 		   XUSB_PADCTL_UPHY_PLL_CTL1_SLEEP_SHIFT);
797 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
798 
799 	usleep_range(10, 20);
800 
801 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL4);
802 	value |= XUSB_PADCTL_UPHY_PLL_CTL4_REFCLKBUF_EN;
803 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL4);
804 
805 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
806 	value |= XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN;
807 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
808 
809 	timeout = jiffies + msecs_to_jiffies(100);
810 
811 	while (time_before(jiffies, timeout)) {
812 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
813 		if (value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE)
814 			break;
815 
816 		usleep_range(10, 20);
817 	}
818 
819 	if (time_after_eq(jiffies, timeout)) {
820 		err = -ETIMEDOUT;
821 		goto reset;
822 	}
823 
824 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
825 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_EN;
826 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
827 
828 	timeout = jiffies + msecs_to_jiffies(100);
829 
830 	while (time_before(jiffies, timeout)) {
831 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
832 		if (!(value & XUSB_PADCTL_UPHY_PLL_CTL2_CAL_DONE))
833 			break;
834 
835 		usleep_range(10, 20);
836 	}
837 
838 	if (time_after_eq(jiffies, timeout)) {
839 		err = -ETIMEDOUT;
840 		goto reset;
841 	}
842 
843 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
844 	value |= XUSB_PADCTL_UPHY_PLL_CTL1_ENABLE;
845 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
846 
847 	timeout = jiffies + msecs_to_jiffies(100);
848 
849 	while (time_before(jiffies, timeout)) {
850 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
851 		if (value & XUSB_PADCTL_UPHY_PLL_CTL1_LOCKDET_STATUS)
852 			break;
853 
854 		usleep_range(10, 20);
855 	}
856 
857 	if (time_after_eq(jiffies, timeout)) {
858 		err = -ETIMEDOUT;
859 		goto reset;
860 	}
861 
862 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
863 	value |= XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN |
864 		 XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN;
865 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
866 
867 	timeout = jiffies + msecs_to_jiffies(100);
868 
869 	while (time_before(jiffies, timeout)) {
870 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
871 		if (value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE)
872 			break;
873 
874 		usleep_range(10, 20);
875 	}
876 
877 	if (time_after_eq(jiffies, timeout)) {
878 		err = -ETIMEDOUT;
879 		goto reset;
880 	}
881 
882 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
883 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_EN;
884 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
885 
886 	timeout = jiffies + msecs_to_jiffies(100);
887 
888 	while (time_before(jiffies, timeout)) {
889 		value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
890 		if (!(value & XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_DONE))
891 			break;
892 
893 		usleep_range(10, 20);
894 	}
895 
896 	if (time_after_eq(jiffies, timeout)) {
897 		err = -ETIMEDOUT;
898 		goto reset;
899 	}
900 
901 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
902 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_CLK_EN;
903 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
904 
905 	tegra210_sata_pll_hw_control_enable();
906 
907 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
908 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL1_PWR_OVRD;
909 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL1);
910 
911 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
912 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL2_CAL_OVRD;
913 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL2);
914 
915 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
916 	value &= ~XUSB_PADCTL_UPHY_PLL_CTL8_RCAL_OVRD;
917 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_PLL_S0_CTL8);
918 
919 	usleep_range(10, 20);
920 
921 	tegra210_sata_pll_hw_sequence_start();
922 
923 skip_pll_init:
924 	sata->enable = true;
925 
926 	for (i = 0; i < padctl->sata->soc->num_lanes; i++) {
927 		value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
928 		value |= XUSB_PADCTL_USB3_PAD_MUX_SATA_IDDQ_DISABLE(i);
929 		padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX);
930 	}
931 
932 	return 0;
933 
934 reset:
935 	reset_control_assert(sata->rst);
936 disable:
937 	clk_disable_unprepare(sata->pll);
938 	return err;
939 }
940 
941 static void tegra210_sata_uphy_disable(struct tegra_xusb_padctl *padctl)
942 {
943 	struct tegra_xusb_sata_pad *sata = to_sata_pad(padctl->sata);
944 	u32 value;
945 	unsigned int i;
946 
947 	if (WARN_ON(!sata->enable))
948 		return;
949 
950 	sata->enable = false;
951 
952 	for (i = 0; i < padctl->sata->soc->num_lanes; i++) {
953 		value = padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
954 		value &= ~XUSB_PADCTL_USB3_PAD_MUX_SATA_IDDQ_DISABLE(i);
955 		padctl_writel(padctl, value, XUSB_PADCTL_USB3_PAD_MUX);
956 	}
957 
958 	clk_disable_unprepare(sata->pll);
959 }
960 
961 static void tegra210_aux_mux_lp0_clamp_disable(struct tegra_xusb_padctl *padctl)
962 {
963 	u32 value;
964 
965 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
966 	value &= ~XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN;
967 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
968 
969 	usleep_range(100, 200);
970 
971 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
972 	value &= ~XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN_EARLY;
973 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
974 
975 	usleep_range(100, 200);
976 
977 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
978 	value &= ~XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN;
979 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
980 }
981 
982 static void tegra210_aux_mux_lp0_clamp_enable(struct tegra_xusb_padctl *padctl)
983 {
984 	u32 value;
985 
986 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
987 	value |= XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN;
988 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
989 
990 	usleep_range(100, 200);
991 
992 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
993 	value |= XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN_EARLY;
994 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
995 
996 	usleep_range(100, 200);
997 
998 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
999 	value |= XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_CLAMP_EN;
1000 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1001 }
1002 
1003 static int tegra210_uphy_init(struct tegra_xusb_padctl *padctl)
1004 {
1005 	if (padctl->pcie)
1006 		tegra210_pex_uphy_enable(padctl);
1007 
1008 	if (padctl->sata)
1009 		tegra210_sata_uphy_enable(padctl);
1010 
1011 	if (!tegra210_plle_hw_sequence_is_enabled())
1012 		tegra210_plle_hw_sequence_start();
1013 	else
1014 		dev_dbg(padctl->dev, "PLLE is already in HW control\n");
1015 
1016 	tegra210_aux_mux_lp0_clamp_disable(padctl);
1017 
1018 	return 0;
1019 }
1020 
1021 static void __maybe_unused
1022 tegra210_uphy_deinit(struct tegra_xusb_padctl *padctl)
1023 {
1024 	tegra210_aux_mux_lp0_clamp_enable(padctl);
1025 
1026 	if (padctl->sata)
1027 		tegra210_sata_uphy_disable(padctl);
1028 
1029 	if (padctl->pcie)
1030 		tegra210_pex_uphy_disable(padctl);
1031 }
1032 
1033 static int tegra210_hsic_set_idle(struct tegra_xusb_padctl *padctl,
1034 				  unsigned int index, bool idle)
1035 {
1036 	u32 value;
1037 
1038 	value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL0(index));
1039 
1040 	value &= ~(XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA0 |
1041 		   XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA1 |
1042 		   XUSB_PADCTL_HSIC_PAD_CTL0_RPD_STROBE);
1043 
1044 	if (idle)
1045 		value |= XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA0 |
1046 			 XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA1 |
1047 			 XUSB_PADCTL_HSIC_PAD_CTL0_RPU_STROBE;
1048 	else
1049 		value &= ~(XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA0 |
1050 			   XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA1 |
1051 			   XUSB_PADCTL_HSIC_PAD_CTL0_RPU_STROBE);
1052 
1053 	padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL0(index));
1054 
1055 	return 0;
1056 }
1057 
1058 static int tegra210_usb3_enable_phy_sleepwalk(struct tegra_xusb_lane *lane,
1059 					      enum usb_device_speed speed)
1060 {
1061 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1062 	int port = tegra210_usb3_lane_map(lane);
1063 	struct device *dev = padctl->dev;
1064 	u32 value;
1065 
1066 	if (port < 0) {
1067 		dev_err(dev, "invalid usb3 port number\n");
1068 		return -EINVAL;
1069 	}
1070 
1071 	mutex_lock(&padctl->lock);
1072 
1073 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1074 	value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(port);
1075 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1076 
1077 	usleep_range(100, 200);
1078 
1079 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1080 	value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(port);
1081 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1082 
1083 	usleep_range(250, 350);
1084 
1085 	mutex_unlock(&padctl->lock);
1086 
1087 	return 0;
1088 }
1089 
1090 static int tegra210_usb3_disable_phy_sleepwalk(struct tegra_xusb_lane *lane)
1091 {
1092 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1093 	int port = tegra210_usb3_lane_map(lane);
1094 	struct device *dev = padctl->dev;
1095 	u32 value;
1096 
1097 	if (port < 0) {
1098 		dev_err(dev, "invalid usb3 port number\n");
1099 		return -EINVAL;
1100 	}
1101 
1102 	mutex_lock(&padctl->lock);
1103 
1104 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1105 	value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(port);
1106 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1107 
1108 	usleep_range(100, 200);
1109 
1110 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1111 	value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(port);
1112 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1113 
1114 	mutex_unlock(&padctl->lock);
1115 
1116 	return 0;
1117 }
1118 
1119 static int tegra210_usb3_enable_phy_wake(struct tegra_xusb_lane *lane)
1120 {
1121 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1122 	int port = tegra210_usb3_lane_map(lane);
1123 	struct device *dev = padctl->dev;
1124 	u32 value;
1125 
1126 	if (port < 0) {
1127 		dev_err(dev, "invalid usb3 port number\n");
1128 		return -EINVAL;
1129 	}
1130 
1131 	mutex_lock(&padctl->lock);
1132 
1133 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1134 	value &= ~ALL_WAKE_EVENTS;
1135 	value |= SS_PORT_WAKEUP_EVENT(port);
1136 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1137 
1138 	usleep_range(10, 20);
1139 
1140 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1141 	value &= ~ALL_WAKE_EVENTS;
1142 	value |= SS_PORT_WAKE_INTERRUPT_ENABLE(port);
1143 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1144 
1145 	mutex_unlock(&padctl->lock);
1146 
1147 	return 0;
1148 }
1149 
1150 static int tegra210_usb3_disable_phy_wake(struct tegra_xusb_lane *lane)
1151 {
1152 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1153 	int port = tegra210_usb3_lane_map(lane);
1154 	struct device *dev = padctl->dev;
1155 	u32 value;
1156 
1157 	if (port < 0) {
1158 		dev_err(dev, "invalid usb3 port number\n");
1159 		return -EINVAL;
1160 	}
1161 
1162 	mutex_lock(&padctl->lock);
1163 
1164 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1165 	value &= ~ALL_WAKE_EVENTS;
1166 	value &= ~SS_PORT_WAKE_INTERRUPT_ENABLE(port);
1167 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1168 
1169 	usleep_range(10, 20);
1170 
1171 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1172 	value &= ~ALL_WAKE_EVENTS;
1173 	value |= SS_PORT_WAKEUP_EVENT(port);
1174 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1175 
1176 	mutex_unlock(&padctl->lock);
1177 
1178 	return 0;
1179 }
1180 
1181 static bool tegra210_usb3_phy_remote_wake_detected(struct tegra_xusb_lane *lane)
1182 {
1183 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1184 	int index = tegra210_usb3_lane_map(lane);
1185 	u32 value;
1186 
1187 	if (index < 0)
1188 		return false;
1189 
1190 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1191 	if ((value & SS_PORT_WAKE_INTERRUPT_ENABLE(index)) && (value & SS_PORT_WAKEUP_EVENT(index)))
1192 		return true;
1193 
1194 	return false;
1195 }
1196 
1197 static int tegra210_utmi_enable_phy_wake(struct tegra_xusb_lane *lane)
1198 {
1199 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1200 	unsigned int index = lane->index;
1201 	u32 value;
1202 
1203 	mutex_lock(&padctl->lock);
1204 
1205 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1206 	value &= ~ALL_WAKE_EVENTS;
1207 	value |= USB2_PORT_WAKEUP_EVENT(index);
1208 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1209 
1210 	usleep_range(10, 20);
1211 
1212 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1213 	value &= ~ALL_WAKE_EVENTS;
1214 	value |= USB2_PORT_WAKE_INTERRUPT_ENABLE(index);
1215 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1216 
1217 	mutex_unlock(&padctl->lock);
1218 
1219 	return 0;
1220 }
1221 
1222 static int tegra210_utmi_disable_phy_wake(struct tegra_xusb_lane *lane)
1223 {
1224 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1225 	unsigned int index = lane->index;
1226 	u32 value;
1227 
1228 	mutex_lock(&padctl->lock);
1229 
1230 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1231 	value &= ~ALL_WAKE_EVENTS;
1232 	value &= ~USB2_PORT_WAKE_INTERRUPT_ENABLE(index);
1233 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1234 
1235 	usleep_range(10, 20);
1236 
1237 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1238 	value &= ~ALL_WAKE_EVENTS;
1239 	value |= USB2_PORT_WAKEUP_EVENT(index);
1240 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1241 
1242 	mutex_unlock(&padctl->lock);
1243 
1244 	return 0;
1245 }
1246 
1247 static bool tegra210_utmi_phy_remote_wake_detected(struct tegra_xusb_lane *lane)
1248 {
1249 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1250 	unsigned int index = lane->index;
1251 	u32 value;
1252 
1253 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1254 	if ((value & USB2_PORT_WAKE_INTERRUPT_ENABLE(index)) &&
1255 	    (value & USB2_PORT_WAKEUP_EVENT(index)))
1256 		return true;
1257 
1258 	return false;
1259 }
1260 
1261 static int tegra210_hsic_enable_phy_wake(struct tegra_xusb_lane *lane)
1262 {
1263 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1264 	unsigned int index = lane->index;
1265 	u32 value;
1266 
1267 	mutex_lock(&padctl->lock);
1268 
1269 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1270 	value &= ~ALL_WAKE_EVENTS;
1271 	value |= USB2_HSIC_PORT_WAKEUP_EVENT(index);
1272 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1273 
1274 	usleep_range(10, 20);
1275 
1276 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1277 	value &= ~ALL_WAKE_EVENTS;
1278 	value |= USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(index);
1279 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1280 
1281 	mutex_unlock(&padctl->lock);
1282 
1283 	return 0;
1284 }
1285 
1286 static int tegra210_hsic_disable_phy_wake(struct tegra_xusb_lane *lane)
1287 {
1288 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1289 	unsigned int index = lane->index;
1290 	u32 value;
1291 
1292 	mutex_lock(&padctl->lock);
1293 
1294 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1295 	value &= ~ALL_WAKE_EVENTS;
1296 	value &= ~USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(index);
1297 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1298 
1299 	usleep_range(10, 20);
1300 
1301 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1302 	value &= ~ALL_WAKE_EVENTS;
1303 	value |= USB2_HSIC_PORT_WAKEUP_EVENT(index);
1304 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM_0);
1305 
1306 	mutex_unlock(&padctl->lock);
1307 
1308 	return 0;
1309 }
1310 
1311 static bool tegra210_hsic_phy_remote_wake_detected(struct tegra_xusb_lane *lane)
1312 {
1313 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1314 	unsigned int index = lane->index;
1315 	u32 value;
1316 
1317 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM_0);
1318 	if ((value & USB2_HSIC_PORT_WAKE_INTERRUPT_ENABLE(index)) &&
1319 	    (value & USB2_HSIC_PORT_WAKEUP_EVENT(index)))
1320 		return true;
1321 
1322 	return false;
1323 }
1324 
1325 #define padctl_pmc_readl(_priv, _offset)						\
1326 ({											\
1327 	u32 value;									\
1328 	WARN(regmap_read(_priv->regmap, _offset, &value), "read %s failed\n", #_offset);\
1329 	value;										\
1330 })
1331 
1332 #define padctl_pmc_writel(_priv, _value, _offset)					\
1333 	WARN(regmap_write(_priv->regmap, _offset, _value), "write %s failed\n", #_offset)
1334 
1335 static int tegra210_pmc_utmi_enable_phy_sleepwalk(struct tegra_xusb_lane *lane,
1336 						  enum usb_device_speed speed)
1337 {
1338 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1339 	struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1340 	unsigned int port = lane->index;
1341 	u32 value, tctrl, pctrl, rpd_ctrl;
1342 
1343 	if (!priv->regmap)
1344 		return -EOPNOTSUPP;
1345 
1346 	if (speed > USB_SPEED_HIGH)
1347 		return -EINVAL;
1348 
1349 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
1350 	tctrl = TCTRL_VALUE(value);
1351 	pctrl = PCTRL_VALUE(value);
1352 
1353 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(port));
1354 	rpd_ctrl = RPD_CTRL_VALUE(value);
1355 
1356 	/* ensure sleepwalk logic is disabled */
1357 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1358 	value &= ~UTMIP_MASTER_ENABLE(port);
1359 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1360 
1361 	/* ensure sleepwalk logics are in low power mode */
1362 	value = padctl_pmc_readl(priv, PMC_UTMIP_MASTER_CONFIG);
1363 	value |= UTMIP_PWR(port);
1364 	padctl_pmc_writel(priv, value, PMC_UTMIP_MASTER_CONFIG);
1365 
1366 	/* set debounce time */
1367 	value = padctl_pmc_readl(priv, PMC_USB_DEBOUNCE_DEL);
1368 	value &= ~UTMIP_LINE_DEB_CNT(~0);
1369 	value |= UTMIP_LINE_DEB_CNT(0x1);
1370 	padctl_pmc_writel(priv, value, PMC_USB_DEBOUNCE_DEL);
1371 
1372 	/* ensure fake events of sleepwalk logic are desiabled */
1373 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_FAKE(port));
1374 	value &= ~(UTMIP_FAKE_USBOP_VAL(port) | UTMIP_FAKE_USBON_VAL(port) |
1375 		   UTMIP_FAKE_USBOP_EN(port) | UTMIP_FAKE_USBON_EN(port));
1376 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_FAKE(port));
1377 
1378 	/* ensure wake events of sleepwalk logic are not latched */
1379 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1380 	value &= ~UTMIP_LINE_WAKEUP_EN(port);
1381 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1382 
1383 	/* disable wake event triggers of sleepwalk logic */
1384 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1385 	value &= ~UTMIP_WAKE_VAL(port, ~0);
1386 	value |= UTMIP_WAKE_VAL_NONE(port);
1387 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1388 
1389 	/* power down the line state detectors of the pad */
1390 	value = padctl_pmc_readl(priv, PMC_USB_AO);
1391 	value |= (USBOP_VAL_PD(port) | USBON_VAL_PD(port));
1392 	padctl_pmc_writel(priv, value, PMC_USB_AO);
1393 
1394 	/* save state per speed */
1395 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SAVED_STATE(port));
1396 	value &= ~SPEED(port, ~0);
1397 
1398 	switch (speed) {
1399 	case USB_SPEED_HIGH:
1400 		value |= UTMI_HS(port);
1401 		break;
1402 
1403 	case USB_SPEED_FULL:
1404 		value |= UTMI_FS(port);
1405 		break;
1406 
1407 	case USB_SPEED_LOW:
1408 		value |= UTMI_LS(port);
1409 		break;
1410 
1411 	default:
1412 		value |= UTMI_RST(port);
1413 		break;
1414 	}
1415 
1416 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SAVED_STATE(port));
1417 
1418 	/* enable the trigger of the sleepwalk logic */
1419 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEPWALK_CFG(port));
1420 	value |= UTMIP_LINEVAL_WALK_EN(port);
1421 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEPWALK_CFG(port));
1422 
1423 	/*
1424 	 * Reset the walk pointer and clear the alarm of the sleepwalk logic,
1425 	 * as well as capture the configuration of the USB2.0 pad.
1426 	 */
1427 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1428 	value |= UTMIP_CLR_WALK_PTR(port) | UTMIP_CLR_WAKE_ALARM(port) | UTMIP_CAP_CFG(port);
1429 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_TRIGGERS);
1430 
1431 	/* program electrical parameters read from XUSB PADCTL */
1432 	value = padctl_pmc_readl(priv, PMC_UTMIP_TERM_PAD_CFG);
1433 	value &= ~(TCTRL_VAL(~0) | PCTRL_VAL(~0));
1434 	value |= (TCTRL_VAL(tctrl) | PCTRL_VAL(pctrl));
1435 	padctl_pmc_writel(priv, value, PMC_UTMIP_TERM_PAD_CFG);
1436 
1437 	value = padctl_pmc_readl(priv, PMC_UTMIP_PAD_CFGX(port));
1438 	value &= ~RPD_CTRL_PX(~0);
1439 	value |= RPD_CTRL_PX(rpd_ctrl);
1440 	padctl_pmc_writel(priv, value, PMC_UTMIP_PAD_CFGX(port));
1441 
1442 	/*
1443 	 * Set up the pull-ups and pull-downs of the signals during the four
1444 	 * stages of sleepwalk. If a device is connected, program sleepwalk
1445 	 * logic to maintain a J and keep driving K upon seeing remote wake.
1446 	 */
1447 	value = padctl_pmc_readl(priv, PMC_UTMIP_SLEEPWALK_PX(port));
1448 	value = UTMIP_USBOP_RPD_A | UTMIP_USBOP_RPD_B | UTMIP_USBOP_RPD_C | UTMIP_USBOP_RPD_D;
1449 	value |= UTMIP_USBON_RPD_A | UTMIP_USBON_RPD_B | UTMIP_USBON_RPD_C | UTMIP_USBON_RPD_D;
1450 
1451 	switch (speed) {
1452 	case USB_SPEED_HIGH:
1453 	case USB_SPEED_FULL:
1454 		/* J state: D+/D- = high/low, K state: D+/D- = low/high */
1455 		value |= UTMIP_HIGHZ_A;
1456 		value |= UTMIP_AP_A;
1457 		value |= UTMIP_AN_B | UTMIP_AN_C | UTMIP_AN_D;
1458 		break;
1459 
1460 	case USB_SPEED_LOW:
1461 		/* J state: D+/D- = low/high, K state: D+/D- = high/low */
1462 		value |= UTMIP_HIGHZ_A;
1463 		value |= UTMIP_AN_A;
1464 		value |= UTMIP_AP_B | UTMIP_AP_C | UTMIP_AP_D;
1465 		break;
1466 
1467 	default:
1468 		value |= UTMIP_HIGHZ_A | UTMIP_HIGHZ_B | UTMIP_HIGHZ_C | UTMIP_HIGHZ_D;
1469 		break;
1470 	}
1471 
1472 	padctl_pmc_writel(priv, value, PMC_UTMIP_SLEEPWALK_PX(port));
1473 
1474 	/* power up the line state detectors of the pad */
1475 	value = padctl_pmc_readl(priv, PMC_USB_AO);
1476 	value &= ~(USBOP_VAL_PD(port) | USBON_VAL_PD(port));
1477 	padctl_pmc_writel(priv, value, PMC_USB_AO);
1478 
1479 	usleep_range(50, 100);
1480 
1481 	/* switch the electric control of the USB2.0 pad to PMC */
1482 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1483 	value |= UTMIP_FSLS_USE_PMC(port) | UTMIP_PCTRL_USE_PMC(port) | UTMIP_TCTRL_USE_PMC(port);
1484 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1485 
1486 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1487 	value |= UTMIP_RPD_CTRL_USE_PMC_PX(port) | UTMIP_RPU_SWITC_LOW_USE_PMC_PX(port);
1488 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1489 
1490 	/* set the wake signaling trigger events */
1491 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1492 	value &= ~UTMIP_WAKE_VAL(port, ~0);
1493 	value |= UTMIP_WAKE_VAL_ANY(port);
1494 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1495 
1496 	/* enable the wake detection */
1497 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1498 	value |= UTMIP_MASTER_ENABLE(port);
1499 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1500 
1501 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1502 	value |= UTMIP_LINE_WAKEUP_EN(port);
1503 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1504 
1505 	return 0;
1506 }
1507 
1508 static int tegra210_pmc_utmi_disable_phy_sleepwalk(struct tegra_xusb_lane *lane)
1509 {
1510 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1511 	struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1512 	unsigned int port = lane->index;
1513 	u32 value;
1514 
1515 	if (!priv->regmap)
1516 		return -EOPNOTSUPP;
1517 
1518 	/* disable the wake detection */
1519 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1520 	value &= ~UTMIP_MASTER_ENABLE(port);
1521 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1522 
1523 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1524 	value &= ~UTMIP_LINE_WAKEUP_EN(port);
1525 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1526 
1527 	/* switch the electric control of the USB2.0 pad to XUSB or USB2 */
1528 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1529 	value &= ~(UTMIP_FSLS_USE_PMC(port) | UTMIP_PCTRL_USE_PMC(port) |
1530 		   UTMIP_TCTRL_USE_PMC(port));
1531 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1532 
1533 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1534 	value &= ~(UTMIP_RPD_CTRL_USE_PMC_PX(port) | UTMIP_RPU_SWITC_LOW_USE_PMC_PX(port));
1535 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG1);
1536 
1537 	/* disable wake event triggers of sleepwalk logic */
1538 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1539 	value &= ~UTMIP_WAKE_VAL(port, ~0);
1540 	value |= UTMIP_WAKE_VAL_NONE(port);
1541 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_SLEEP_CFG(port));
1542 
1543 	/* power down the line state detectors of the port */
1544 	value = padctl_pmc_readl(priv, PMC_USB_AO);
1545 	value |= (USBOP_VAL_PD(port) | USBON_VAL_PD(port));
1546 	padctl_pmc_writel(priv, value, PMC_USB_AO);
1547 
1548 	/* clear alarm of the sleepwalk logic */
1549 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1550 	value |= UTMIP_CLR_WAKE_ALARM(port);
1551 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_TRIGGERS);
1552 
1553 	return 0;
1554 }
1555 
1556 static int tegra210_pmc_hsic_enable_phy_sleepwalk(struct tegra_xusb_lane *lane,
1557 						  enum usb_device_speed speed)
1558 {
1559 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1560 	struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1561 	u32 value;
1562 
1563 	if (!priv->regmap)
1564 		return -EOPNOTSUPP;
1565 
1566 	/* ensure sleepwalk logic is disabled */
1567 	value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1568 	value &= ~UHSIC_MASTER_ENABLE;
1569 	padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1570 
1571 	/* ensure sleepwalk logics are in low power mode */
1572 	value = padctl_pmc_readl(priv, PMC_UTMIP_MASTER_CONFIG);
1573 	value |= UHSIC_PWR;
1574 	padctl_pmc_writel(priv, value, PMC_UTMIP_MASTER_CONFIG);
1575 
1576 	/* set debounce time */
1577 	value = padctl_pmc_readl(priv, PMC_USB_DEBOUNCE_DEL);
1578 	value &= ~UHSIC_LINE_DEB_CNT(~0);
1579 	value |= UHSIC_LINE_DEB_CNT(0x1);
1580 	padctl_pmc_writel(priv, value, PMC_USB_DEBOUNCE_DEL);
1581 
1582 	/* ensure fake events of sleepwalk logic are desiabled */
1583 	value = padctl_pmc_readl(priv, PMC_UHSIC_FAKE);
1584 	value &= ~(UHSIC_FAKE_STROBE_VAL | UHSIC_FAKE_DATA_VAL |
1585 		   UHSIC_FAKE_STROBE_EN | UHSIC_FAKE_DATA_EN);
1586 	padctl_pmc_writel(priv, value, PMC_UHSIC_FAKE);
1587 
1588 	/* ensure wake events of sleepwalk logic are not latched */
1589 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1590 	value &= ~UHSIC_LINE_WAKEUP_EN;
1591 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1592 
1593 	/* disable wake event triggers of sleepwalk logic */
1594 	value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1595 	value &= ~UHSIC_WAKE_VAL(~0);
1596 	value |= UHSIC_WAKE_VAL_NONE;
1597 	padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1598 
1599 	/* power down the line state detectors of the port */
1600 	value = padctl_pmc_readl(priv, PMC_USB_AO);
1601 	value |= STROBE_VAL_PD | DATA0_VAL_PD | DATA1_VAL_PD;
1602 	padctl_pmc_writel(priv, value, PMC_USB_AO);
1603 
1604 	/* save state, HSIC always comes up as HS */
1605 	value = padctl_pmc_readl(priv, PMC_UHSIC_SAVED_STATE);
1606 	value &= ~UHSIC_MODE(~0);
1607 	value |= UHSIC_HS;
1608 	padctl_pmc_writel(priv, value, PMC_UHSIC_SAVED_STATE);
1609 
1610 	/* enable the trigger of the sleepwalk logic */
1611 	value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEPWALK_CFG);
1612 	value |= UHSIC_WAKE_WALK_EN | UHSIC_LINEVAL_WALK_EN;
1613 	padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEPWALK_CFG);
1614 
1615 	/*
1616 	 * Reset the walk pointer and clear the alarm of the sleepwalk logic,
1617 	 * as well as capture the configuration of the USB2.0 port.
1618 	 */
1619 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1620 	value |= UHSIC_CLR_WALK_PTR | UHSIC_CLR_WAKE_ALARM;
1621 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_TRIGGERS);
1622 
1623 	/*
1624 	 * Set up the pull-ups and pull-downs of the signals during the four
1625 	 * stages of sleepwalk. Maintain a HSIC IDLE and keep driving HSIC
1626 	 * RESUME upon remote wake.
1627 	 */
1628 	value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEPWALK_P0);
1629 	value = UHSIC_DATA0_RPD_A | UHSIC_DATA0_RPU_B | UHSIC_DATA0_RPU_C | UHSIC_DATA0_RPU_D |
1630 		UHSIC_STROBE_RPU_A | UHSIC_STROBE_RPD_B | UHSIC_STROBE_RPD_C | UHSIC_STROBE_RPD_D;
1631 	padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEPWALK_P0);
1632 
1633 	/* power up the line state detectors of the port */
1634 	value = padctl_pmc_readl(priv, PMC_USB_AO);
1635 	value &= ~(STROBE_VAL_PD | DATA0_VAL_PD | DATA1_VAL_PD);
1636 	padctl_pmc_writel(priv, value, PMC_USB_AO);
1637 
1638 	usleep_range(50, 100);
1639 
1640 	/* set the wake signaling trigger events */
1641 	value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1642 	value &= ~UHSIC_WAKE_VAL(~0);
1643 	value |= UHSIC_WAKE_VAL_SD10;
1644 	padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1645 
1646 	/* enable the wake detection */
1647 	value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1648 	value |= UHSIC_MASTER_ENABLE;
1649 	padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1650 
1651 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1652 	value |= UHSIC_LINE_WAKEUP_EN;
1653 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1654 
1655 	return 0;
1656 }
1657 
1658 static int tegra210_pmc_hsic_disable_phy_sleepwalk(struct tegra_xusb_lane *lane)
1659 {
1660 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1661 	struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
1662 	u32 value;
1663 
1664 	if (!priv->regmap)
1665 		return -EOPNOTSUPP;
1666 
1667 	/* disable the wake detection */
1668 	value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1669 	value &= ~UHSIC_MASTER_ENABLE;
1670 	padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1671 
1672 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1673 	value &= ~UHSIC_LINE_WAKEUP_EN;
1674 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_LINE_WAKEUP);
1675 
1676 	/* disable wake event triggers of sleepwalk logic */
1677 	value = padctl_pmc_readl(priv, PMC_UHSIC_SLEEP_CFG);
1678 	value &= ~UHSIC_WAKE_VAL(~0);
1679 	value |= UHSIC_WAKE_VAL_NONE;
1680 	padctl_pmc_writel(priv, value, PMC_UHSIC_SLEEP_CFG);
1681 
1682 	/* power down the line state detectors of the port */
1683 	value = padctl_pmc_readl(priv, PMC_USB_AO);
1684 	value |= STROBE_VAL_PD | DATA0_VAL_PD | DATA1_VAL_PD;
1685 	padctl_pmc_writel(priv, value, PMC_USB_AO);
1686 
1687 	/* clear alarm of the sleepwalk logic */
1688 	value = padctl_pmc_readl(priv, PMC_UTMIP_UHSIC_TRIGGERS);
1689 	value |= UHSIC_CLR_WAKE_ALARM;
1690 	padctl_pmc_writel(priv, value, PMC_UTMIP_UHSIC_TRIGGERS);
1691 
1692 	return 0;
1693 }
1694 
1695 static int tegra210_usb3_set_lfps_detect(struct tegra_xusb_padctl *padctl,
1696 					 unsigned int index, bool enable)
1697 {
1698 	struct tegra_xusb_port *port;
1699 	struct tegra_xusb_lane *lane;
1700 	u32 value, offset;
1701 
1702 	port = tegra_xusb_find_port(padctl, "usb3", index);
1703 	if (!port)
1704 		return -ENODEV;
1705 
1706 	lane = port->lane;
1707 
1708 	if (lane->pad == padctl->pcie)
1709 		offset = XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL1(lane->index);
1710 	else
1711 		offset = XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL1;
1712 
1713 	value = padctl_readl(padctl, offset);
1714 
1715 	value &= ~((XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_MASK <<
1716 		    XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_SHIFT) |
1717 		   XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_TERM_EN |
1718 		   XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_MODE_OVRD);
1719 
1720 	if (!enable) {
1721 		value |= (XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_VAL <<
1722 			  XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_IDLE_MODE_SHIFT) |
1723 			 XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_TERM_EN |
1724 			 XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_RX_MODE_OVRD;
1725 	}
1726 
1727 	padctl_writel(padctl, value, offset);
1728 
1729 	return 0;
1730 }
1731 
1732 #define TEGRA210_LANE(_name, _offset, _shift, _mask, _type)		\
1733 	{								\
1734 		.name = _name,						\
1735 		.offset = _offset,					\
1736 		.shift = _shift,					\
1737 		.mask = _mask,						\
1738 		.num_funcs = ARRAY_SIZE(tegra210_##_type##_functions),	\
1739 		.funcs = tegra210_##_type##_functions,			\
1740 	}
1741 
1742 static const char *tegra210_usb2_functions[] = {
1743 	"snps",
1744 	"xusb",
1745 	"uart"
1746 };
1747 
1748 static const struct tegra_xusb_lane_soc tegra210_usb2_lanes[] = {
1749 	TEGRA210_LANE("usb2-0", 0x004,  0, 0x3, usb2),
1750 	TEGRA210_LANE("usb2-1", 0x004,  2, 0x3, usb2),
1751 	TEGRA210_LANE("usb2-2", 0x004,  4, 0x3, usb2),
1752 	TEGRA210_LANE("usb2-3", 0x004,  6, 0x3, usb2),
1753 };
1754 
1755 static struct tegra_xusb_lane *
1756 tegra210_usb2_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
1757 			 unsigned int index)
1758 {
1759 	struct tegra_xusb_usb2_lane *usb2;
1760 	int err;
1761 
1762 	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
1763 	if (!usb2)
1764 		return ERR_PTR(-ENOMEM);
1765 
1766 	INIT_LIST_HEAD(&usb2->base.list);
1767 	usb2->base.soc = &pad->soc->lanes[index];
1768 	usb2->base.index = index;
1769 	usb2->base.pad = pad;
1770 	usb2->base.np = np;
1771 
1772 	err = tegra_xusb_lane_parse_dt(&usb2->base, np);
1773 	if (err < 0) {
1774 		kfree(usb2);
1775 		return ERR_PTR(err);
1776 	}
1777 
1778 	return &usb2->base;
1779 }
1780 
1781 static void tegra210_usb2_lane_remove(struct tegra_xusb_lane *lane)
1782 {
1783 	struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
1784 
1785 	kfree(usb2);
1786 }
1787 
1788 static const struct tegra_xusb_lane_ops tegra210_usb2_lane_ops = {
1789 	.probe = tegra210_usb2_lane_probe,
1790 	.remove = tegra210_usb2_lane_remove,
1791 	.enable_phy_sleepwalk = tegra210_pmc_utmi_enable_phy_sleepwalk,
1792 	.disable_phy_sleepwalk = tegra210_pmc_utmi_disable_phy_sleepwalk,
1793 	.enable_phy_wake = tegra210_utmi_enable_phy_wake,
1794 	.disable_phy_wake = tegra210_utmi_disable_phy_wake,
1795 	.remote_wake_detected = tegra210_utmi_phy_remote_wake_detected,
1796 };
1797 
1798 static int tegra210_usb2_phy_init(struct phy *phy)
1799 {
1800 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1801 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1802 	unsigned int index = lane->index;
1803 	struct tegra_xusb_usb2_port *port;
1804 	int err;
1805 	u32 value;
1806 
1807 	port = tegra_xusb_find_usb2_port(padctl, index);
1808 	if (!port) {
1809 		dev_err(&phy->dev, "no port found for USB2 lane %u\n", index);
1810 		return -ENODEV;
1811 	}
1812 
1813 	if (port->supply && port->mode == USB_DR_MODE_HOST) {
1814 		err = regulator_enable(port->supply);
1815 		if (err)
1816 			return err;
1817 	}
1818 
1819 	mutex_lock(&padctl->lock);
1820 
1821 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX);
1822 	value &= ~(XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_MASK <<
1823 		   XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_SHIFT);
1824 	value |= XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_XUSB <<
1825 		 XUSB_PADCTL_USB2_PAD_MUX_USB2_BIAS_PAD_SHIFT;
1826 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_PAD_MUX);
1827 
1828 	mutex_unlock(&padctl->lock);
1829 
1830 	return 0;
1831 }
1832 
1833 static int tegra210_usb2_phy_exit(struct phy *phy)
1834 {
1835 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1836 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1837 	struct tegra_xusb_usb2_port *port;
1838 	int err;
1839 
1840 	port = tegra_xusb_find_usb2_port(padctl, lane->index);
1841 	if (!port) {
1842 		dev_err(&phy->dev, "no port found for USB2 lane %u\n", lane->index);
1843 		return -ENODEV;
1844 	}
1845 
1846 	if (port->supply && port->mode == USB_DR_MODE_HOST) {
1847 		err = regulator_disable(port->supply);
1848 		if (err)
1849 			return err;
1850 	}
1851 
1852 	return 0;
1853 }
1854 
1855 static int tegra210_xusb_padctl_vbus_override(struct tegra_xusb_padctl *padctl,
1856 					      bool status)
1857 {
1858 	u32 value;
1859 
1860 	dev_dbg(padctl->dev, "%s vbus override\n", status ? "set" : "clear");
1861 
1862 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_VBUS_ID);
1863 
1864 	if (status) {
1865 		value |= XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON;
1866 		value &= ~(XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_MASK <<
1867 			   XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT);
1868 		value |= XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_FLOATING <<
1869 			 XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT;
1870 	} else {
1871 		value &= ~XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON;
1872 	}
1873 
1874 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_VBUS_ID);
1875 
1876 	return 0;
1877 }
1878 
1879 static int tegra210_xusb_padctl_id_override(struct tegra_xusb_padctl *padctl,
1880 					    bool status)
1881 {
1882 	u32 value;
1883 
1884 	dev_dbg(padctl->dev, "%s id override\n", status ? "set" : "clear");
1885 
1886 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_VBUS_ID);
1887 
1888 	if (status) {
1889 		if (value & XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON) {
1890 			value &= ~XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_VBUS_ON;
1891 			padctl_writel(padctl, value, XUSB_PADCTL_USB2_VBUS_ID);
1892 			usleep_range(1000, 2000);
1893 
1894 			value = padctl_readl(padctl, XUSB_PADCTL_USB2_VBUS_ID);
1895 		}
1896 
1897 		value &= ~(XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_MASK <<
1898 			   XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT);
1899 		value |= XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_GROUNDED <<
1900 			 XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT;
1901 	} else {
1902 		value &= ~(XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_MASK <<
1903 			   XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT);
1904 		value |= XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_FLOATING <<
1905 			 XUSB_PADCTL_USB2_VBUS_ID_OVERRIDE_SHIFT;
1906 	}
1907 
1908 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_VBUS_ID);
1909 
1910 	return 0;
1911 }
1912 
1913 static int tegra210_usb2_phy_set_mode(struct phy *phy, enum phy_mode mode,
1914 				      int submode)
1915 {
1916 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1917 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1918 	struct tegra_xusb_usb2_port *port = tegra_xusb_find_usb2_port(padctl,
1919 								lane->index);
1920 	int err = 0;
1921 
1922 	mutex_lock(&padctl->lock);
1923 
1924 	dev_dbg(&port->base.dev, "%s: mode %d", __func__, mode);
1925 
1926 	if (mode == PHY_MODE_USB_OTG) {
1927 		if (submode == USB_ROLE_HOST) {
1928 			tegra210_xusb_padctl_id_override(padctl, true);
1929 
1930 			err = regulator_enable(port->supply);
1931 		} else if (submode == USB_ROLE_DEVICE) {
1932 			tegra210_xusb_padctl_vbus_override(padctl, true);
1933 		} else if (submode == USB_ROLE_NONE) {
1934 			/*
1935 			 * When port is peripheral only or role transitions to
1936 			 * USB_ROLE_NONE from USB_ROLE_DEVICE, regulator is not
1937 			 * be enabled.
1938 			 */
1939 			if (regulator_is_enabled(port->supply))
1940 				regulator_disable(port->supply);
1941 
1942 			tegra210_xusb_padctl_id_override(padctl, false);
1943 			tegra210_xusb_padctl_vbus_override(padctl, false);
1944 		}
1945 	}
1946 
1947 	mutex_unlock(&padctl->lock);
1948 
1949 	return err;
1950 }
1951 
1952 static int tegra210_usb2_phy_power_on(struct phy *phy)
1953 {
1954 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
1955 	struct tegra_xusb_usb2_lane *usb2 = to_usb2_lane(lane);
1956 	struct tegra_xusb_usb2_pad *pad = to_usb2_pad(lane->pad);
1957 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
1958 	struct tegra210_xusb_padctl *priv;
1959 	struct tegra_xusb_usb2_port *port;
1960 	unsigned int index = lane->index;
1961 	u32 value;
1962 	int err;
1963 
1964 	port = tegra_xusb_find_usb2_port(padctl, index);
1965 	if (!port) {
1966 		dev_err(&phy->dev, "no port found for USB2 lane %u\n", index);
1967 		return -ENODEV;
1968 	}
1969 
1970 	priv = to_tegra210_xusb_padctl(padctl);
1971 
1972 	mutex_lock(&padctl->lock);
1973 
1974 	if (port->usb3_port_fake != -1) {
1975 		value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP);
1976 		value &= ~XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK(
1977 					port->usb3_port_fake);
1978 		value |= XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(
1979 					port->usb3_port_fake, index);
1980 		padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_MAP);
1981 
1982 		value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1983 		value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(
1984 					port->usb3_port_fake);
1985 		padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1986 
1987 		usleep_range(100, 200);
1988 
1989 		value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1990 		value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(
1991 					port->usb3_port_fake);
1992 		padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
1993 
1994 		usleep_range(100, 200);
1995 
1996 		value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
1997 		value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(
1998 					port->usb3_port_fake);
1999 		padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2000 	}
2001 
2002 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2003 	value &= ~((XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_MASK <<
2004 		    XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_SHIFT) |
2005 		   (XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_MASK <<
2006 		    XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_SHIFT));
2007 	value |= (XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_VAL <<
2008 		  XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_DISCON_LEVEL_SHIFT);
2009 
2010 	if (tegra_sku_info.revision < TEGRA_REVISION_A02)
2011 		value |=
2012 			(XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_VAL <<
2013 			XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_SHIFT);
2014 
2015 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2016 
2017 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_PORT_CAP);
2018 	value &= ~XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_MASK(index);
2019 	if (port->mode == USB_DR_MODE_UNKNOWN)
2020 		value |= XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DISABLED(index);
2021 	else if (port->mode == USB_DR_MODE_PERIPHERAL)
2022 		value |= XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_DEVICE(index);
2023 	else if (port->mode == USB_DR_MODE_HOST)
2024 		value |= XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_HOST(index);
2025 	else if (port->mode == USB_DR_MODE_OTG)
2026 		value |= XUSB_PADCTL_USB2_PORT_CAP_PORTX_CAP_OTG(index);
2027 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_PORT_CAP);
2028 
2029 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
2030 	value &= ~((XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_MASK <<
2031 		    XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_SHIFT) |
2032 		   XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD |
2033 		   XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD2 |
2034 		   XUSB_PADCTL_USB2_OTG_PAD_CTL0_PD_ZI);
2035 	value |= (priv->fuse.hs_curr_level[index] +
2036 		  usb2->hs_curr_level_offset) <<
2037 		 XUSB_PADCTL_USB2_OTG_PAD_CTL0_HS_CURR_LEVEL_SHIFT;
2038 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL0(index));
2039 
2040 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
2041 	value &= ~((XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_MASK <<
2042 		    XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_SHIFT) |
2043 		   (XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_MASK <<
2044 		    XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_SHIFT) |
2045 		   XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DR |
2046 		   XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_CHRP_OVRD |
2047 		   XUSB_PADCTL_USB2_OTG_PAD_CTL1_PD_DISC_OVRD);
2048 	value |= (priv->fuse.hs_term_range_adj <<
2049 		  XUSB_PADCTL_USB2_OTG_PAD_CTL1_TERM_RANGE_ADJ_SHIFT) |
2050 		 (priv->fuse.rpd_ctrl <<
2051 		  XUSB_PADCTL_USB2_OTG_PAD_CTL1_RPD_CTRL_SHIFT);
2052 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_OTG_PADX_CTL1(index));
2053 
2054 	value = padctl_readl(padctl,
2055 			     XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL1(index));
2056 	value &= ~(XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_MASK <<
2057 		   XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_SHIFT);
2058 	if (port->mode == USB_DR_MODE_HOST)
2059 		value |= XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_FIX18;
2060 	else
2061 		value |=
2062 		      XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_VAL <<
2063 		      XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1_VREG_LEV_SHIFT;
2064 	padctl_writel(padctl, value,
2065 		      XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL1(index));
2066 
2067 	if (pad->enable > 0) {
2068 		pad->enable++;
2069 		mutex_unlock(&padctl->lock);
2070 		return 0;
2071 	}
2072 
2073 	err = clk_prepare_enable(pad->clk);
2074 	if (err)
2075 		goto out;
2076 
2077 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
2078 	value &= ~((XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_MASK <<
2079 		    XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_SHIFT) |
2080 		   (XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_MASK <<
2081 		    XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_SHIFT));
2082 	value |= (XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_VAL <<
2083 		  XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_START_TIMER_SHIFT) |
2084 		 (XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_VAL <<
2085 		  XUSB_PADCTL_USB2_BIAS_PAD_CTL1_TRK_DONE_RESET_TIMER_SHIFT);
2086 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
2087 
2088 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2089 	value &= ~XUSB_PADCTL_USB2_BIAS_PAD_CTL0_PD;
2090 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2091 
2092 	udelay(1);
2093 
2094 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
2095 	value &= ~XUSB_PADCTL_USB2_BIAS_PAD_CTL1_PD_TRK;
2096 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL1);
2097 
2098 	udelay(50);
2099 
2100 	clk_disable_unprepare(pad->clk);
2101 
2102 	pad->enable++;
2103 	mutex_unlock(&padctl->lock);
2104 
2105 	return 0;
2106 
2107 out:
2108 	mutex_unlock(&padctl->lock);
2109 	return err;
2110 }
2111 
2112 static int tegra210_usb2_phy_power_off(struct phy *phy)
2113 {
2114 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2115 	struct tegra_xusb_usb2_pad *pad = to_usb2_pad(lane->pad);
2116 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2117 	struct tegra_xusb_usb2_port *port;
2118 	u32 value;
2119 
2120 	port = tegra_xusb_find_usb2_port(padctl, lane->index);
2121 	if (!port) {
2122 		dev_err(&phy->dev, "no port found for USB2 lane %u\n",
2123 			lane->index);
2124 		return -ENODEV;
2125 	}
2126 
2127 	mutex_lock(&padctl->lock);
2128 
2129 	if (port->usb3_port_fake != -1) {
2130 		value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2131 		value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(
2132 					port->usb3_port_fake);
2133 		padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2134 
2135 		usleep_range(100, 200);
2136 
2137 		value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2138 		value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(
2139 					port->usb3_port_fake);
2140 		padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2141 
2142 		usleep_range(250, 350);
2143 
2144 		value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2145 		value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(
2146 					port->usb3_port_fake);
2147 		padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2148 
2149 		value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP);
2150 		value |= XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(port->usb3_port_fake,
2151 					XUSB_PADCTL_SS_PORT_MAP_PORT_DISABLED);
2152 		padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_MAP);
2153 	}
2154 
2155 	if (WARN_ON(pad->enable == 0))
2156 		goto out;
2157 
2158 	if (--pad->enable > 0)
2159 		goto out;
2160 
2161 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2162 	value |= XUSB_PADCTL_USB2_BIAS_PAD_CTL0_PD;
2163 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_BIAS_PAD_CTL0);
2164 
2165 out:
2166 	mutex_unlock(&padctl->lock);
2167 	return 0;
2168 }
2169 
2170 static const struct phy_ops tegra210_usb2_phy_ops = {
2171 	.init = tegra210_usb2_phy_init,
2172 	.exit = tegra210_usb2_phy_exit,
2173 	.power_on = tegra210_usb2_phy_power_on,
2174 	.power_off = tegra210_usb2_phy_power_off,
2175 	.set_mode = tegra210_usb2_phy_set_mode,
2176 	.owner = THIS_MODULE,
2177 };
2178 
2179 static struct tegra_xusb_pad *
2180 tegra210_usb2_pad_probe(struct tegra_xusb_padctl *padctl,
2181 			const struct tegra_xusb_pad_soc *soc,
2182 			struct device_node *np)
2183 {
2184 	struct tegra_xusb_usb2_pad *usb2;
2185 	struct tegra_xusb_pad *pad;
2186 	int err;
2187 
2188 	usb2 = kzalloc(sizeof(*usb2), GFP_KERNEL);
2189 	if (!usb2)
2190 		return ERR_PTR(-ENOMEM);
2191 
2192 	pad = &usb2->base;
2193 	pad->ops = &tegra210_usb2_lane_ops;
2194 	pad->soc = soc;
2195 
2196 	err = tegra_xusb_pad_init(pad, padctl, np);
2197 	if (err < 0) {
2198 		kfree(usb2);
2199 		goto out;
2200 	}
2201 
2202 	usb2->clk = devm_clk_get(&pad->dev, "trk");
2203 	if (IS_ERR(usb2->clk)) {
2204 		err = PTR_ERR(usb2->clk);
2205 		dev_err(&pad->dev, "failed to get trk clock: %d\n", err);
2206 		goto unregister;
2207 	}
2208 
2209 	err = tegra_xusb_pad_register(pad, &tegra210_usb2_phy_ops);
2210 	if (err < 0)
2211 		goto unregister;
2212 
2213 	dev_set_drvdata(&pad->dev, pad);
2214 
2215 	return pad;
2216 
2217 unregister:
2218 	device_unregister(&pad->dev);
2219 out:
2220 	return ERR_PTR(err);
2221 }
2222 
2223 static void tegra210_usb2_pad_remove(struct tegra_xusb_pad *pad)
2224 {
2225 	struct tegra_xusb_usb2_pad *usb2 = to_usb2_pad(pad);
2226 
2227 	kfree(usb2);
2228 }
2229 
2230 static const struct tegra_xusb_pad_ops tegra210_usb2_ops = {
2231 	.probe = tegra210_usb2_pad_probe,
2232 	.remove = tegra210_usb2_pad_remove,
2233 };
2234 
2235 static const struct tegra_xusb_pad_soc tegra210_usb2_pad = {
2236 	.name = "usb2",
2237 	.num_lanes = ARRAY_SIZE(tegra210_usb2_lanes),
2238 	.lanes = tegra210_usb2_lanes,
2239 	.ops = &tegra210_usb2_ops,
2240 };
2241 
2242 static const char *tegra210_hsic_functions[] = {
2243 	"snps",
2244 	"xusb",
2245 };
2246 
2247 static const struct tegra_xusb_lane_soc tegra210_hsic_lanes[] = {
2248 	TEGRA210_LANE("hsic-0", 0x004, 14, 0x1, hsic),
2249 };
2250 
2251 static struct tegra_xusb_lane *
2252 tegra210_hsic_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
2253 			 unsigned int index)
2254 {
2255 	struct tegra_xusb_hsic_lane *hsic;
2256 	int err;
2257 
2258 	hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
2259 	if (!hsic)
2260 		return ERR_PTR(-ENOMEM);
2261 
2262 	INIT_LIST_HEAD(&hsic->base.list);
2263 	hsic->base.soc = &pad->soc->lanes[index];
2264 	hsic->base.index = index;
2265 	hsic->base.pad = pad;
2266 	hsic->base.np = np;
2267 
2268 	err = tegra_xusb_lane_parse_dt(&hsic->base, np);
2269 	if (err < 0) {
2270 		kfree(hsic);
2271 		return ERR_PTR(err);
2272 	}
2273 
2274 	return &hsic->base;
2275 }
2276 
2277 static void tegra210_hsic_lane_remove(struct tegra_xusb_lane *lane)
2278 {
2279 	struct tegra_xusb_hsic_lane *hsic = to_hsic_lane(lane);
2280 
2281 	kfree(hsic);
2282 }
2283 
2284 static const struct tegra_xusb_lane_ops tegra210_hsic_lane_ops = {
2285 	.probe = tegra210_hsic_lane_probe,
2286 	.remove = tegra210_hsic_lane_remove,
2287 	.enable_phy_sleepwalk = tegra210_pmc_hsic_enable_phy_sleepwalk,
2288 	.disable_phy_sleepwalk = tegra210_pmc_hsic_disable_phy_sleepwalk,
2289 	.enable_phy_wake = tegra210_hsic_enable_phy_wake,
2290 	.disable_phy_wake = tegra210_hsic_disable_phy_wake,
2291 	.remote_wake_detected = tegra210_hsic_phy_remote_wake_detected,
2292 };
2293 
2294 static int tegra210_hsic_phy_init(struct phy *phy)
2295 {
2296 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2297 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2298 	u32 value;
2299 
2300 	value = padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX);
2301 	value &= ~(XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_MASK <<
2302 		   XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_SHIFT);
2303 	value |= XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_XUSB <<
2304 		 XUSB_PADCTL_USB2_PAD_MUX_HSIC_PAD_TRK_SHIFT;
2305 	padctl_writel(padctl, value, XUSB_PADCTL_USB2_PAD_MUX);
2306 
2307 	return 0;
2308 }
2309 
2310 static int tegra210_hsic_phy_exit(struct phy *phy)
2311 {
2312 	return 0;
2313 }
2314 
2315 static int tegra210_hsic_phy_power_on(struct phy *phy)
2316 {
2317 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2318 	struct tegra_xusb_hsic_lane *hsic = to_hsic_lane(lane);
2319 	struct tegra_xusb_hsic_pad *pad = to_hsic_pad(lane->pad);
2320 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2321 	unsigned int index = lane->index;
2322 	u32 value;
2323 	int err;
2324 
2325 	err = regulator_enable(pad->supply);
2326 	if (err)
2327 		return err;
2328 
2329 	padctl_writel(padctl, hsic->strobe_trim,
2330 		      XUSB_PADCTL_HSIC_STRB_TRIM_CONTROL);
2331 
2332 	value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL1(index));
2333 	value &= ~(XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_MASK <<
2334 		   XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_SHIFT);
2335 	value |= (hsic->tx_rtune_p <<
2336 		  XUSB_PADCTL_HSIC_PAD_CTL1_TX_RTUNEP_SHIFT);
2337 	padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL1(index));
2338 
2339 	value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL2(index));
2340 	value &= ~((XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_MASK <<
2341 		    XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_SHIFT) |
2342 		   (XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_MASK <<
2343 		    XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_SHIFT));
2344 	value |= (hsic->rx_strobe_trim <<
2345 		  XUSB_PADCTL_HSIC_PAD_CTL2_RX_STROBE_TRIM_SHIFT) |
2346 		 (hsic->rx_data_trim <<
2347 		  XUSB_PADCTL_HSIC_PAD_CTL2_RX_DATA_TRIM_SHIFT);
2348 	padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL2(index));
2349 
2350 	value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL0(index));
2351 	value &= ~(XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA0 |
2352 		   XUSB_PADCTL_HSIC_PAD_CTL0_RPU_DATA1 |
2353 		   XUSB_PADCTL_HSIC_PAD_CTL0_RPU_STROBE |
2354 		   XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA0 |
2355 		   XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA1 |
2356 		   XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_STROBE |
2357 		   XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA0 |
2358 		   XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA1 |
2359 		   XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_STROBE |
2360 		   XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA0 |
2361 		   XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA1 |
2362 		   XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_STROBE);
2363 	value |= XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA0 |
2364 		 XUSB_PADCTL_HSIC_PAD_CTL0_RPD_DATA1 |
2365 		 XUSB_PADCTL_HSIC_PAD_CTL0_RPD_STROBE;
2366 	padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL0(index));
2367 
2368 	err = clk_prepare_enable(pad->clk);
2369 	if (err)
2370 		goto disable;
2371 
2372 	value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PAD_TRK_CTL);
2373 	value &= ~((XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_MASK <<
2374 		    XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_SHIFT) |
2375 		   (XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_MASK <<
2376 		    XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_SHIFT));
2377 	value |= (XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_VAL <<
2378 		  XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_START_TIMER_SHIFT) |
2379 		 (XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_VAL <<
2380 		  XUSB_PADCTL_HSIC_PAD_TRK_CTL_TRK_DONE_RESET_TIMER_SHIFT);
2381 	padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PAD_TRK_CTL);
2382 
2383 	udelay(1);
2384 
2385 	value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PAD_TRK_CTL);
2386 	value &= ~XUSB_PADCTL_HSIC_PAD_TRK_CTL_PD_TRK;
2387 	padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PAD_TRK_CTL);
2388 
2389 	udelay(50);
2390 
2391 	clk_disable_unprepare(pad->clk);
2392 
2393 	return 0;
2394 
2395 disable:
2396 	regulator_disable(pad->supply);
2397 	return err;
2398 }
2399 
2400 static int tegra210_hsic_phy_power_off(struct phy *phy)
2401 {
2402 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2403 	struct tegra_xusb_hsic_pad *pad = to_hsic_pad(lane->pad);
2404 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2405 	unsigned int index = lane->index;
2406 	u32 value;
2407 
2408 	value = padctl_readl(padctl, XUSB_PADCTL_HSIC_PADX_CTL0(index));
2409 	value |= XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA0 |
2410 		 XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_DATA1 |
2411 		 XUSB_PADCTL_HSIC_PAD_CTL0_PD_RX_STROBE |
2412 		 XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA0 |
2413 		 XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_DATA1 |
2414 		 XUSB_PADCTL_HSIC_PAD_CTL0_PD_ZI_STROBE |
2415 		 XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA0 |
2416 		 XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_DATA1 |
2417 		 XUSB_PADCTL_HSIC_PAD_CTL0_PD_TX_STROBE;
2418 	padctl_writel(padctl, value, XUSB_PADCTL_HSIC_PADX_CTL1(index));
2419 
2420 	regulator_disable(pad->supply);
2421 
2422 	return 0;
2423 }
2424 
2425 static const struct phy_ops tegra210_hsic_phy_ops = {
2426 	.init = tegra210_hsic_phy_init,
2427 	.exit = tegra210_hsic_phy_exit,
2428 	.power_on = tegra210_hsic_phy_power_on,
2429 	.power_off = tegra210_hsic_phy_power_off,
2430 	.owner = THIS_MODULE,
2431 };
2432 
2433 static struct tegra_xusb_pad *
2434 tegra210_hsic_pad_probe(struct tegra_xusb_padctl *padctl,
2435 			const struct tegra_xusb_pad_soc *soc,
2436 			struct device_node *np)
2437 {
2438 	struct tegra_xusb_hsic_pad *hsic;
2439 	struct tegra_xusb_pad *pad;
2440 	int err;
2441 
2442 	hsic = kzalloc(sizeof(*hsic), GFP_KERNEL);
2443 	if (!hsic)
2444 		return ERR_PTR(-ENOMEM);
2445 
2446 	pad = &hsic->base;
2447 	pad->ops = &tegra210_hsic_lane_ops;
2448 	pad->soc = soc;
2449 
2450 	err = tegra_xusb_pad_init(pad, padctl, np);
2451 	if (err < 0) {
2452 		kfree(hsic);
2453 		goto out;
2454 	}
2455 
2456 	hsic->clk = devm_clk_get(&pad->dev, "trk");
2457 	if (IS_ERR(hsic->clk)) {
2458 		err = PTR_ERR(hsic->clk);
2459 		dev_err(&pad->dev, "failed to get trk clock: %d\n", err);
2460 		goto unregister;
2461 	}
2462 
2463 	err = tegra_xusb_pad_register(pad, &tegra210_hsic_phy_ops);
2464 	if (err < 0)
2465 		goto unregister;
2466 
2467 	dev_set_drvdata(&pad->dev, pad);
2468 
2469 	return pad;
2470 
2471 unregister:
2472 	device_unregister(&pad->dev);
2473 out:
2474 	return ERR_PTR(err);
2475 }
2476 
2477 static void tegra210_hsic_pad_remove(struct tegra_xusb_pad *pad)
2478 {
2479 	struct tegra_xusb_hsic_pad *hsic = to_hsic_pad(pad);
2480 
2481 	kfree(hsic);
2482 }
2483 
2484 static const struct tegra_xusb_pad_ops tegra210_hsic_ops = {
2485 	.probe = tegra210_hsic_pad_probe,
2486 	.remove = tegra210_hsic_pad_remove,
2487 };
2488 
2489 static const struct tegra_xusb_pad_soc tegra210_hsic_pad = {
2490 	.name = "hsic",
2491 	.num_lanes = ARRAY_SIZE(tegra210_hsic_lanes),
2492 	.lanes = tegra210_hsic_lanes,
2493 	.ops = &tegra210_hsic_ops,
2494 };
2495 
2496 static void tegra210_uphy_lane_iddq_enable(struct tegra_xusb_lane *lane)
2497 {
2498 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2499 	u32 value;
2500 
2501 	value = padctl_readl(padctl, lane->soc->regs.misc_ctl2);
2502 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ_OVRD;
2503 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ_OVRD;
2504 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_PWR_OVRD;
2505 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_PWR_OVRD;
2506 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ;
2507 	value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_MASK;
2508 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_VAL;
2509 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ;
2510 	value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_MASK;
2511 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_VAL;
2512 	padctl_writel(padctl, value, lane->soc->regs.misc_ctl2);
2513 }
2514 
2515 static void tegra210_uphy_lane_iddq_disable(struct tegra_xusb_lane *lane)
2516 {
2517 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2518 	u32 value;
2519 
2520 	value = padctl_readl(padctl, lane->soc->regs.misc_ctl2);
2521 	value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ_OVRD;
2522 	value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ_OVRD;
2523 	value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_PWR_OVRD;
2524 	value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_PWR_OVRD;
2525 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ;
2526 	value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_MASK;
2527 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_SLEEP_VAL;
2528 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ;
2529 	value &= ~XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_MASK;
2530 	value |= XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_SLEEP_VAL;
2531 	padctl_writel(padctl, value, lane->soc->regs.misc_ctl2);
2532 }
2533 
2534 #define TEGRA210_UPHY_LANE(_name, _offset, _shift, _mask, _type, _misc)	\
2535 	{								\
2536 		.name = _name,						\
2537 		.offset = _offset,					\
2538 		.shift = _shift,					\
2539 		.mask = _mask,						\
2540 		.num_funcs = ARRAY_SIZE(tegra210_##_type##_functions),	\
2541 		.funcs = tegra210_##_type##_functions,			\
2542 		.regs.misc_ctl2 = _misc,				\
2543 	}
2544 
2545 static const char *tegra210_pcie_functions[] = {
2546 	"pcie-x1",
2547 	"usb3-ss",
2548 	"sata",
2549 	"pcie-x4",
2550 };
2551 
2552 static const struct tegra_xusb_lane_soc tegra210_pcie_lanes[] = {
2553 	TEGRA210_UPHY_LANE("pcie-0", 0x028, 12, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(0)),
2554 	TEGRA210_UPHY_LANE("pcie-1", 0x028, 14, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(1)),
2555 	TEGRA210_UPHY_LANE("pcie-2", 0x028, 16, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(2)),
2556 	TEGRA210_UPHY_LANE("pcie-3", 0x028, 18, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(3)),
2557 	TEGRA210_UPHY_LANE("pcie-4", 0x028, 20, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(4)),
2558 	TEGRA210_UPHY_LANE("pcie-5", 0x028, 22, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(5)),
2559 	TEGRA210_UPHY_LANE("pcie-6", 0x028, 24, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(6)),
2560 };
2561 
2562 static struct tegra_xusb_usb3_port *
2563 tegra210_lane_to_usb3_port(struct tegra_xusb_lane *lane)
2564 {
2565 	int port;
2566 
2567 	if (!lane || !lane->pad || !lane->pad->padctl)
2568 		return NULL;
2569 
2570 	port = tegra210_usb3_lane_map(lane);
2571 	if (port < 0)
2572 		return NULL;
2573 
2574 	return tegra_xusb_find_usb3_port(lane->pad->padctl, port);
2575 }
2576 
2577 static int tegra210_usb3_phy_power_on(struct phy *phy)
2578 {
2579 	struct device *dev = &phy->dev;
2580 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2581 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2582 	struct tegra_xusb_usb3_port *usb3 = tegra210_lane_to_usb3_port(lane);
2583 	unsigned int index;
2584 	u32 value;
2585 
2586 	if (!usb3) {
2587 		dev_err(dev, "no USB3 port found for lane %u\n", lane->index);
2588 		return -ENODEV;
2589 	}
2590 
2591 	index = usb3->base.index;
2592 
2593 	value = padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP);
2594 
2595 	if (!usb3->internal)
2596 		value &= ~XUSB_PADCTL_SS_PORT_MAP_PORTX_INTERNAL(index);
2597 	else
2598 		value |= XUSB_PADCTL_SS_PORT_MAP_PORTX_INTERNAL(index);
2599 
2600 	value &= ~XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK(index);
2601 	value |= XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(index, usb3->port);
2602 	padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_MAP);
2603 
2604 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_USB3_PADX_ECTL1(index));
2605 	value &= ~(XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_MASK <<
2606 		   XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_SHIFT);
2607 	value |= XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_VAL <<
2608 		 XUSB_PADCTL_UPHY_USB3_PAD_ECTL1_TX_TERM_CTRL_SHIFT;
2609 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_USB3_PADX_ECTL1(index));
2610 
2611 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_USB3_PADX_ECTL2(index));
2612 	value &= ~(XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_MASK <<
2613 		   XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_SHIFT);
2614 	value |= XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_VAL <<
2615 		 XUSB_PADCTL_UPHY_USB3_PAD_ECTL2_RX_CTLE_SHIFT;
2616 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_USB3_PADX_ECTL2(index));
2617 
2618 	padctl_writel(padctl, XUSB_PADCTL_UPHY_USB3_PAD_ECTL3_RX_DFE_VAL,
2619 		      XUSB_PADCTL_UPHY_USB3_PADX_ECTL3(index));
2620 
2621 	value = padctl_readl(padctl, XUSB_PADCTL_UPHY_USB3_PADX_ECTL4(index));
2622 	value &= ~(XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_MASK <<
2623 		   XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_SHIFT);
2624 	value |= XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_VAL <<
2625 		 XUSB_PADCTL_UPHY_USB3_PAD_ECTL4_RX_CDR_CTRL_SHIFT;
2626 	padctl_writel(padctl, value, XUSB_PADCTL_UPHY_USB3_PADX_ECTL4(index));
2627 
2628 	padctl_writel(padctl, XUSB_PADCTL_UPHY_USB3_PAD_ECTL6_RX_EQ_CTRL_H_VAL,
2629 		      XUSB_PADCTL_UPHY_USB3_PADX_ECTL6(index));
2630 
2631 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2632 	value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(index);
2633 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2634 
2635 	usleep_range(100, 200);
2636 
2637 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2638 	value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(index);
2639 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2640 
2641 	usleep_range(100, 200);
2642 
2643 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2644 	value &= ~XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(index);
2645 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2646 
2647 	return 0;
2648 }
2649 
2650 static int tegra210_usb3_phy_power_off(struct phy *phy)
2651 {
2652 	struct device *dev = &phy->dev;
2653 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2654 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2655 	struct tegra_xusb_usb3_port *usb3 = tegra210_lane_to_usb3_port(lane);
2656 	unsigned int index;
2657 	u32 value;
2658 
2659 	if (!usb3) {
2660 		dev_err(dev, "no USB3 port found for lane %u\n", lane->index);
2661 		return -ENODEV;
2662 	}
2663 
2664 	index = usb3->base.index;
2665 
2666 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2667 	value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN_EARLY(index);
2668 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2669 
2670 	usleep_range(100, 200);
2671 
2672 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2673 	value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_CLAMP_EN(index);
2674 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2675 
2676 	usleep_range(250, 350);
2677 
2678 	value = padctl_readl(padctl, XUSB_PADCTL_ELPG_PROGRAM1);
2679 	value |= XUSB_PADCTL_ELPG_PROGRAM1_SSPX_ELPG_VCORE_DOWN(index);
2680 	padctl_writel(padctl, value, XUSB_PADCTL_ELPG_PROGRAM1);
2681 
2682 	return 0;
2683 }
2684 static struct tegra_xusb_lane *
2685 tegra210_pcie_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
2686 			 unsigned int index)
2687 {
2688 	struct tegra_xusb_pcie_lane *pcie;
2689 	int err;
2690 
2691 	pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
2692 	if (!pcie)
2693 		return ERR_PTR(-ENOMEM);
2694 
2695 	INIT_LIST_HEAD(&pcie->base.list);
2696 	pcie->base.soc = &pad->soc->lanes[index];
2697 	pcie->base.index = index;
2698 	pcie->base.pad = pad;
2699 	pcie->base.np = np;
2700 
2701 	err = tegra_xusb_lane_parse_dt(&pcie->base, np);
2702 	if (err < 0) {
2703 		kfree(pcie);
2704 		return ERR_PTR(err);
2705 	}
2706 
2707 	return &pcie->base;
2708 }
2709 
2710 static void tegra210_pcie_lane_remove(struct tegra_xusb_lane *lane)
2711 {
2712 	struct tegra_xusb_pcie_lane *pcie = to_pcie_lane(lane);
2713 
2714 	kfree(pcie);
2715 }
2716 
2717 static const struct tegra_xusb_lane_ops tegra210_pcie_lane_ops = {
2718 	.probe = tegra210_pcie_lane_probe,
2719 	.remove = tegra210_pcie_lane_remove,
2720 	.iddq_enable = tegra210_uphy_lane_iddq_enable,
2721 	.iddq_disable = tegra210_uphy_lane_iddq_disable,
2722 	.enable_phy_sleepwalk = tegra210_usb3_enable_phy_sleepwalk,
2723 	.disable_phy_sleepwalk = tegra210_usb3_disable_phy_sleepwalk,
2724 	.enable_phy_wake = tegra210_usb3_enable_phy_wake,
2725 	.disable_phy_wake = tegra210_usb3_disable_phy_wake,
2726 	.remote_wake_detected = tegra210_usb3_phy_remote_wake_detected,
2727 };
2728 
2729 static int tegra210_pcie_phy_init(struct phy *phy)
2730 {
2731 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2732 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2733 
2734 	mutex_lock(&padctl->lock);
2735 
2736 	tegra210_uphy_init(padctl);
2737 
2738 	mutex_unlock(&padctl->lock);
2739 
2740 	return 0;
2741 }
2742 
2743 static int tegra210_pcie_phy_power_on(struct phy *phy)
2744 {
2745 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2746 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2747 	int err = 0;
2748 
2749 	mutex_lock(&padctl->lock);
2750 
2751 	if (tegra_xusb_lane_check(lane, "usb3-ss"))
2752 		err = tegra210_usb3_phy_power_on(phy);
2753 
2754 	mutex_unlock(&padctl->lock);
2755 	return err;
2756 }
2757 
2758 static int tegra210_pcie_phy_power_off(struct phy *phy)
2759 {
2760 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2761 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2762 	int err = 0;
2763 
2764 	mutex_lock(&padctl->lock);
2765 
2766 	if (tegra_xusb_lane_check(lane, "usb3-ss"))
2767 		err = tegra210_usb3_phy_power_off(phy);
2768 
2769 	mutex_unlock(&padctl->lock);
2770 	return err;
2771 }
2772 
2773 static const struct phy_ops tegra210_pcie_phy_ops = {
2774 	.init = tegra210_pcie_phy_init,
2775 	.power_on = tegra210_pcie_phy_power_on,
2776 	.power_off = tegra210_pcie_phy_power_off,
2777 	.owner = THIS_MODULE,
2778 };
2779 
2780 static struct tegra_xusb_pad *
2781 tegra210_pcie_pad_probe(struct tegra_xusb_padctl *padctl,
2782 			const struct tegra_xusb_pad_soc *soc,
2783 			struct device_node *np)
2784 {
2785 	struct tegra_xusb_pcie_pad *pcie;
2786 	struct tegra_xusb_pad *pad;
2787 	int err;
2788 
2789 	pcie = kzalloc(sizeof(*pcie), GFP_KERNEL);
2790 	if (!pcie)
2791 		return ERR_PTR(-ENOMEM);
2792 
2793 	pad = &pcie->base;
2794 	pad->ops = &tegra210_pcie_lane_ops;
2795 	pad->soc = soc;
2796 
2797 	err = tegra_xusb_pad_init(pad, padctl, np);
2798 	if (err < 0) {
2799 		kfree(pcie);
2800 		goto out;
2801 	}
2802 
2803 	pcie->pll = devm_clk_get(&pad->dev, "pll");
2804 	if (IS_ERR(pcie->pll)) {
2805 		err = PTR_ERR(pcie->pll);
2806 		dev_err(&pad->dev, "failed to get PLL: %d\n", err);
2807 		goto unregister;
2808 	}
2809 
2810 	pcie->rst = devm_reset_control_get(&pad->dev, "phy");
2811 	if (IS_ERR(pcie->rst)) {
2812 		err = PTR_ERR(pcie->rst);
2813 		dev_err(&pad->dev, "failed to get PCIe pad reset: %d\n", err);
2814 		goto unregister;
2815 	}
2816 
2817 	err = tegra_xusb_pad_register(pad, &tegra210_pcie_phy_ops);
2818 	if (err < 0)
2819 		goto unregister;
2820 
2821 	dev_set_drvdata(&pad->dev, pad);
2822 
2823 	return pad;
2824 
2825 unregister:
2826 	device_unregister(&pad->dev);
2827 out:
2828 	return ERR_PTR(err);
2829 }
2830 
2831 static void tegra210_pcie_pad_remove(struct tegra_xusb_pad *pad)
2832 {
2833 	struct tegra_xusb_pcie_pad *pcie = to_pcie_pad(pad);
2834 
2835 	kfree(pcie);
2836 }
2837 
2838 static const struct tegra_xusb_pad_ops tegra210_pcie_ops = {
2839 	.probe = tegra210_pcie_pad_probe,
2840 	.remove = tegra210_pcie_pad_remove,
2841 };
2842 
2843 static const struct tegra_xusb_pad_soc tegra210_pcie_pad = {
2844 	.name = "pcie",
2845 	.num_lanes = ARRAY_SIZE(tegra210_pcie_lanes),
2846 	.lanes = tegra210_pcie_lanes,
2847 	.ops = &tegra210_pcie_ops,
2848 };
2849 
2850 static const struct tegra_xusb_lane_soc tegra210_sata_lanes[] = {
2851 	TEGRA210_UPHY_LANE("sata-0", 0x028, 30, 0x3, pcie, XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL2),
2852 };
2853 
2854 static struct tegra_xusb_lane *
2855 tegra210_sata_lane_probe(struct tegra_xusb_pad *pad, struct device_node *np,
2856 			 unsigned int index)
2857 {
2858 	struct tegra_xusb_sata_lane *sata;
2859 	int err;
2860 
2861 	sata = kzalloc(sizeof(*sata), GFP_KERNEL);
2862 	if (!sata)
2863 		return ERR_PTR(-ENOMEM);
2864 
2865 	INIT_LIST_HEAD(&sata->base.list);
2866 	sata->base.soc = &pad->soc->lanes[index];
2867 	sata->base.index = index;
2868 	sata->base.pad = pad;
2869 	sata->base.np = np;
2870 
2871 	err = tegra_xusb_lane_parse_dt(&sata->base, np);
2872 	if (err < 0) {
2873 		kfree(sata);
2874 		return ERR_PTR(err);
2875 	}
2876 
2877 	return &sata->base;
2878 }
2879 
2880 static void tegra210_sata_lane_remove(struct tegra_xusb_lane *lane)
2881 {
2882 	struct tegra_xusb_sata_lane *sata = to_sata_lane(lane);
2883 
2884 	kfree(sata);
2885 }
2886 
2887 static const struct tegra_xusb_lane_ops tegra210_sata_lane_ops = {
2888 	.probe = tegra210_sata_lane_probe,
2889 	.remove = tegra210_sata_lane_remove,
2890 	.iddq_enable = tegra210_uphy_lane_iddq_enable,
2891 	.iddq_disable = tegra210_uphy_lane_iddq_disable,
2892 	.enable_phy_sleepwalk = tegra210_usb3_enable_phy_sleepwalk,
2893 	.disable_phy_sleepwalk = tegra210_usb3_disable_phy_sleepwalk,
2894 	.enable_phy_wake = tegra210_usb3_enable_phy_wake,
2895 	.disable_phy_wake = tegra210_usb3_disable_phy_wake,
2896 	.remote_wake_detected = tegra210_usb3_phy_remote_wake_detected,
2897 };
2898 
2899 static int tegra210_sata_phy_init(struct phy *phy)
2900 {
2901 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2902 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2903 
2904 	mutex_lock(&padctl->lock);
2905 
2906 	tegra210_uphy_init(padctl);
2907 
2908 	mutex_unlock(&padctl->lock);
2909 	return 0;
2910 }
2911 
2912 static int tegra210_sata_phy_power_on(struct phy *phy)
2913 {
2914 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2915 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2916 	int err = 0;
2917 
2918 	mutex_lock(&padctl->lock);
2919 
2920 	if (tegra_xusb_lane_check(lane, "usb3-ss"))
2921 		err = tegra210_usb3_phy_power_on(phy);
2922 
2923 	mutex_unlock(&padctl->lock);
2924 	return err;
2925 }
2926 
2927 static int tegra210_sata_phy_power_off(struct phy *phy)
2928 {
2929 	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
2930 	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
2931 	int err = 0;
2932 
2933 	mutex_lock(&padctl->lock);
2934 
2935 	if (tegra_xusb_lane_check(lane, "usb3-ss"))
2936 		err = tegra210_usb3_phy_power_off(phy);
2937 
2938 	mutex_unlock(&padctl->lock);
2939 	return err;
2940 }
2941 
2942 static const struct phy_ops tegra210_sata_phy_ops = {
2943 	.init = tegra210_sata_phy_init,
2944 	.power_on = tegra210_sata_phy_power_on,
2945 	.power_off = tegra210_sata_phy_power_off,
2946 	.owner = THIS_MODULE,
2947 };
2948 
2949 static struct tegra_xusb_pad *
2950 tegra210_sata_pad_probe(struct tegra_xusb_padctl *padctl,
2951 			const struct tegra_xusb_pad_soc *soc,
2952 			struct device_node *np)
2953 {
2954 	struct tegra_xusb_sata_pad *sata;
2955 	struct tegra_xusb_pad *pad;
2956 	int err;
2957 
2958 	sata = kzalloc(sizeof(*sata), GFP_KERNEL);
2959 	if (!sata)
2960 		return ERR_PTR(-ENOMEM);
2961 
2962 	pad = &sata->base;
2963 	pad->ops = &tegra210_sata_lane_ops;
2964 	pad->soc = soc;
2965 
2966 	err = tegra_xusb_pad_init(pad, padctl, np);
2967 	if (err < 0) {
2968 		kfree(sata);
2969 		goto out;
2970 	}
2971 
2972 	sata->rst = devm_reset_control_get(&pad->dev, "phy");
2973 	if (IS_ERR(sata->rst)) {
2974 		err = PTR_ERR(sata->rst);
2975 		dev_err(&pad->dev, "failed to get SATA pad reset: %d\n", err);
2976 		goto unregister;
2977 	}
2978 
2979 	err = tegra_xusb_pad_register(pad, &tegra210_sata_phy_ops);
2980 	if (err < 0)
2981 		goto unregister;
2982 
2983 	dev_set_drvdata(&pad->dev, pad);
2984 
2985 	return pad;
2986 
2987 unregister:
2988 	device_unregister(&pad->dev);
2989 out:
2990 	return ERR_PTR(err);
2991 }
2992 
2993 static void tegra210_sata_pad_remove(struct tegra_xusb_pad *pad)
2994 {
2995 	struct tegra_xusb_sata_pad *sata = to_sata_pad(pad);
2996 
2997 	kfree(sata);
2998 }
2999 
3000 static const struct tegra_xusb_pad_ops tegra210_sata_ops = {
3001 	.probe = tegra210_sata_pad_probe,
3002 	.remove = tegra210_sata_pad_remove,
3003 };
3004 
3005 static const struct tegra_xusb_pad_soc tegra210_sata_pad = {
3006 	.name = "sata",
3007 	.num_lanes = ARRAY_SIZE(tegra210_sata_lanes),
3008 	.lanes = tegra210_sata_lanes,
3009 	.ops = &tegra210_sata_ops,
3010 };
3011 
3012 static const struct tegra_xusb_pad_soc * const tegra210_pads[] = {
3013 	&tegra210_usb2_pad,
3014 	&tegra210_hsic_pad,
3015 	&tegra210_pcie_pad,
3016 	&tegra210_sata_pad,
3017 };
3018 
3019 static int tegra210_usb2_port_enable(struct tegra_xusb_port *port)
3020 {
3021 	return 0;
3022 }
3023 
3024 static void tegra210_usb2_port_disable(struct tegra_xusb_port *port)
3025 {
3026 }
3027 
3028 static struct tegra_xusb_lane *
3029 tegra210_usb2_port_map(struct tegra_xusb_port *port)
3030 {
3031 	return tegra_xusb_find_lane(port->padctl, "usb2", port->index);
3032 }
3033 
3034 static const struct tegra_xusb_port_ops tegra210_usb2_port_ops = {
3035 	.release = tegra_xusb_usb2_port_release,
3036 	.remove = tegra_xusb_usb2_port_remove,
3037 	.enable = tegra210_usb2_port_enable,
3038 	.disable = tegra210_usb2_port_disable,
3039 	.map = tegra210_usb2_port_map,
3040 };
3041 
3042 static int tegra210_hsic_port_enable(struct tegra_xusb_port *port)
3043 {
3044 	return 0;
3045 }
3046 
3047 static void tegra210_hsic_port_disable(struct tegra_xusb_port *port)
3048 {
3049 }
3050 
3051 static struct tegra_xusb_lane *
3052 tegra210_hsic_port_map(struct tegra_xusb_port *port)
3053 {
3054 	return tegra_xusb_find_lane(port->padctl, "hsic", port->index);
3055 }
3056 
3057 static const struct tegra_xusb_port_ops tegra210_hsic_port_ops = {
3058 	.release = tegra_xusb_hsic_port_release,
3059 	.enable = tegra210_hsic_port_enable,
3060 	.disable = tegra210_hsic_port_disable,
3061 	.map = tegra210_hsic_port_map,
3062 };
3063 
3064 static int tegra210_usb3_port_enable(struct tegra_xusb_port *port)
3065 {
3066 	return 0;
3067 }
3068 
3069 static void tegra210_usb3_port_disable(struct tegra_xusb_port *port)
3070 {
3071 }
3072 
3073 static struct tegra_xusb_lane *
3074 tegra210_usb3_port_map(struct tegra_xusb_port *port)
3075 {
3076 	return tegra_xusb_port_find_lane(port, tegra210_usb3_map, "usb3-ss");
3077 }
3078 
3079 static const struct tegra_xusb_port_ops tegra210_usb3_port_ops = {
3080 	.release = tegra_xusb_usb3_port_release,
3081 	.enable = tegra210_usb3_port_enable,
3082 	.disable = tegra210_usb3_port_disable,
3083 	.map = tegra210_usb3_port_map,
3084 };
3085 
3086 static int tegra210_utmi_port_reset(struct phy *phy)
3087 {
3088 	struct tegra_xusb_padctl *padctl;
3089 	struct tegra_xusb_lane *lane;
3090 	u32 value;
3091 
3092 	lane = phy_get_drvdata(phy);
3093 	padctl = lane->pad->padctl;
3094 
3095 	value = padctl_readl(padctl,
3096 		     XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPADX_CTL0(lane->index));
3097 
3098 	if ((value & XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIP) ||
3099 	    (value & XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL0_ZIN)) {
3100 		tegra210_xusb_padctl_vbus_override(padctl, false);
3101 		tegra210_xusb_padctl_vbus_override(padctl, true);
3102 		return 1;
3103 	}
3104 
3105 	return 0;
3106 }
3107 
3108 static int
3109 tegra210_xusb_read_fuse_calibration(struct tegra210_xusb_fuse_calibration *fuse)
3110 {
3111 	unsigned int i;
3112 	u32 value;
3113 	int err;
3114 
3115 	err = tegra_fuse_readl(TEGRA_FUSE_SKU_CALIB_0, &value);
3116 	if (err < 0)
3117 		return err;
3118 
3119 	for (i = 0; i < ARRAY_SIZE(fuse->hs_curr_level); i++) {
3120 		fuse->hs_curr_level[i] =
3121 			(value >> FUSE_SKU_CALIB_HS_CURR_LEVEL_PADX_SHIFT(i)) &
3122 			FUSE_SKU_CALIB_HS_CURR_LEVEL_PAD_MASK;
3123 	}
3124 
3125 	fuse->hs_term_range_adj =
3126 		(value >> FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_SHIFT) &
3127 		FUSE_SKU_CALIB_HS_TERM_RANGE_ADJ_MASK;
3128 
3129 	err = tegra_fuse_readl(TEGRA_FUSE_USB_CALIB_EXT_0, &value);
3130 	if (err < 0)
3131 		return err;
3132 
3133 	fuse->rpd_ctrl =
3134 		(value >> FUSE_USB_CALIB_EXT_RPD_CTRL_SHIFT) &
3135 		FUSE_USB_CALIB_EXT_RPD_CTRL_MASK;
3136 
3137 	return 0;
3138 }
3139 
3140 static struct tegra_xusb_padctl *
3141 tegra210_xusb_padctl_probe(struct device *dev,
3142 			   const struct tegra_xusb_padctl_soc *soc)
3143 {
3144 	struct tegra210_xusb_padctl *padctl;
3145 	struct platform_device *pdev;
3146 	struct device_node *np;
3147 	int err;
3148 
3149 	padctl = devm_kzalloc(dev, sizeof(*padctl), GFP_KERNEL);
3150 	if (!padctl)
3151 		return ERR_PTR(-ENOMEM);
3152 
3153 	padctl->base.dev = dev;
3154 	padctl->base.soc = soc;
3155 
3156 	err = tegra210_xusb_read_fuse_calibration(&padctl->fuse);
3157 	if (err < 0)
3158 		return ERR_PTR(err);
3159 
3160 	np = of_parse_phandle(dev->of_node, "nvidia,pmc", 0);
3161 	if (!np) {
3162 		dev_warn(dev, "nvidia,pmc property is missing\n");
3163 		goto out;
3164 	}
3165 
3166 	pdev = of_find_device_by_node(np);
3167 	if (!pdev) {
3168 		dev_warn(dev, "PMC device is not available\n");
3169 		goto out;
3170 	}
3171 
3172 	if (!platform_get_drvdata(pdev))
3173 		return ERR_PTR(-EPROBE_DEFER);
3174 
3175 	padctl->regmap = dev_get_regmap(&pdev->dev, "usb_sleepwalk");
3176 	if (!padctl->regmap)
3177 		dev_info(dev, "failed to find PMC regmap\n");
3178 
3179 out:
3180 	return &padctl->base;
3181 }
3182 
3183 static void tegra210_xusb_padctl_remove(struct tegra_xusb_padctl *padctl)
3184 {
3185 }
3186 
3187 static void tegra210_xusb_padctl_save(struct tegra_xusb_padctl *padctl)
3188 {
3189 	struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
3190 
3191 	priv->context.usb2_pad_mux =
3192 		padctl_readl(padctl, XUSB_PADCTL_USB2_PAD_MUX);
3193 	priv->context.usb2_port_cap =
3194 		padctl_readl(padctl, XUSB_PADCTL_USB2_PORT_CAP);
3195 	priv->context.ss_port_map =
3196 		padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP);
3197 	priv->context.usb3_pad_mux =
3198 		padctl_readl(padctl, XUSB_PADCTL_USB3_PAD_MUX);
3199 }
3200 
3201 static void tegra210_xusb_padctl_restore(struct tegra_xusb_padctl *padctl)
3202 {
3203 	struct tegra210_xusb_padctl *priv = to_tegra210_xusb_padctl(padctl);
3204 	struct tegra_xusb_lane *lane;
3205 
3206 	padctl_writel(padctl, priv->context.usb2_pad_mux,
3207 		XUSB_PADCTL_USB2_PAD_MUX);
3208 	padctl_writel(padctl, priv->context.usb2_port_cap,
3209 		XUSB_PADCTL_USB2_PORT_CAP);
3210 	padctl_writel(padctl, priv->context.ss_port_map,
3211 		XUSB_PADCTL_SS_PORT_MAP);
3212 
3213 	list_for_each_entry(lane, &padctl->lanes, list) {
3214 		if (lane->pad->ops->iddq_enable)
3215 			tegra210_uphy_lane_iddq_enable(lane);
3216 	}
3217 
3218 	padctl_writel(padctl, priv->context.usb3_pad_mux,
3219 		XUSB_PADCTL_USB3_PAD_MUX);
3220 
3221 	list_for_each_entry(lane, &padctl->lanes, list) {
3222 		if (lane->pad->ops->iddq_disable)
3223 			tegra210_uphy_lane_iddq_disable(lane);
3224 	}
3225 }
3226 
3227 static int tegra210_xusb_padctl_suspend_noirq(struct tegra_xusb_padctl *padctl)
3228 {
3229 	mutex_lock(&padctl->lock);
3230 
3231 	tegra210_uphy_deinit(padctl);
3232 
3233 	tegra210_xusb_padctl_save(padctl);
3234 
3235 	mutex_unlock(&padctl->lock);
3236 	return 0;
3237 }
3238 
3239 static int tegra210_xusb_padctl_resume_noirq(struct tegra_xusb_padctl *padctl)
3240 {
3241 	mutex_lock(&padctl->lock);
3242 
3243 	tegra210_xusb_padctl_restore(padctl);
3244 
3245 	tegra210_uphy_init(padctl);
3246 
3247 	mutex_unlock(&padctl->lock);
3248 	return 0;
3249 }
3250 
3251 static const struct tegra_xusb_padctl_ops tegra210_xusb_padctl_ops = {
3252 	.probe = tegra210_xusb_padctl_probe,
3253 	.remove = tegra210_xusb_padctl_remove,
3254 	.suspend_noirq = tegra210_xusb_padctl_suspend_noirq,
3255 	.resume_noirq = tegra210_xusb_padctl_resume_noirq,
3256 	.usb3_set_lfps_detect = tegra210_usb3_set_lfps_detect,
3257 	.hsic_set_idle = tegra210_hsic_set_idle,
3258 	.vbus_override = tegra210_xusb_padctl_vbus_override,
3259 	.utmi_port_reset = tegra210_utmi_port_reset,
3260 };
3261 
3262 static const char * const tegra210_xusb_padctl_supply_names[] = {
3263 	"avdd-pll-utmip",
3264 	"avdd-pll-uerefe",
3265 	"dvdd-pex-pll",
3266 	"hvdd-pex-pll-e",
3267 };
3268 
3269 const struct tegra_xusb_padctl_soc tegra210_xusb_padctl_soc = {
3270 	.num_pads = ARRAY_SIZE(tegra210_pads),
3271 	.pads = tegra210_pads,
3272 	.ports = {
3273 		.usb2 = {
3274 			.ops = &tegra210_usb2_port_ops,
3275 			.count = 4,
3276 		},
3277 		.hsic = {
3278 			.ops = &tegra210_hsic_port_ops,
3279 			.count = 1,
3280 		},
3281 		.usb3 = {
3282 			.ops = &tegra210_usb3_port_ops,
3283 			.count = 4,
3284 		},
3285 	},
3286 	.ops = &tegra210_xusb_padctl_ops,
3287 	.supply_names = tegra210_xusb_padctl_supply_names,
3288 	.num_supplies = ARRAY_SIZE(tegra210_xusb_padctl_supply_names),
3289 	.need_fake_usb3_port = true,
3290 };
3291 EXPORT_SYMBOL_GPL(tegra210_xusb_padctl_soc);
3292 
3293 MODULE_AUTHOR("Andrew Bresticker <abrestic@chromium.org>");
3294 MODULE_DESCRIPTION("NVIDIA Tegra 210 XUSB Pad Controller driver");
3295 MODULE_LICENSE("GPL v2");
3296