2 * Copyright (c) 2013-2016, NVIDIA CORPORATION. All rights reserved.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20 #include <linux/export.h>
21 #include <linux/clk.h>
23 #include <linux/delay.h>
24 #include <linux/tegra-fuse.h>
25 #include <linux/clk/tegra.h>
26 #include <linux/tegra-powergate.h>
27 #include <linux/syscore_ops.h>
28 #include <linux/tegra_pm_domains.h>
29 #include <linux/regulator/consumer.h>
30 #include <linux/slab.h>
31 #include <linux/of_device.h>
33 #include <mach/tegra_usb_pad_ctrl.h>
35 #include "../../../arch/arm/mach-tegra/iomap.h"
37 static DEFINE_SPINLOCK(utmip_pad_lock);
38 static DEFINE_SPINLOCK(xusb_padctl_lock);
39 static DEFINE_SPINLOCK(xusb_padctl_reg_lock);
40 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
41 static DEFINE_SPINLOCK(pcie_pad_lock);
42 static DEFINE_SPINLOCK(sata_pad_lock);
43 static DEFINE_SPINLOCK(hsic_pad_lock);
44 static int hsic_pad_count;
45 #ifdef CONFIG_PM_GENERIC_DOMAINS_OF
46 static struct of_device_id tegra_xusbb_pd[] = {
47 { .compatible = "nvidia, tegra210-xusbb-pd", },
48 { .compatible = "nvidia, tegra132-xusbb-pd", },
49 { .compatible = "nvidia, tegra124-xusbb-pd", },
52 static struct of_device_id tegra_xusbc_pd[] = {
53 { .compatible = "nvidia, tegra210-xusbc-pd", },
54 { .compatible = "nvidia, tegra132-xusbc-pd", },
55 { .compatible = "nvidia, tegra124-xusbc-pd", },
60 static int utmip_pad_count;
61 static struct clk *utmi_pad_clk;
63 #if !defined(CONFIG_ARCH_TEGRA_21x_SOC)
67 #if defined(CONFIG_ARCH_TEGRA_21x_SOC)
68 struct tegra_padctl_soc_data {
69 char * const *regulator_name;
74 struct platform_device *pdev;
76 const struct tegra_padctl_soc_data *soc_data;
78 struct regulator_bulk_data *regulator;
81 struct clk *plle_hw_clk;
83 u32 lane_owner; /* used for XUSB lanes */
84 u32 lane_map; /* used for PCIE lanes */
85 bool enable_sata_port; /* used for SATA lane */
87 static struct tegra_padctl *padctl;
90 void tegra_xhci_release_otg_port(bool release)
92 void __iomem *padctl_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
96 if (tegra_platform_is_fpga())
99 spin_lock_irqsave(&xusb_padctl_lock, flags);
100 reg = readl(padctl_base + XUSB_PADCTL_USB2_PAD_MUX_0);
102 reg &= ~PAD_PORT_MASK(0);
104 reg |= PAD_PORT_SNPS(0);
106 reg |= PAD_PORT_XUSB(0);
108 writel(reg, padctl_base + XUSB_PADCTL_USB2_PAD_MUX_0);
109 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
111 EXPORT_SYMBOL_GPL(tegra_xhci_release_otg_port);
113 void tegra_xhci_release_dev_port(bool release)
115 void __iomem *padctl_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
119 spin_lock_irqsave(&xusb_padctl_lock, flags);
120 reg = readl(padctl_base + XUSB_PADCTL_USB2_PAD_MUX_0);
122 reg &= ~USB2_OTG_PORT_CAP(0, ~0);
124 reg |= USB2_OTG_PORT_CAP(0, XUSB_DEVICE_MODE);
126 reg |= USB2_OTG_PORT_CAP(0, XUSB_HOST_MODE);
128 writel(reg, padctl_base + XUSB_PADCTL_USB2_PAD_MUX_0);
129 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
131 EXPORT_SYMBOL_GPL(tegra_xhci_release_dev_port);
133 static int tegra_padctl_hs_xmiter(int pad, bool force_disabled)
135 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
136 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
140 spin_lock_irqsave(&xusb_padctl_lock, flags);
142 if (force_disabled) {
144 reg = readl(pad_base + XUSB_PADCTL_USB2_OTG_PAD_CTL_0(pad));
145 reg |= (USB2_OTG_PD2 | USB2_PD2_OVRD_EN);
146 writel(reg, pad_base + XUSB_PADCTL_USB2_OTG_PAD_CTL_0(pad));
148 /* remove pd2_ovrd_en, leave it under HW control */
149 reg = readl(pad_base + XUSB_PADCTL_USB2_OTG_PAD_CTL_0(pad));
150 reg &= ~(USB2_PD2_OVRD_EN);
151 writel(reg, pad_base + XUSB_PADCTL_USB2_OTG_PAD_CTL_0(pad));
153 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
158 int tegra_pd2_asserted(int pad)
160 return tegra_padctl_hs_xmiter(pad, true);
162 EXPORT_SYMBOL_GPL(tegra_pd2_asserted);
164 int tegra_pd2_deasserted(int pad)
166 return tegra_padctl_hs_xmiter(pad, false);
168 EXPORT_SYMBOL_GPL(tegra_pd2_deasserted);
170 void tegra_xhci_ss_wake_on_interrupts(u32 enabled_port, bool enable)
172 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
176 spin_lock_irqsave(&xusb_padctl_lock, flags);
177 /* clear any event */
178 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
179 if (enabled_port & TEGRA_XUSB_SS_P0)
180 elpg_program0 |= SS_PORT0_WAKEUP_EVENT;
181 if (enabled_port & TEGRA_XUSB_SS_P1)
182 elpg_program0 |= SS_PORT1_WAKEUP_EVENT;
183 if (enabled_port & TEGRA_XUSB_SS_P2)
184 elpg_program0 |= SS_PORT2_WAKEUP_EVENT;
185 if (enabled_port & TEGRA_XUSB_SS_P3)
186 elpg_program0 |= SS_PORT3_WAKEUP_EVENT;
188 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
190 /* enable ss wake interrupts */
191 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
193 /* enable interrupts */
194 if (enabled_port & TEGRA_XUSB_SS_P0)
195 elpg_program0 |= SS_PORT0_WAKE_INTERRUPT_ENABLE;
196 if (enabled_port & TEGRA_XUSB_SS_P1)
197 elpg_program0 |= SS_PORT1_WAKE_INTERRUPT_ENABLE;
198 if (enabled_port & TEGRA_XUSB_SS_P2)
199 elpg_program0 |= SS_PORT2_WAKE_INTERRUPT_ENABLE;
200 if (enabled_port & TEGRA_XUSB_SS_P3)
201 elpg_program0 |= SS_PORT3_WAKE_INTERRUPT_ENABLE;
203 /* disable interrupts */
204 if (enabled_port & TEGRA_XUSB_SS_P0)
205 elpg_program0 &= ~SS_PORT0_WAKE_INTERRUPT_ENABLE;
206 if (enabled_port & TEGRA_XUSB_SS_P1)
207 elpg_program0 &= ~SS_PORT1_WAKE_INTERRUPT_ENABLE;
208 if (enabled_port & TEGRA_XUSB_SS_P2)
209 elpg_program0 &= ~SS_PORT2_WAKE_INTERRUPT_ENABLE;
210 if (enabled_port & TEGRA_XUSB_SS_P3)
211 elpg_program0 &= ~SS_PORT3_WAKE_INTERRUPT_ENABLE;
213 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
214 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
216 EXPORT_SYMBOL_GPL(tegra_xhci_ss_wake_on_interrupts);
218 void tegra_xhci_hs_wake_on_interrupts(u32 portmap, bool enable)
220 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
224 spin_lock_irqsave(&xusb_padctl_lock, flags);
225 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
226 if (portmap & TEGRA_XUSB_USB2_P0)
227 elpg_program0 |= USB2_PORT0_WAKEUP_EVENT;
228 if (portmap & TEGRA_XUSB_USB2_P1)
229 elpg_program0 |= USB2_PORT1_WAKEUP_EVENT;
230 if (portmap & TEGRA_XUSB_USB2_P2)
231 elpg_program0 |= USB2_PORT2_WAKEUP_EVENT;
232 if (portmap & TEGRA_XUSB_USB2_P3)
233 elpg_program0 |= USB2_PORT3_WAKEUP_EVENT;
234 if (portmap & TEGRA_XUSB_HSIC_P0)
235 elpg_program0 |= USB2_HSIC_PORT0_WAKEUP_EVENT;
236 if (portmap & TEGRA_XUSB_HSIC_P1)
237 elpg_program0 |= USB2_HSIC_PORT1_WAKEUP_EVENT;
239 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
241 /* Enable the wake interrupts */
242 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
244 /* enable interrupts */
245 if (portmap & TEGRA_XUSB_USB2_P0)
246 elpg_program0 |= USB2_PORT0_WAKE_INTERRUPT_ENABLE;
247 if (portmap & TEGRA_XUSB_USB2_P1)
248 elpg_program0 |= USB2_PORT1_WAKE_INTERRUPT_ENABLE;
249 if (portmap & TEGRA_XUSB_USB2_P2)
250 elpg_program0 |= USB2_PORT2_WAKE_INTERRUPT_ENABLE;
251 if (portmap & TEGRA_XUSB_USB2_P3)
252 elpg_program0 |= USB2_PORT3_WAKE_INTERRUPT_ENABLE;
253 if (portmap & TEGRA_XUSB_HSIC_P0)
254 elpg_program0 |= USB2_HSIC_PORT0_WAKE_INTERRUPT_ENABLE;
255 if (portmap & TEGRA_XUSB_HSIC_P1)
256 elpg_program0 |= USB2_HSIC_PORT1_WAKE_INTERRUPT_ENABLE;
258 if (portmap & TEGRA_XUSB_USB2_P0)
259 elpg_program0 &= ~USB2_PORT0_WAKE_INTERRUPT_ENABLE;
260 if (portmap & TEGRA_XUSB_USB2_P1)
261 elpg_program0 &= ~USB2_PORT1_WAKE_INTERRUPT_ENABLE;
262 if (portmap & TEGRA_XUSB_USB2_P2)
263 elpg_program0 &= ~USB2_PORT2_WAKE_INTERRUPT_ENABLE;
264 if (portmap & TEGRA_XUSB_USB2_P3)
265 elpg_program0 &= ~USB2_PORT3_WAKE_INTERRUPT_ENABLE;
266 if (portmap & TEGRA_XUSB_HSIC_P0)
267 elpg_program0 &= ~USB2_HSIC_PORT0_WAKE_INTERRUPT_ENABLE;
268 if (portmap & TEGRA_XUSB_HSIC_P1)
269 elpg_program0 &= ~USB2_HSIC_PORT1_WAKE_INTERRUPT_ENABLE;
271 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
272 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
274 EXPORT_SYMBOL_GPL(tegra_xhci_hs_wake_on_interrupts);
276 void tegra_xhci_ss_wake_signal(u32 enabled_port, bool enable)
278 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
282 /* DO NOT COMBINE BELOW 2 WRITES */
284 spin_lock_irqsave(&xusb_padctl_lock, flags);
285 /* Assert/Deassert clamp_en_early signals to SSP0/1 */
286 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
287 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
289 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
292 if (enabled_port & TEGRA_XUSB_SS_P0)
293 elpg_program0 |= SSP0_ELPG_CLAMP_EN_EARLY;
294 if (enabled_port & TEGRA_XUSB_SS_P1)
295 elpg_program0 |= SSP1_ELPG_CLAMP_EN_EARLY;
296 if (enabled_port & TEGRA_XUSB_SS_P2)
297 elpg_program0 |= SSP2_ELPG_CLAMP_EN_EARLY;
298 if (enabled_port & TEGRA_XUSB_SS_P3)
299 elpg_program0 |= SSP3_ELPG_CLAMP_EN_EARLY;
301 if (enabled_port & TEGRA_XUSB_SS_P0)
302 elpg_program0 &= ~SSP0_ELPG_CLAMP_EN_EARLY;
303 if (enabled_port & TEGRA_XUSB_SS_P1)
304 elpg_program0 &= ~SSP1_ELPG_CLAMP_EN_EARLY;
305 if (enabled_port & TEGRA_XUSB_SS_P2)
306 elpg_program0 &= ~SSP2_ELPG_CLAMP_EN_EARLY;
307 if (enabled_port & TEGRA_XUSB_SS_P3)
308 elpg_program0 &= ~SSP3_ELPG_CLAMP_EN_EARLY;
310 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
311 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
313 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
316 * Check the LP0 figure and leave gap bw writes to
317 * clamp_en_early and clamp_en
321 /* Assert/Deassert clam_en signal */
322 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
323 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
325 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
329 if (enabled_port & TEGRA_XUSB_SS_P0)
330 elpg_program0 |= SSP0_ELPG_CLAMP_EN;
331 if (enabled_port & TEGRA_XUSB_SS_P1)
332 elpg_program0 |= SSP1_ELPG_CLAMP_EN;
333 if (enabled_port & TEGRA_XUSB_SS_P2)
334 elpg_program0 |= SSP2_ELPG_CLAMP_EN;
335 if (enabled_port & TEGRA_XUSB_SS_P3)
336 elpg_program0 |= SSP3_ELPG_CLAMP_EN;
338 if (enabled_port & TEGRA_XUSB_SS_P0)
339 elpg_program0 &= ~SSP0_ELPG_CLAMP_EN;
340 if (enabled_port & TEGRA_XUSB_SS_P1)
341 elpg_program0 &= ~SSP1_ELPG_CLAMP_EN;
342 if (enabled_port & TEGRA_XUSB_SS_P2)
343 elpg_program0 &= ~SSP2_ELPG_CLAMP_EN;
344 if (enabled_port & TEGRA_XUSB_SS_P3)
345 elpg_program0 &= ~SSP3_ELPG_CLAMP_EN;
348 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
349 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
351 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
353 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
355 /* wait for 250us for the writes to propogate */
359 EXPORT_SYMBOL_GPL(tegra_xhci_ss_wake_signal);
361 void tegra_xhci_ss_vcore(u32 enabled_port, bool enable)
363 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
367 spin_lock_irqsave(&xusb_padctl_lock, flags);
368 /* Assert vcore_off signal */
369 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
370 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
372 elpg_program0 = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
376 if (enabled_port & TEGRA_XUSB_SS_P0)
377 elpg_program0 |= SSP0_ELPG_VCORE_DOWN;
378 if (enabled_port & TEGRA_XUSB_SS_P1)
379 elpg_program0 |= SSP1_ELPG_VCORE_DOWN;
380 if (enabled_port & TEGRA_XUSB_SS_P2)
381 elpg_program0 |= SSP2_ELPG_VCORE_DOWN;
382 if (enabled_port & TEGRA_XUSB_SS_P3)
383 elpg_program0 |= SSP3_ELPG_VCORE_DOWN;
385 if (enabled_port & TEGRA_XUSB_SS_P0)
386 elpg_program0 &= ~SSP0_ELPG_VCORE_DOWN;
387 if (enabled_port & TEGRA_XUSB_SS_P1)
388 elpg_program0 &= ~SSP1_ELPG_VCORE_DOWN;
389 if (enabled_port & TEGRA_XUSB_SS_P2)
390 elpg_program0 &= ~SSP2_ELPG_VCORE_DOWN;
391 if (enabled_port & TEGRA_XUSB_SS_P3)
392 elpg_program0 &= ~SSP3_ELPG_VCORE_DOWN;
394 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
395 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
397 writel(elpg_program0, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
399 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
401 EXPORT_SYMBOL_GPL(tegra_xhci_ss_vcore);
403 static int pex_usb_pad_pll(bool assert)
405 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
406 static struct clk *pex_uphy;
407 static int ref_count;
409 void __iomem *clk_base = IO_ADDRESS(TEGRA_CLK_RESET_BASE);
413 pex_uphy = clk_get_sys(NULL, "pex_uphy");
415 if (IS_ERR(pex_uphy)) {
416 pr_err("Fail to get pex_uphy clk\n");
417 return PTR_ERR(pex_uphy);
420 pr_debug("%s ref_count %d assert %d\n", __func__, ref_count, assert);
422 spin_lock_irqsave(&pcie_pad_lock, flags);
426 tegra_periph_reset_deassert(pex_uphy);
430 if (ref_count == 0) {
431 val = readl(clk_base +
432 CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0);
433 if (XUSBIO_SEQ_ENABLE & val)
434 pr_info("%s: pex uphy already enabled",
437 tegra_periph_reset_assert(pex_uphy);
440 spin_unlock_irqrestore(&pcie_pad_lock, flags);
446 static int sata_usb_pad_pll(bool assert)
448 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
449 static struct clk *sata_uphy;
450 static int ref_count;
452 void __iomem *clk_base = IO_ADDRESS(TEGRA_CLK_RESET_BASE);
456 sata_uphy = clk_get_sys(NULL, "sata_uphy");
458 if (IS_ERR(sata_uphy)) {
459 pr_err("Fail to get sata_uphy clk\n");
460 return PTR_ERR(sata_uphy);
463 pr_debug("%s ref_count %d assert %d\n", __func__, ref_count, assert);
465 spin_lock_irqsave(&sata_pad_lock, flags);
469 tegra_periph_reset_deassert(sata_uphy);
473 if (ref_count == 0) {
474 val = readl(clk_base +
475 CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
476 if (SATA_SEQ_ENABLE & val)
477 pr_info("%s: sata uphy already enabled",
480 tegra_periph_reset_assert(sata_uphy);
483 spin_unlock_irqrestore(&sata_pad_lock, flags);
489 int pex_usb_pad_pll_reset_assert(void)
491 return pex_usb_pad_pll(true);
493 EXPORT_SYMBOL_GPL(pex_usb_pad_pll_reset_assert);
495 int pex_usb_pad_pll_reset_deassert(void)
497 return pex_usb_pad_pll(false);
499 EXPORT_SYMBOL_GPL(pex_usb_pad_pll_reset_deassert);
501 int sata_usb_pad_pll_reset_assert(void)
503 return sata_usb_pad_pll(true);
505 EXPORT_SYMBOL_GPL(sata_usb_pad_pll_reset_assert);
507 int sata_usb_pad_pll_reset_deassert(void)
509 return sata_usb_pad_pll(false);
511 EXPORT_SYMBOL_GPL(sata_usb_pad_pll_reset_deassert);
513 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
514 static bool tegra_xusb_partitions_powergated(void)
516 int partition_id_xusbb, partition_id_xusbc;
518 #ifdef CONFIG_PM_GENERIC_DOMAINS_OF
519 partition_id_xusbb = tegra_pd_get_powergate_id(tegra_xusbb_pd);
520 if (partition_id_xusbb < 0)
523 partition_id_xusbc = tegra_pd_get_powergate_id(tegra_xusbc_pd);
524 if (partition_id_xusbc < 0)
527 partition_id_xusbb = TEGRA_POWERGATE_XUSBB;
528 partition_id_xusbc = TEGRA_POWERGATE_XUSBC;
530 if (!tegra_powergate_is_powered(partition_id_xusbb)
531 && !tegra_powergate_is_powered(partition_id_xusbc))
536 static bool tegra_xusb_partitions_powergated(void)
542 int utmi_phy_iddq_override(bool set)
544 unsigned long val, flags;
545 void __iomem *clk_base = IO_ADDRESS(TEGRA_CLK_RESET_BASE);
547 spin_lock_irqsave(&utmip_pad_lock, flags);
548 val = readl(clk_base + UTMIPLL_HW_PWRDN_CFG0);
549 if (set && !utmip_pad_count) {
550 if (!tegra_xusb_partitions_powergated()) {
551 pr_warn("XUSB partitions are on, trying to assert IDDQ");
554 if (val & UTMIPLL_LOCK) {
555 pr_warn("UTMIPLL is locked, trying to assert IDDQ");
558 val |= UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE;
559 } else if (!set && utmip_pad_count)
560 val &= ~UTMIPLL_HW_PWRDN_CFG0_IDDQ_OVERRIDE;
563 val |= UTMIPLL_HW_PWRDN_CFG0_IDDQ_SWCTL;
564 writel(val, clk_base + UTMIPLL_HW_PWRDN_CFG0);
567 spin_unlock_irqrestore(&utmip_pad_lock, flags);
570 EXPORT_SYMBOL_GPL(utmi_phy_iddq_override);
572 #ifndef CONFIG_ARCH_TEGRA_21x_SOC
573 static void utmi_phy_pad(bool enable)
576 int port, xhci_port_present = 0;
577 void __iomem *pad_base = IO_ADDRESS(TEGRA_USB_BASE);
580 val = readl(pad_base + UTMIP_BIAS_CFG0);
581 val &= ~(UTMIP_OTGPD | UTMIP_BIASPD);
582 val |= UTMIP_HSSQUELCH_LEVEL(0x2) | UTMIP_HSDISCON_LEVEL(0x3) |
583 UTMIP_HSDISCON_LEVEL_MSB;
584 writel(val, pad_base + UTMIP_BIAS_CFG0);
586 #if defined(CONFIG_USB_XHCI_HCD)
587 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_BIAS_PAD_CTL_0
592 val = tegra_usb_pad_reg_read(XUSB_PADCTL_USB2_PAD_MUX_0);
593 for (port = 0; port < XUSB_UTMI_COUNT; port++) {
594 if ((val & PAD_PORT_MASK(port)) == PAD_PORT_XUSB(port))
595 xhci_port_present = 1;
598 val = readl(pad_base + UTMIP_BIAS_CFG0);
601 #if defined(CONFIG_TEGRA_XHCI_ENABLE_CDP_PORT)
602 if (xhci_port_present) /* xhci holds atleast one utmi port */
603 val &= ~UTMIP_BIASPD;
605 val &= ~(UTMIP_HSSQUELCH_LEVEL(~0) | UTMIP_HSDISCON_LEVEL(~0) |
606 UTMIP_HSDISCON_LEVEL_MSB);
607 writel(val, pad_base + UTMIP_BIAS_CFG0);
609 #if defined(CONFIG_TEGRA_XHCI_ENABLE_CDP_PORT)
610 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_BIAS_PAD_CTL_0
613 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_BIAS_PAD_CTL_0
614 , PD_MASK , PD_MASK);
619 int utmi_phy_pad_enable(void)
622 static struct clk *usb2_trk;
625 usb2_trk = clk_get_sys(NULL, "usb2_trk");
628 utmi_pad_clk = clk_get_sys("utmip-pad", NULL);
630 clk_enable(utmi_pad_clk);
631 if (!IS_ERR_OR_NULL(usb2_trk))
632 clk_enable(usb2_trk);
634 spin_lock_irqsave(&utmip_pad_lock, flags);
639 spin_unlock_irqrestore(&utmip_pad_lock, flags);
641 clk_disable(utmi_pad_clk);
642 if (!IS_ERR_OR_NULL(usb2_trk))
643 clk_disable(usb2_trk);
647 EXPORT_SYMBOL_GPL(utmi_phy_pad_enable);
649 int utmi_phy_pad_disable(void)
652 static struct clk *usb2_trk;
655 usb2_trk = clk_get_sys(NULL, "usb2_trk");
658 utmi_pad_clk = clk_get_sys("utmip-pad", NULL);
660 clk_enable(utmi_pad_clk);
661 if (!IS_ERR_OR_NULL(usb2_trk))
662 clk_enable(usb2_trk);
663 spin_lock_irqsave(&utmip_pad_lock, flags);
665 if (!utmip_pad_count) {
666 pr_err("%s: utmip pad already powered off\n", __func__);
669 if (--utmip_pad_count == 0)
672 spin_unlock_irqrestore(&utmip_pad_lock, flags);
673 clk_disable(utmi_pad_clk);
674 if (!IS_ERR_OR_NULL(usb2_trk))
675 clk_disable(usb2_trk);
679 EXPORT_SYMBOL_GPL(utmi_phy_pad_disable);
683 static void utmi_phy_pad(struct tegra_prod_list *prod_list, bool enable)
685 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
688 if (IS_ERR_OR_NULL(prod_list))
691 if (tegra_platform_is_fpga())
695 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_PAD_MUX_0,
696 BIAS_PAD_MASK, BIAS_PAD_XUSB);
697 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_BIAS_PAD_CTL_1,
698 TRK_START_TIMER_MASK, TRK_START_TIMER);
699 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_BIAS_PAD_CTL_1,
700 TRK_DONE_RESET_TIMER_MASK, TRK_DONE_RESET_TIMER);
703 const char *prod_name = "prod_c_bias";
704 if (tegra_chip_get_revision() >= TEGRA_REVISION_A02)
705 prod_name = "prod_c_bias_a02";
706 val = tegra_prod_set_by_name(&pad_base, prod_name,
709 pr_err("%s(), failed with err:%d\n",
715 tegra_usb_pad_reg_update(
716 XUSB_PADCTL_USB2_BIAS_PAD_CTL_0,
717 HS_SQUELCH_LEVEL(~0), HS_SQUELCH_LEVEL(2));
719 tegra_usb_pad_reg_update(
720 XUSB_PADCTL_USB2_BIAS_PAD_CTL_0,
721 HS_DISCON_LEVEL(~0), HS_DISCON_LEVEL(7));
724 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_BIAS_PAD_CTL_0,
729 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_BIAS_PAD_CTL_1,
733 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_PAD_MUX_0,
734 BIAS_PAD_MASK, BIAS_PAD_XUSB);
735 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_BIAS_PAD_CTL_0,
740 int utmi_phy_pad_enable(struct tegra_prod_list *prod_list)
743 static struct clk *usb2_trk;
746 usb2_trk = clk_get_sys(NULL, "usb2_trk");
749 utmi_pad_clk = clk_get_sys("utmip-pad", NULL);
751 clk_enable(utmi_pad_clk);
752 if (!IS_ERR_OR_NULL(usb2_trk))
753 clk_enable(usb2_trk);
755 spin_lock_irqsave(&utmip_pad_lock, flags);
758 utmi_phy_pad(prod_list, true);
760 spin_unlock_irqrestore(&utmip_pad_lock, flags);
762 /* for tracking complete */
763 usleep_range(50, 60);
765 clk_disable(utmi_pad_clk);
766 if (!IS_ERR_OR_NULL(usb2_trk))
767 clk_disable(usb2_trk);
771 EXPORT_SYMBOL_GPL(utmi_phy_pad_enable);
773 int utmi_phy_pad_disable(struct tegra_prod_list *prod_list)
776 static struct clk *usb2_trk;
779 usb2_trk = clk_get_sys(NULL, "usb2_trk");
782 utmi_pad_clk = clk_get_sys("utmip-pad", NULL);
784 clk_enable(utmi_pad_clk);
785 if (!IS_ERR_OR_NULL(usb2_trk))
786 clk_enable(usb2_trk);
787 spin_lock_irqsave(&utmip_pad_lock, flags);
789 if (!utmip_pad_count) {
790 pr_err("%s: utmip pad already powered off\n", __func__);
793 if (--utmip_pad_count == 0)
794 utmi_phy_pad(prod_list, false);
796 spin_unlock_irqrestore(&utmip_pad_lock, flags);
797 clk_disable(utmi_pad_clk);
798 if (!IS_ERR_OR_NULL(usb2_trk))
799 clk_disable(usb2_trk);
803 EXPORT_SYMBOL_GPL(utmi_phy_pad_disable);
806 int hsic_trk_enable(void)
808 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
811 /* TODO : need to enable HSIC_TRK clk */
812 spin_lock_irqsave(&hsic_pad_lock, flags);
815 tegra_usb_pad_reg_update(XUSB_PADCTL_USB2_PAD_MUX_0,
816 HSIC_PAD_TRK(~0) , HSIC_PAD_TRK(HSIC_PAD_TRK_XUSB));
818 tegra_usb_pad_reg_update(XUSB_PADCTL_HSIC_PAD_TRK_CTL_0,
819 HSIC_TRK_START_TIMER(~0), HSIC_TRK_START_TIMER(0x1e));
821 tegra_usb_pad_reg_update(XUSB_PADCTL_HSIC_PAD_TRK_CTL_0,
822 HSIC_TRK_DONE_RESET_TIMER(~0) , HSIC_TRK_DONE_RESET_TIMER(0xa));
826 tegra_usb_pad_reg_update(XUSB_PADCTL_HSIC_PAD_TRK_CTL_0,
827 HSIC_PD_TRK(~0), HSIC_PD_TRK(0));
829 spin_unlock_irqrestore(&hsic_pad_lock, flags);
830 /* TODO : need to disable HSIC_TRK clk */
834 EXPORT_SYMBOL_GPL(hsic_trk_enable);
837 static void get_usb_calib_data(int pad, u32 *hs_curr_level_pad,
838 u32 *term_range_adj, u32 *rpd_ctl, u32 *hs_iref_cap)
840 u32 usb_calib0 = tegra_fuse_readl(FUSE_SKU_USB_CALIB_0);
842 * read from usb_calib0 and pass to driver
843 * set HS_CURR_LEVEL (PAD0) = usb_calib0[5:0]
844 * set TERM_RANGE_ADJ = usb_calib0[10:7]
845 * set HS_SQUELCH_LEVEL = usb_calib0[12:11]
846 * set HS_IREF_CAP = usb_calib0[14:13]
847 * set HS_CURR_LEVEL (PAD1) = usb_calib0[20:15]
849 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
850 u32 usb_calib_ext = tegra_fuse_readl(FUSE_USB_CALIB_EXT_0);
851 /* RPD_CTRL = USB_CALIB_EXT[4:0] */
853 pr_debug("usb_calib0 = 0x%08x\n", usb_calib0);
854 pr_debug("usb_calib_ext = 0x%08x\n", usb_calib_ext);
856 *hs_curr_level_pad = (usb_calib0 >>
857 ((!pad) ? 0 : ((6 * (pad + 1)) - 1))) & 0x3f;
858 *term_range_adj = (usb_calib0 >> 7) & 0xf;
859 *rpd_ctl = (usb_calib_ext >> 0) & 0x1f;
862 pr_info("usb_calib0 = 0x%08x\n", usb_calib0);
863 *hs_curr_level_pad = (usb_calib0 >>
864 ((!pad) ? 0 : (15 + 7 * (pad - 1)))) & 0x3f;
865 *term_range_adj = (usb_calib0 >> 7) & 0xf;
866 *hs_iref_cap = (usb_calib0 >> 13) & 0x3;
871 static u8 ss_pad_inited = 0x0;
872 static u8 utmi_pad_inited = 0x0;
874 void xusb_utmi_pad_deinit(int pad)
877 spin_lock_irqsave(&xusb_padctl_lock, flags);
878 utmi_pad_inited &= ~(1 << pad);
879 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
881 EXPORT_SYMBOL_GPL(xusb_utmi_pad_deinit);
883 void xusb_utmi_pad_init(int pad, u32 cap, bool external_pmic)
885 unsigned long val, flags;
886 u32 ctl0_offset, ctl1_offset, batry_chg_1;
887 static u32 hs_curr_level_pad, term_range_adj;
888 static u32 rpd_ctl, hs_iref_cap;
889 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
891 spin_lock_irqsave(&xusb_padctl_lock, flags);
892 /* Check if programmed */
893 if (utmi_pad_inited & (1 << pad)) {
894 pr_warn("Already init for utmi pad %d\n", pad);
895 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
899 /* program utmi pad */
900 val = readl(pad_base + XUSB_PADCTL_USB2_PAD_MUX_0);
901 val &= ~PAD_PORT_MASK(pad);
902 val |= PAD_PORT_XUSB(pad);
903 writel(val, pad_base + XUSB_PADCTL_USB2_PAD_MUX_0);
905 val = readl(pad_base + XUSB_PADCTL_USB2_PORT_CAP_0);
906 val &= ~USB2_OTG_PORT_CAP(pad, ~0);
908 writel(val, pad_base + XUSB_PADCTL_USB2_PORT_CAP_0);
910 val = readl(pad_base + XUSB_PADCTL_USB2_OC_MAP_0);
911 val &= ~PORT_OC_PIN(pad, ~0);
912 val |= PORT_OC_PIN(pad, OC_DISABLED);
913 writel(val, pad_base + XUSB_PADCTL_USB2_OC_MAP_0);
915 val = readl(pad_base + XUSB_PADCTL_VBUS_OC_MAP_0);
916 val &= ~VBUS_OC_MAP(pad, ~0);
917 val |= VBUS_OC_MAP(pad, OC_DISABLED);
918 writel(val, pad_base + XUSB_PADCTL_VBUS_OC_MAP_0);
920 * Modify only the bits which belongs to the port
921 * and enable respective VBUS_PAD for the port
924 val = readl(pad_base + XUSB_PADCTL_OC_DET_0);
925 val &= ~VBUS_EN_OC_MAP(pad, ~0);
926 val |= VBUS_EN_OC_MAP(pad, OC_VBUS_PAD(pad));
927 writel(val, pad_base + XUSB_PADCTL_OC_DET_0);
930 val = readl(pad_base + XUSB_PADCTL_USB2_OC_MAP_0);
931 val &= ~PORT_OC_PIN(pad, ~0);
932 val |= PORT_OC_PIN(pad, OC_VBUS_PAD(pad));
933 writel(val, pad_base + XUSB_PADCTL_USB2_OC_MAP_0);
935 ctl0_offset = XUSB_PADCTL_USB2_OTG_PAD_CTL_0(pad);
936 ctl1_offset = XUSB_PADCTL_USB2_OTG_PAD_CTL_1(pad);
938 get_usb_calib_data(pad, &hs_curr_level_pad,
939 &term_range_adj, &rpd_ctl, &hs_iref_cap);
941 val = readl(pad_base + ctl0_offset);
942 val &= ~(USB2_OTG_HS_CURR_LVL | USB2_OTG_PD_ZI);
943 val |= hs_curr_level_pad | USB2_OTG_PD | USB2_OTG_PD2;
944 writel(val, pad_base + ctl0_offset);
946 val = readl(pad_base + ctl1_offset);
947 val &= ~(USB2_OTG_TERM_RANGE_ADJ | RPD_CTRL
948 | USB2_OTG_HS_IREF_CAP
949 | USB2_OTG_PD_CHRP_FORCE_POWERUP
950 | USB2_OTG_PD_DISC_FORCE_POWERUP);
951 val |= (rpd_ctl << 26) |
952 (term_range_adj << 3) |
953 (hs_iref_cap << 9) | USB2_OTG_PD_DR;
954 writel(val, pad_base + ctl1_offset);
956 batry_chg_1 = XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1(pad);
958 val = readl(pad_base + batry_chg_1);
959 val &= ~(VREG_FIX18 | VREG_LEV);
960 if ((cap >> (4 * pad)) == XUSB_DEVICE_MODE)
962 if ((cap >> (4 * pad)) == XUSB_HOST_MODE)
964 writel(val, pad_base + batry_chg_1);
966 utmi_pad_inited |= (1 << pad);
967 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
969 /* Dump register value */
970 pr_debug("[%s] UTMI pad %d, cap %x\n", __func__ , pad, cap);
971 pr_debug("XUSB_PADCTL_USB2_PAD_MUX_0 = 0x%x\n"
972 , readl(pad_base + XUSB_PADCTL_USB2_PAD_MUX_0));
973 pr_debug("XUSB_PADCTL_USB2_PORT_CAP_0 = 0x%x\n"
974 , readl(pad_base + XUSB_PADCTL_USB2_PORT_CAP_0));
975 pr_debug("XUSB_PADCTL_USB2_OC_MAP_0 = 0x%x\n"
976 , readl(pad_base + XUSB_PADCTL_USB2_OC_MAP_0));
977 pr_debug("XUSB_PADCTL_VBUS_OC_MAP_0 = 0x%x\n"
978 , readl(pad_base + XUSB_PADCTL_VBUS_OC_MAP_0));
979 pr_debug("XUSB_PADCTL_USB2_OTG_PAD_CTL_0 (0x%x) = 0x%x\n"
980 , ctl0_offset , readl(pad_base + ctl0_offset));
981 pr_debug("XUSB_PADCTL_USB2_OTG_PAD_CTL_1 (0x%x) = 0x%x\n"
982 , ctl1_offset, readl(pad_base + ctl1_offset));
983 pr_debug("XUSB_PADCTL_USB2_BATTERY_CHRG_CTL1 (0x%x) = 0x%x\n"
984 , batry_chg_1, readl(pad_base + batry_chg_1));
986 EXPORT_SYMBOL_GPL(xusb_utmi_pad_init);
988 void xusb_utmi_pad_driver_power(int pad, bool on)
990 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
991 u32 ctl0_val, ctl1_val, ctl0_offset, ctl1_offset;
994 ctl0_offset = XUSB_PADCTL_USB2_OTG_PAD_CTL_0(pad);
995 ctl1_offset = XUSB_PADCTL_USB2_OTG_PAD_CTL_1(pad);
997 spin_lock_irqsave(&xusb_padctl_lock, flags);
999 ctl0_val = readl(pad_base + ctl0_offset);
1000 ctl1_val = readl(pad_base + ctl1_offset);
1003 ctl0_val &= ~(USB2_OTG_PD | USB2_OTG_PD2);
1004 ctl1_val &= ~(USB2_OTG_PD_DR);
1006 ctl0_val |= USB2_OTG_PD | USB2_OTG_PD2;
1007 ctl1_val |= USB2_OTG_PD_DR;
1010 writel(ctl0_val, pad_base + ctl0_offset);
1011 writel(ctl1_val, pad_base + ctl1_offset);
1013 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1015 EXPORT_SYMBOL_GPL(xusb_utmi_pad_driver_power);
1017 void xusb_ss_pad_deinit(int pad)
1019 unsigned long flags;
1020 spin_lock_irqsave(&xusb_padctl_lock, flags);
1021 ss_pad_inited &= ~(1 << pad);
1022 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1024 EXPORT_SYMBOL_GPL(xusb_ss_pad_deinit);
1026 void xusb_ss_pad_init(int pad, int port_map, u32 cap)
1028 unsigned long val, flags;
1029 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1031 spin_lock_irqsave(&xusb_padctl_lock, flags);
1032 /* Check if programmed */
1033 if (ss_pad_inited & (1 << pad)) {
1034 pr_warn("Already init for ss pad %d\n", pad);
1035 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1039 /* Program ss pad */
1040 val = readl(pad_base + XUSB_PADCTL_SS_PORT_MAP);
1041 val &= ~SS_PORT_MAP(pad, ~0);
1042 val |= SS_PORT_MAP(pad, port_map);
1043 writel(val, pad_base + XUSB_PADCTL_SS_PORT_MAP);
1045 val = readl(pad_base + XUSB_PADCTL_USB2_PORT_CAP_0);
1046 val &= ~USB2_OTG_PORT_CAP(port_map, ~0);
1047 val |= USB2_OTG_PORT_CAP(port_map, cap);
1048 writel(val, pad_base + XUSB_PADCTL_USB2_PORT_CAP_0);
1050 ss_pad_inited |= (1 << pad);
1051 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1052 pr_debug("[%s] ss pad %d\n", __func__ , pad);
1053 pr_debug("XUSB_PADCTL_SS_PORT_MAP = 0x%x\n"
1054 , readl(pad_base + XUSB_PADCTL_SS_PORT_MAP));
1056 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
1057 /* read and print xusb prod settings for the SS pad */
1058 val = readl(pad_base + XUSB_PADCTL_UPHY_USB3_ECTL_2_0(pad));
1059 val &= XUSB_PADCTL_UPHY_USB3_ECTL_2_0_RX_CTLE_MASK;
1060 pr_debug("xusb_prod port%d RX_CTLE = 0x%lx\n", pad, val);
1062 val = readl(pad_base + XUSB_PADCTL_UPHY_USB3_ECTL_3_0(pad));
1063 pr_debug("xusb_prod port%d RX_DFE = 0x%lx\n", pad, val);
1065 val = readl(pad_base + XUSB_PADCTL_UPHY_USB3_ECTL_4_0(pad));
1066 val &= XUSB_PADCTL_UPHY_USB3_ECTL_4_0_RX_CDR_CTRL_MASK;
1067 pr_debug("xusb_prod port%d RX_CDR_CTRL = 0x%lx\n", pad, val >> 16);
1069 val = readl(pad_base + XUSB_PADCTL_UPHY_USB3_ECTL_6_0(pad));
1070 pr_debug("xusb_prod port%d RX_EQ_CTRL_H = 0x%lx\n", pad, val);
1073 EXPORT_SYMBOL_GPL(xusb_ss_pad_init);
1075 void usb2_vbus_id_init(void)
1077 unsigned long val, flags;
1078 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1080 spin_lock_irqsave(&xusb_padctl_lock, flags);
1081 val = readl(pad_base + XUSB_PADCTL_USB2_VBUS_ID_0);
1082 val &= ~(VBUS_SOURCE_SELECT(~0) | ID_SOURCE_SELECT(~0));
1083 val |= (VBUS_SOURCE_SELECT(1) | ID_SOURCE_SELECT(1));
1084 writel(val, pad_base + XUSB_PADCTL_USB2_VBUS_ID_0);
1086 /* clear wrong status change */
1087 val = readl(pad_base + XUSB_PADCTL_USB2_VBUS_ID_0);
1088 writel(val, pad_base + XUSB_PADCTL_USB2_VBUS_ID_0);
1090 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1091 pr_debug("[%s] VBUS_ID\n", __func__);
1092 pr_debug("XUSB_PADCTL_USB2_VBUS_ID_0 = 0x%x\n"
1093 , readl(pad_base + XUSB_PADCTL_USB2_VBUS_ID_0));
1095 EXPORT_SYMBOL_GPL(usb2_vbus_id_init);
1097 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
1098 static void tegra_xusb_uphy_misc(bool ovrd, enum padctl_lane lane)
1101 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1102 u16 misc_pad_ctl2_regs[] = {
1103 [PEX_P0] = XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2,
1104 [PEX_P1] = XUSB_PADCTL_UPHY_MISC_PAD_P1_CTL2,
1105 [PEX_P2] = XUSB_PADCTL_UPHY_MISC_PAD_P2_CTL2,
1106 [PEX_P3] = XUSB_PADCTL_UPHY_MISC_PAD_P3_CTL2,
1107 [PEX_P4] = XUSB_PADCTL_UPHY_MISC_PAD_P4_CTL2,
1108 [PEX_P5] = XUSB_PADCTL_UPHY_MISC_PAD_P5_CTL2,
1109 [PEX_P6] = XUSB_PADCTL_UPHY_MISC_PAD_P6_CTL2,
1110 [SATA_S0] = XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL2,
1113 if ((lane < LANE_MIN) || (lane > LANE_MAX)) {
1114 pr_warn("%s invalid lane number %d\n", __func__, lane);
1118 pr_debug("%s lane %d override IDDQ %d\n", __func__, lane, ovrd);
1120 /* WAR: Override pad controls and keep UPHy under IDDQ and */
1121 /* SLEEP 3 state during lane ownership changes and powergating */
1122 val = readl(pad_base + misc_pad_ctl2_regs[lane]);
1124 /* register bit-fields are same across all lanes */
1125 val |= XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_TX_IDDQ |
1126 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_RX_IDDQ |
1127 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_TX_IDDQ_OVRD |
1128 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_RX_IDDQ_OVRD |
1129 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_TX_SLEEP |
1130 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_RX_SLEEP |
1131 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_TX_PWR_OVRD |
1132 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_RX_PWR_OVRD;
1135 val &= ~(XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_TX_PWR_OVRD |
1136 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_RX_PWR_OVRD |
1137 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_TX_IDDQ_OVRD |
1138 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2_RX_IDDQ_OVRD);
1140 writel(val, pad_base + misc_pad_ctl2_regs[lane]);
1143 static void usb3_pad_mux_set(u8 lane)
1146 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1148 if (lane == USB3_LANE_NOT_ENABLED)
1150 val = readl(pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
1151 val &= ~PAD_MUX_PAD_LANE(lane, ~0);
1152 val |= PAD_MUX_PAD_LANE(lane, 1);
1153 writel(val, pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
1157 static void usb3_lane_out_of_iddq(u8 lane)
1160 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1162 if (lane == USB3_LANE_NOT_ENABLED)
1164 /* Bring enabled lane out of IDDQ */
1165 val = readl(pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
1166 val |= PAD_MUX_PAD_LANE_IDDQ(lane, 1);
1167 writel(val, pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
1170 static void usb3_release_padmux_state_latch(void)
1173 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1175 /* clear AUX_MUX_LP0 related bits in ELPG_PROGRAM_1 */
1178 val = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
1179 val &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN;
1180 writel(val, pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
1184 val &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN_EARLY;
1185 writel(val, pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
1189 val &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_VCORE_DOWN;
1190 writel(val, pad_base + XUSB_PADCTL_ELPG_PROGRAM_1);
1194 static int tegra_xusb_padctl_phy_enable(void);
1195 static void tegra_xusb_padctl_phy_disable(void);
1196 static int usb3_phy_refcnt = 0x0;
1198 void usb3_phy_pad_disable(void)
1200 unsigned long flags;
1201 spin_lock_irqsave(&xusb_padctl_lock, flags);
1203 pr_debug("%s usb3_phy_refcnt %d\n", __func__, usb3_phy_refcnt);
1206 if (usb3_phy_refcnt == 0)
1207 tegra_xusb_padctl_phy_disable();
1209 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1213 * Have below lane define used for each port
1224 int usb3_phy_pad_enable(u32 lane_owner)
1226 unsigned long flags;
1228 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1230 pr_debug("%s usb3_phy_refcnt %d\n", __func__, usb3_phy_refcnt);
1231 spin_lock_irqsave(&xusb_padctl_lock, flags);
1233 if (usb3_phy_refcnt > 0)
1236 /* Program SATA pad phy */
1237 if ((lane_owner & 0xf000) == SATA_LANE)
1238 t210_sata_uphy_pll_init(true);
1240 tegra_xusb_padctl_phy_enable();
1242 /* Check PCIe/SATA pad phy programmed */
1243 pr_debug("[%s] PCIe pad/ SATA pad phy parameter\n", __func__);
1244 pr_debug("XUSB_PADCTL_UPHY_PLL_S0_CTL_1_0 = 0x%x\n"
1245 , readl(pad_base + XUSB_PADCTL_UPHY_PLL_S0_CTL_1_0));
1246 pr_debug("XUSB_PADCTL_UPHY_PLL_S0_CTL_2_0 = 0x%x\n"
1247 , readl(pad_base + XUSB_PADCTL_UPHY_PLL_S0_CTL_2_0));
1248 pr_debug("XUSB_PADCTL_UPHY_PLL_S0_CTL_4_0 = 0x%x\n"
1249 , readl(pad_base + XUSB_PADCTL_UPHY_PLL_S0_CTL_4_0));
1250 pr_debug("XUSB_PADCTL_UPHY_PLL_S0_CTL_5_0 = 0x%x\n"
1251 , readl(pad_base + XUSB_PADCTL_UPHY_PLL_S0_CTL_5_0));
1252 pr_debug("XUSB_PADCTL_UPHY_PLL_P0_CTL2_0 = 0x%x\n"
1253 , readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0));
1254 pr_debug("XUSB_PADCTL_UPHY_PLL_P0_CTL5_0 = 0x%x\n"
1255 , readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL5_0));
1257 for (pad = 0; pad < SS_PAD_COUNT; pad++) {
1258 u8 lane = (lane_owner >> (pad * 4)) & 0xf;
1259 enum padctl_lane lane_enum = usb3_laneowner_to_lane_enum(lane);
1261 if (lane == USB3_LANE_NOT_ENABLED)
1263 tegra_xusb_uphy_misc(true, lane_enum);
1264 usb3_pad_mux_set(lane);
1265 tegra_xusb_uphy_misc(false, lane_enum);
1268 pr_debug("[%s] ss pad mux\n", __func__);
1269 pr_debug("XUSB_PADCTL_USB3_PAD_MUX_0 = 0x%x\n"
1270 , readl(pad_base + XUSB_PADCTL_USB3_PAD_MUX_0));
1272 /* Bring out of IDDQ */
1273 for (pad = 0; pad < SS_PAD_COUNT; pad++)
1274 usb3_lane_out_of_iddq((lane_owner >> (pad * 4)) & 0xf);
1276 pr_debug("ss lane exit IDDQ\n");
1277 pr_debug("XUSB_PADCTL_USB3_PAD_MUX_0 = 0x%x\n"
1278 , readl(pad_base + XUSB_PADCTL_USB3_PAD_MUX_0));
1280 pr_debug("ss release state latching\n");
1281 pr_debug("XUSB_PADCTL_ELPG_PROGRAM_1 = 0x%x\n"
1282 , readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_1));
1286 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1291 void usb3_phy_pad_disable(void) {}
1293 int usb3_phy_pad_enable(u32 lane_owner)
1295 unsigned long val, flags;
1296 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1298 spin_lock_irqsave(&xusb_padctl_lock, flags);
1300 /* Program SATA pad phy */
1301 if (lane_owner & BIT(0)) {
1302 void __iomem *clk_base = IO_ADDRESS(TEGRA_CLK_RESET_BASE);
1304 val = readl(pad_base + XUSB_PADCTL_IOPHY_PLL_S0_CTL1_0);
1305 val &= ~XUSB_PADCTL_IOPHY_PLL_S0_CTL1_0_PLL0_REFCLK_NDIV_MASK;
1306 val |= XUSB_PADCTL_IOPHY_PLL_S0_CTL1_0_PLL0_REFCLK_NDIV;
1307 writel(val, pad_base + XUSB_PADCTL_IOPHY_PLL_S0_CTL1_0);
1309 val = readl(pad_base + XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0);
1310 val &= ~(XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0_XDIGCLK_SEL_MASK |
1311 XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0_TXCLKREF_SEL |
1312 XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0_TCLKOUT_EN |
1313 XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0_PLL0_CP_CNTL_MASK |
1314 XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0_PLL1_CP_CNTL_MASK);
1315 val |= XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0_XDIGCLK_SEL |
1316 XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0_TXCLKREF_SEL |
1317 XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0_PLL0_CP_CNTL |
1318 XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0_PLL1_CP_CNTL;
1320 writel(val, pad_base + XUSB_PADCTL_IOPHY_PLL_S0_CTL2_0);
1322 val = readl(pad_base + XUSB_PADCTL_IOPHY_PLL_S0_CTL3_0);
1323 val &= ~XUSB_PADCTL_IOPHY_PLL_S0_CTL3_0_RCAL_BYPASS;
1324 writel(val, pad_base + XUSB_PADCTL_IOPHY_PLL_S0_CTL3_0);
1326 /* Enable SATA PADPLL clocks */
1327 val = readl(clk_base + CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1328 val &= ~SATA_PADPLL_RESET_SWCTL;
1329 val |= SATA_PADPLL_USE_LOCKDET | SATA_SEQ_START_STATE;
1330 writel(val, clk_base + CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1334 val = readl(clk_base + CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1335 val |= SATA_SEQ_ENABLE;
1336 writel(val, clk_base + CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1339 if ((lane_owner & BIT(1)) || (lane_owner & BIT(2))) {
1340 val = readl(pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL2_0);
1341 val &= ~XUSB_PADCTL_IOPHY_PLL_P0_CTL2_PLL0_CP_CNTL_MASK;
1342 val |= XUSB_PADCTL_IOPHY_PLL_P0_CTL2_PLL0_CP_CNTL_VAL;
1343 writel(val, pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL2_0);
1347 * program ownership of lanes owned by USB3 based on odmdata[28:30]
1348 * odmdata[28] = 0 (SATA lane owner = SATA),
1349 * odmdata[28] = 1 (SATA lane owner = USB3_SS port1)
1350 * odmdata[29] = 0 (PCIe lane1 owner = PCIe),
1351 * odmdata[29] = 1 (PCIe lane1 owner = USB3_SS port1)
1352 * odmdata[30] = 0 (PCIe lane0 owner = PCIe),
1353 * odmdata[30] = 1 (PCIe lane0 owner = USB3_SS port0)
1354 * FIXME: Check any GPIO settings needed ?
1356 val = readl(pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
1357 /* USB3_SS port1 can either be mapped to SATA lane or PCIe lane1 */
1358 if (lane_owner & BIT(0)) {
1359 val &= ~XUSB_PADCTL_USB3_PAD_MUX_SATA_PAD_LANE0;
1360 val |= XUSB_PADCTL_USB3_PAD_MUX_SATA_PAD_LANE0_OWNER_USB3_SS;
1361 } else if (lane_owner & BIT(1)) {
1362 val &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE1;
1363 val |= XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE1_OWNER_USB3_SS;
1365 /* USB_SS port0 is alwasy mapped to PCIe lane0 */
1366 if (lane_owner & BIT(2)) {
1367 val &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE0;
1368 val |= XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE0_OWNER_USB3_SS;
1370 writel(val, pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
1372 /* Bring enabled lane out of IDDQ */
1373 val = readl(pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
1374 if (lane_owner & BIT(0))
1375 val |= XUSB_PADCTL_USB3_PAD_MUX_FORCE_SATA_PAD_IDDQ_DISABLE_MASK0;
1376 else if (lane_owner & BIT(1))
1377 val |= XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1;
1378 if (lane_owner & BIT(2))
1379 val |= XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
1380 writel(val, pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
1384 /* clear AUX_MUX_LP0 related bits in ELPG_PROGRAM */
1385 val = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
1386 val &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN;
1387 writel(val, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
1391 val &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN_EARLY;
1392 writel(val, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
1396 val &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_VCORE_DOWN;
1397 writel(val, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
1399 usb_lanes = lane_owner;
1401 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1406 EXPORT_SYMBOL_GPL(usb3_phy_pad_enable);
1407 EXPORT_SYMBOL_GPL(usb3_phy_pad_disable);
1409 void tegra_usb_pad_reg_update(u32 reg_offset, u32 mask, u32 val)
1411 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1412 unsigned long flags;
1415 spin_lock_irqsave(&xusb_padctl_reg_lock, flags);
1417 reg = readl(pad_base + reg_offset);
1420 writel(reg, pad_base + reg_offset);
1422 spin_unlock_irqrestore(&xusb_padctl_reg_lock, flags);
1424 EXPORT_SYMBOL_GPL(tegra_usb_pad_reg_update);
1426 u32 tegra_usb_pad_reg_read(u32 reg_offset)
1428 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1429 unsigned long flags;
1432 spin_lock_irqsave(&xusb_padctl_reg_lock, flags);
1433 reg = readl(pad_base + reg_offset);
1434 spin_unlock_irqrestore(&xusb_padctl_reg_lock, flags);
1438 EXPORT_SYMBOL_GPL(tegra_usb_pad_reg_read);
1440 void tegra_usb_pad_reg_write(u32 reg_offset, u32 val)
1442 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1443 unsigned long flags;
1444 spin_lock_irqsave(&xusb_padctl_reg_lock, flags);
1445 writel(val, pad_base + reg_offset);
1446 spin_unlock_irqrestore(&xusb_padctl_reg_lock, flags);
1448 EXPORT_SYMBOL_GPL(tegra_usb_pad_reg_write);
1450 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
1451 int t210_sata_uphy_pll_init(bool sata_used_by_xusb)
1457 void __iomem *clk_base = IO_ADDRESS(TEGRA_CLK_RESET_BASE);
1459 val = readl(clk_base + CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1460 if (SATA_SEQ_ENABLE & val) {
1461 pr_info("%s: sata uphy already enabled\n", __func__);
1465 pr_info("%s: init sata uphy pll\n", __func__);
1467 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL2_0,
1468 S0_CTL2_PLL0_CAL_CTRL(~0),
1469 S0_CTL2_PLL0_CAL_CTRL(0x136));
1471 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL5_0,
1472 S0_CTL5_PLL0_DCO_CTRL(~0),
1473 S0_CTL5_PLL0_DCO_CTRL(0x2a));
1475 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL1_0,
1476 S0_CTL1_PLL0_PWR_OVRD, S0_CTL1_PLL0_PWR_OVRD);
1478 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL2_0,
1479 S0_CTL2_PLL0_CAL_OVRD, S0_CTL2_PLL0_CAL_OVRD);
1481 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL8_0,
1482 S0_CTL8_PLL0_RCAL_OVRD, S0_CTL8_PLL0_RCAL_OVRD);
1484 pr_info("%s %s uses SATA Lane\n", __func__,
1485 sata_used_by_xusb ? "XUSB" : "SATA");
1487 if (sata_used_by_xusb) {
1495 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL4_0,
1496 S0_PLL0_TXCLKREF_SEL(~0), S0_PLL0_TXCLKREF_SEL(txclkref_sel));
1498 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL1_0,
1499 S0_PLL0_FREQ_NDIV(~0), S0_PLL0_FREQ_NDIV(freq_ndiv));
1501 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL1_0,
1502 (S0_CTL1_PLL0_IDDQ | S0_CTL1_PLL0_SLEEP), 0);
1506 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL2_0,
1507 S0_CTL2_PLL0_CAL_EN, S0_CTL2_PLL0_CAL_EN);
1509 calib_timeout = 20; /* 200 us in total */
1511 val = tegra_usb_pad_reg_read(XUSB_PADCTL_UPHY_PLL_S0_CTL2_0);
1513 if (--calib_timeout == 0) {
1514 pr_err("%s: timeout for CAL_DONE set\n", __func__);
1517 } while (!(val & S0_CTL2_PLL0_CAL_DONE));
1519 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL2_0,
1520 S0_CTL2_PLL0_CAL_EN, 0);
1522 calib_timeout = 20; /* 200 us in total */
1524 val = tegra_usb_pad_reg_read(XUSB_PADCTL_UPHY_PLL_S0_CTL2_0);
1526 if (--calib_timeout == 0) {
1527 pr_err("%s: timeout for CAL_DONE clear\n", __func__);
1530 } while (val & S0_CTL2_PLL0_CAL_DONE);
1532 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL1_0,
1533 S0_CTL1_PLL0_ENABLE, S0_CTL1_PLL0_ENABLE);
1535 calib_timeout = 20; /* 200 us in total */
1537 val = tegra_usb_pad_reg_read(XUSB_PADCTL_UPHY_PLL_S0_CTL1_0);
1539 if (--calib_timeout == 0) {
1540 pr_err("%s: timeout for LOCKDET set\n", __func__);
1543 } while (!(val & S0_CTL1_PLL0_LOCKDET_STATUS));
1545 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL8_0,
1546 S0_CTL8_PLL0_RCAL_EN, S0_CTL8_PLL0_RCAL_EN);
1548 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL8_0,
1549 S0_CTL8_PLL0_RCAL_CLK_EN, S0_CTL8_PLL0_RCAL_CLK_EN);
1551 calib_timeout = 20; /* 200 us in total */
1553 val = tegra_usb_pad_reg_read(XUSB_PADCTL_UPHY_PLL_S0_CTL8_0);
1555 if (--calib_timeout == 0) {
1556 pr_err("%s: timeout for RCAL_DONE set\n", __func__);
1559 } while (!(val & S0_CTL8_PLL0_RCAL_DONE));
1561 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL8_0,
1562 S0_CTL8_PLL0_RCAL_EN, 0);
1564 calib_timeout = 20; /* 200 us in total */
1566 val = tegra_usb_pad_reg_read(XUSB_PADCTL_UPHY_PLL_S0_CTL8_0);
1568 if (--calib_timeout == 0) {
1569 pr_err("%s: timeout for RCAL_DONE clear\n", __func__);
1572 } while (val & S0_CTL8_PLL0_RCAL_DONE);
1574 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL8_0,
1575 S0_CTL8_PLL0_RCAL_CLK_EN, 0);
1577 /* Enable SATA PADPLL HW power sequencer */
1578 val = readl(clk_base + CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1579 val &= ~SATA_PADPLL_RESET_SWCTL;
1580 val |= SATA_PADPLL_USE_LOCKDET | SATA_PADPLL_SLEEP_IDDQ;
1581 writel(val, clk_base + CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1583 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL1_0,
1584 S0_CTL1_PLL0_PWR_OVRD, 0);
1586 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL2_0,
1587 S0_CTL2_PLL0_CAL_OVRD, 0);
1589 tegra_usb_pad_reg_update(XUSB_PADCTL_UPHY_PLL_S0_CTL8_0,
1590 S0_CTL8_PLL0_RCAL_OVRD, 0);
1593 val = readl(clk_base + CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1594 val |= SATA_SEQ_ENABLE;
1595 writel(val, clk_base + CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1599 EXPORT_SYMBOL_GPL(t210_sata_uphy_pll_init);
1601 static int pex_pll_refcnt;
1602 static void tegra_xusb_padctl_phy_disable(void)
1604 pr_debug("%s pex_pll_refcnt %d\n", __func__, pex_pll_refcnt);
1608 static int tegra_xusb_padctl_phy_enable(void)
1610 unsigned long val, timeout;
1611 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1612 void __iomem *clk_base = IO_ADDRESS(TEGRA_CLK_RESET_BASE);
1614 pr_debug("%s pex_pll_refcnt %d\n", __func__, pex_pll_refcnt);
1616 if (pex_pll_refcnt > 0)
1617 goto done; /* already done */
1619 val = readl(clk_base + CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0);
1620 if (XUSBIO_SEQ_ENABLE & val) {
1621 pr_info("%s: pex uphy already enabled\n", __func__);
1625 pr_info("%s: init pex uphy pll\n", __func__);
1627 /* Enable overrides to enable SW control over PLL */
1628 /* init UPHY, Set PWR/CAL/RCAL OVRD */
1629 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1630 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL2_CAL_CTRL_MASK;
1631 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL2_PLL0_CAL_CTRL;
1632 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1634 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL5_0);
1635 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL5_DCO_CTRL_MASK;
1636 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL5_PLL0_DCO_CTRL;
1637 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL5_0);
1639 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1640 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL1_PLL0_PWR_OVRD;
1641 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1643 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1644 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL2_PLL0_CAL_OVRD;
1645 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1647 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1648 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL8_PLL0_RCAL_OVRD;
1649 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1651 /* Select REFCLK, TXCLKREF and Enable */
1652 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL4_0);
1653 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL4_PLL0_REFCLK_SEL_MASK;
1654 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL4_PLL0_TXCLKREF_SEL_MASK;
1655 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL4_PLL0_TXCLKREF_SEL;
1656 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL4_PLL0_TXCLKREF_EN;
1657 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL4_0);
1659 /* FREQ_MDIV & FREQ_NDIV programming for 500 MHz */
1660 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1661 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL1_PLL0_FREQ_MDIV_MASK;
1662 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL1_PLL0_FREQ_NDIV_MASK;
1663 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL1_PLL0_FREQ_NDIV;
1664 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1666 /* Clear PLL0 iddq and sleep */
1667 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1668 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL1_PLL0_IDDQ;
1669 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1670 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1671 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL1_PLL0_SLEEP;
1672 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1675 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL4_0);
1676 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL4_PLL0_REFCLKBUF_EN;
1677 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL4_0);
1679 /* Perform PLL calibration */
1680 /* Set PLL0_CAL_EN and wait for PLL0_CAL_DONE being set */
1681 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1682 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL2_PLL0_CAL_EN;
1683 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1686 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1688 if (--timeout == 0) {
1689 pr_err("PCIe error: timeout for PLL0_CAL_DONE set\n");
1692 } while (!(val & XUSB_PADCTL_UPHY_PLL_P0_CTL2_PLL0_CAL_DONE));
1694 /* Clear PLL0_CAL_EN and wait for PLL0_CAL_DONE being cleared */
1695 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1696 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL2_PLL0_CAL_EN;
1697 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1700 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1702 if (--timeout == 0) {
1703 pr_err("PCIe error: timeout for PLL0_CAL_DONE cleared\n");
1706 } while (val & XUSB_PADCTL_UPHY_PLL_P0_CTL2_PLL0_CAL_DONE);
1708 /* Set PLL0_ENABLE */
1709 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1710 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL1_PLL0_ENABLE;
1711 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1713 /* Wait for the PLL to lock */
1716 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1718 if (--timeout == 0) {
1719 pr_err("Tegra PCIe error: timeout waiting for PLL\n");
1722 } while (!(val & XUSB_PADCTL_UPHY_PLL_P0_CTL1_PLL0_LOCKDET_STATUS));
1724 /* Perform register calibration */
1725 /* Set PLL0_RCAL_EN and wait for PLL0_RCAL_DONE being set */
1726 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1727 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL8_PLL0_RCAL_EN;
1728 val |= XUSB_PADCTL_UPHY_PLL_P0_CTL8_PLL0_RCAL_CLK_EN;
1729 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1732 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1734 if (--timeout == 0) {
1735 pr_err("PCIe error: timeout for PLL0_RCAL_DONE set\n");
1738 } while (!(val & XUSB_PADCTL_UPHY_PLL_P0_CTL8_PLL0_RCAL_DONE));
1740 /* Clear PLL0_RCAL_EN and wait for PLL0_RCAL_DONE being cleared */
1741 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1742 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL8_PLL0_RCAL_EN;
1743 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1746 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1748 if (--timeout == 0) {
1749 pr_err("PCIe error: timeout for PLL0_RCAL_DONE cleared\n");
1752 } while (val & XUSB_PADCTL_UPHY_PLL_P0_CTL8_PLL0_RCAL_DONE);
1754 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1755 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL8_PLL0_RCAL_CLK_EN;
1756 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1758 /* Enable PEX PADPLL clocks */
1759 val = readl(clk_base + CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0);
1760 val &= ~XUSBIO_CLK_ENABLE_SWCTL;
1761 val &= ~XUSBIO_PADPLL_RESET_SWCTL;
1762 val |= XUSBIO_PADPLL_USE_LOCKDET | XUSBIO_PADPLL_SLEEP_IDDQ;
1763 writel(val, clk_base + CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0);
1765 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1766 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL1_PLL0_PWR_OVRD;
1767 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL1_0);
1769 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1770 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL2_PLL0_CAL_OVRD;
1771 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL2_0);
1773 val = readl(pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1774 val &= ~XUSB_PADCTL_UPHY_PLL_P0_CTL8_PLL0_RCAL_OVRD;
1775 writel(val, pad_base + XUSB_PADCTL_UPHY_PLL_P0_CTL8_0);
1778 val = readl(clk_base + CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0);
1779 val |= XUSBIO_SEQ_ENABLE;
1780 writel(val, clk_base + CLK_RST_CONTROLLER_XUSBIO_PLL_CFG0_0);
1787 static void tegra_xusb_padctl_phy_disable(void)
1791 static int tegra_xusb_padctl_phy_enable(void)
1793 unsigned long val, timeout;
1794 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1796 /* set up PLL inputs in PLL_CTL1 */
1797 val = readl(pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL1_0);
1798 val &= ~XUSB_PADCTL_IOPHY_PLL_P0_CTL1_REFCLK_SEL_MASK;
1799 val |= XUSB_PADCTL_IOPHY_PLL_P0_CTL1_REFCLK_SEL;
1800 writel(val, pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL1_0);
1802 /* set TX ref sel to div5 in PLL_CTL2 */
1803 /* T124 is div5 while T30 is div10,beacuse CAR will divide 2 */
1804 /* in GEN1 mode in T124,and if div10,it will be 125MHZ */
1805 val = readl(pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL2_0);
1806 val |= (XUSB_PADCTL_IOPHY_PLL_P0_CTL2_REFCLKBUF_EN |
1807 XUSB_PADCTL_IOPHY_PLL_P0_CTL2_TXCLKREF_EN |
1808 XUSB_PADCTL_IOPHY_PLL_P0_CTL2_TXCLKREF_SEL);
1809 writel(val, pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL2_0);
1810 #ifdef CONFIG_ARCH_TEGRA_13x_SOC
1811 /* recommended prod setting */
1812 val = readl(pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL2_0);
1813 val &= ~XUSB_PADCTL_IOPHY_PLL_P0_CTL2_PLL0_CP_CNTL_MASK;
1814 val |= XUSB_PADCTL_IOPHY_PLL_P0_CTL2_PLL0_CP_CNTL_VAL;
1815 writel(val, pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL2_0);
1817 /* take PLL out of reset */
1818 val = readl(pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL1_0);
1819 val |= XUSB_PADCTL_IOPHY_PLL_P0_CTL1_PLL_RST_;
1820 writel(val, pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL1_0);
1822 /* Wait for the PLL to lock */
1825 val = readl(pad_base + XUSB_PADCTL_IOPHY_PLL_P0_CTL1_0);
1827 if (--timeout == 0) {
1828 pr_err("Tegra PCIe error: timeout waiting for PLL\n");
1831 } while (!(val & XUSB_PADCTL_IOPHY_PLL_P0_CTL1_PLL0_LOCKDET));
1837 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
1838 static void t210_padctl_force_sata_seq(bool force_off)
1841 void __iomem *clk_base = IO_ADDRESS(TEGRA_CLK_RESET_BASE);
1843 val = readl(clk_base +
1844 CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1847 val |= (SATA_SEQ_IN_SWCTL |
1848 SATA_SEQ_RESET_INPUT_VALUE |
1849 SATA_SEQ_LANE_PD_INPUT_VALUE |
1850 SATA_SEQ_PADPLL_PD_INPUT_VALUE);
1852 val &= ~(SATA_SEQ_IN_SWCTL |
1853 SATA_SEQ_RESET_INPUT_VALUE |
1854 SATA_SEQ_LANE_PD_INPUT_VALUE |
1855 SATA_SEQ_PADPLL_PD_INPUT_VALUE);
1857 writel(val, clk_base +
1858 CLK_RST_CONTROLLER_SATA_PLL_CFG0_0);
1861 static void t210_padctl_enable_sata_idle_detector(bool enable)
1864 tegra_usb_pad_reg_update(
1865 XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL_1_0,
1866 AUX_RX_TERM_EN | AUX_RX_MODE_OVRD |
1867 AUX_TX_IDDQ | AUX_TX_IDDQ_OVRD |
1871 tegra_usb_pad_reg_update(
1872 XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL_1_0,
1873 AUX_RX_TERM_EN | AUX_RX_MODE_OVRD |
1874 AUX_TX_IDDQ | AUX_TX_IDDQ_OVRD |
1876 AUX_RX_TERM_EN | AUX_RX_MODE_OVRD |
1877 AUX_TX_IDDQ | AUX_TX_IDDQ_OVRD);
1881 int tegra_padctl_init_sata_pad(void)
1883 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
1884 unsigned long flags;
1886 if (sata_usb_pad_pll_reset_deassert())
1887 pr_err("%s: fail to deassert sata uphy\n",
1890 spin_lock_irqsave(&xusb_padctl_lock, flags);
1891 if (t210_sata_uphy_pll_init(false))
1892 pr_err("%s: fail to init sata uphy\n",
1894 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1896 /* this is only to decrease refcnt */
1897 sata_usb_pad_pll_reset_assert();
1899 spin_lock_irqsave(&xusb_padctl_lock, flags);
1900 tegra_usb_pad_reg_update(
1901 XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL_1_0,
1902 AUX_RX_MODE_OVRD | AUX_RX_IDLE_EN |
1903 AUX_RX_IDLE_TH(0x3),
1904 AUX_RX_MODE_OVRD | AUX_RX_IDLE_EN |
1905 AUX_RX_IDLE_TH(0x1));
1906 usb3_lane_out_of_iddq(SATA_S0);
1907 usb3_release_padmux_state_latch();
1909 tegra_usb_pad_reg_update(
1910 XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL_4_0,
1911 RX_TERM_EN | RX_TERM_OVRD,
1912 RX_TERM_EN | RX_TERM_OVRD);
1913 t210_padctl_force_sata_seq(false);
1914 t210_padctl_enable_sata_idle_detector(true);
1915 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1920 EXPORT_SYMBOL_GPL(tegra_padctl_init_sata_pad);
1922 int tegra_padctl_enable_sata_pad(bool enable)
1924 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
1925 unsigned long flags;
1927 spin_lock_irqsave(&xusb_padctl_lock, flags);
1930 t210_padctl_enable_sata_idle_detector(true);
1931 t210_padctl_force_sata_seq(false);
1932 tegra_xusb_uphy_misc(false, SATA_S0);
1934 t210_padctl_force_sata_seq(true);
1935 tegra_xusb_uphy_misc(true, SATA_S0);
1936 t210_padctl_enable_sata_idle_detector(false);
1939 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
1944 EXPORT_SYMBOL_GPL(tegra_padctl_enable_sata_pad);
1946 static int tegra_pcie_lane_iddq(bool enable, int lane_owner)
1949 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
1951 #if !defined(CONFIG_ARCH_TEGRA_21x_SOC)
1953 * USB 3.0 lanes and PCIe lanes are shared
1955 * Honour the XUSB lane ownership information while modifying
1956 * the controls for PCIe
1958 bool pcie_modify_lane0_iddq = (usb_lanes & BIT(2)) ? false : true;
1959 bool pcie_modify_lane1_iddq =
1960 (!(usb_lanes & BIT(0)) && (usb_lanes & BIT(1))) ? false : true;
1963 val = readl(pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
1964 switch (lane_owner) {
1965 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
1966 case PCIE_LANES_X4_X1:
1969 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
1972 ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
1973 case PCIE_LANES_X4_X0:
1976 (XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1 |
1977 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2 |
1978 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK3 |
1979 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK4);
1982 ~(XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1 |
1983 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2 |
1984 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK3 |
1985 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK4);
1987 case PCIE_LANES_X2_X1:
1990 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
1993 ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
1994 case PCIE_LANES_X2_X0:
1997 (XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1 |
1998 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2);
2001 ~(XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1 |
2002 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2);
2004 case PCIE_LANES_X0_X1:
2007 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
2010 ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
2013 case PCIE_LANES_X4_X1:
2014 if (pcie_modify_lane0_iddq) {
2017 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
2020 ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK0;
2022 case PCIE_LANES_X4_X0:
2023 if (pcie_modify_lane1_iddq) {
2026 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1;
2029 ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK1;
2031 case PCIE_LANES_X2_X1:
2034 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2;
2037 ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2;
2038 case PCIE_LANES_X2_X0:
2041 (XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK3 |
2042 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK4);
2045 ~(XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK3 |
2046 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK4);
2048 case PCIE_LANES_X0_X1:
2051 XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2;
2054 ~XUSB_PADCTL_USB3_PAD_MUX_FORCE_PCIE_PAD_IDDQ_DISABLE_MASK2;
2058 pr_err("Tegra PCIe IDDQ error: wrong lane config\n");
2061 writel(val, pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
2065 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
2066 static void tegra_pcie_lane_aux_idle(bool ovdr, int lane)
2068 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
2070 u16 misc_pad_ctl1_regs[] = {
2071 [PEX_P0] = XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL2,
2072 [PEX_P1] = XUSB_PADCTL_UPHY_MISC_PAD_P1_CTL2,
2073 [PEX_P2] = XUSB_PADCTL_UPHY_MISC_PAD_P2_CTL2,
2074 [PEX_P3] = XUSB_PADCTL_UPHY_MISC_PAD_P3_CTL2,
2075 [PEX_P4] = XUSB_PADCTL_UPHY_MISC_PAD_P4_CTL2,
2080 /* reduce idle detect threshold for compliance purpose */
2081 val = readl(pad_base + misc_pad_ctl1_regs[lane]);
2082 val &= ~XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL1_AUX_RX_IDLE_TH_MASK;
2083 val |= XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL1_AUX_RX_IDLE_TH;
2084 writel(val, pad_base + misc_pad_ctl1_regs[lane]);
2087 bool tegra_phy_get_lane_rdet(u8 lane_num)
2090 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
2094 data = readl(pad_base + XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL1);
2096 XUSB_PADCTL_UPHY_MISC_PAD_P0_CTL1_AUX_TX_RDET_STATUS;
2099 data = readl(pad_base + XUSB_PADCTL_UPHY_MISC_PAD_P1_CTL1);
2101 XUSB_PADCTL_UPHY_MISC_PAD_P1_CTL1_AUX_TX_RDET_STATUS;
2104 data = readl(pad_base + XUSB_PADCTL_UPHY_MISC_PAD_P2_CTL1);
2106 XUSB_PADCTL_UPHY_MISC_PAD_P2_CTL1_AUX_TX_RDET_STATUS;
2109 data = readl(pad_base + XUSB_PADCTL_UPHY_MISC_PAD_P3_CTL1);
2111 XUSB_PADCTL_UPHY_MISC_PAD_P3_CTL1_AUX_TX_RDET_STATUS;
2114 data = readl(pad_base + XUSB_PADCTL_UPHY_MISC_PAD_P4_CTL1);
2116 XUSB_PADCTL_UPHY_MISC_PAD_P4_CTL1_AUX_TX_RDET_STATUS;
2123 EXPORT_SYMBOL_GPL(tegra_phy_get_lane_rdet);
2126 static void tegra_pcie_lane_misc_pad_override(bool ovdr, int lane_owner)
2128 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
2129 switch (lane_owner) {
2130 case PCIE_LANES_X4_X1:
2131 tegra_xusb_uphy_misc(ovdr, PEX_P0);
2132 tegra_pcie_lane_aux_idle(ovdr, PEX_P0);
2134 case PCIE_LANES_X4_X0:
2135 tegra_xusb_uphy_misc(ovdr, PEX_P1);
2136 tegra_pcie_lane_aux_idle(ovdr, PEX_P1);
2137 tegra_xusb_uphy_misc(ovdr, PEX_P2);
2138 tegra_pcie_lane_aux_idle(ovdr, PEX_P2);
2139 tegra_xusb_uphy_misc(ovdr, PEX_P3);
2140 tegra_pcie_lane_aux_idle(ovdr, PEX_P3);
2141 tegra_xusb_uphy_misc(ovdr, PEX_P4);
2142 tegra_pcie_lane_aux_idle(ovdr, PEX_P4);
2144 case PCIE_LANES_X2_X1:
2145 tegra_xusb_uphy_misc(ovdr, PEX_P0);
2146 tegra_pcie_lane_aux_idle(ovdr, PEX_P0);
2148 case PCIE_LANES_X2_X0:
2149 tegra_xusb_uphy_misc(ovdr, PEX_P1);
2150 tegra_pcie_lane_aux_idle(ovdr, PEX_P1);
2151 tegra_xusb_uphy_misc(ovdr, PEX_P2);
2152 tegra_pcie_lane_aux_idle(ovdr, PEX_P2);
2154 case PCIE_LANES_X0_X1:
2155 tegra_xusb_uphy_misc(ovdr, PEX_P0);
2156 tegra_pcie_lane_aux_idle(ovdr, PEX_P0);
2162 int pcie_phy_pad_enable(bool enable, int lane_owner)
2164 unsigned long val, flags;
2165 void __iomem *pad_base = IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE);
2167 #if !defined(CONFIG_ARCH_TEGRA_21x_SOC)
2168 bool pcie_modify_lane0_owner, pcie_modify_lane1_owner;
2171 spin_lock_irqsave(&xusb_padctl_lock, flags);
2173 #if !defined(CONFIG_ARCH_TEGRA_21x_SOC)
2175 * USB 3.0 lanes and PCIe lanes are shared
2177 * Honour the XUSB lane ownership information while modifying
2178 * the controls for PCIe
2180 pcie_modify_lane0_owner = (usb_lanes & BIT(2)) ? false : true;
2181 pcie_modify_lane1_owner =
2182 (!(usb_lanes & BIT(0)) && (usb_lanes & BIT(1))) ? false : true;
2186 ret = tegra_xusb_padctl_phy_enable();
2190 ret = tegra_pcie_lane_iddq(enable, lane_owner);
2191 if (ret || !enable) {
2193 tegra_xusb_padctl_phy_disable();
2194 tegra_pcie_lane_misc_pad_override(true, lane_owner);
2199 /* clear AUX_MUX_LP0 related bits in ELPG_PROGRAM */
2200 #ifndef CONFIG_ARCH_TEGRA_21x_SOC
2201 val = readl(pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
2202 val &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN;
2203 writel(val, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
2205 val &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_CLAMP_EN_EARLY;
2206 writel(val, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
2208 val &= ~XUSB_PADCTL_ELPG_PROGRAM_AUX_MUX_LP0_VCORE_DOWN;
2209 writel(val, pad_base + XUSB_PADCTL_ELPG_PROGRAM_0);
2212 tegra_pcie_lane_misc_pad_override(true, lane_owner);
2214 val = readl(pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
2215 switch (lane_owner) {
2216 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
2217 case PCIE_LANES_X4_X1:
2218 val &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE0;
2219 case PCIE_LANES_X4_X0:
2220 val |= (XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE1 |
2221 XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE2 |
2222 XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE3 |
2223 XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE4);
2225 case PCIE_LANES_X2_X1:
2226 val &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE0;
2227 case PCIE_LANES_X2_X0:
2228 val |= (XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE1 |
2229 XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE2);
2231 case PCIE_LANES_X0_X1:
2232 val &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE0;
2235 case PCIE_LANES_X4_X1:
2236 if (pcie_modify_lane0_owner)
2237 val &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE0;
2238 case PCIE_LANES_X4_X0:
2239 if (pcie_modify_lane1_owner)
2240 val &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE1;
2241 case PCIE_LANES_X2_X1:
2242 val &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE2;
2243 case PCIE_LANES_X2_X0:
2244 val &= ~(XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE3 |
2245 XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE4);
2247 case PCIE_LANES_X0_X1:
2248 val &= ~XUSB_PADCTL_USB3_PAD_MUX_PCIE_PAD_LANE2;
2252 pr_err("Tegra PCIe error: wrong lane config\n");
2256 writel(val, pad_base + XUSB_PADCTL_USB3_PAD_MUX_0);
2257 tegra_pcie_lane_misc_pad_override(false, lane_owner);
2259 spin_unlock_irqrestore(&xusb_padctl_lock, flags);
2262 EXPORT_SYMBOL_GPL(pcie_phy_pad_enable);
2264 void xusb_enable_pad_protection(bool devmode)
2266 u32 otgpad_ctl0 = tegra_usb_pad_reg_read(
2267 XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1(0));
2269 otgpad_ctl0 &= ~(VREG_FIX18 | VREG_LEV);
2271 otgpad_ctl0 |= devmode ? VREG_LEV_EN : VREG_FIX18;
2273 tegra_usb_pad_reg_write(
2274 XUSB_PADCTL_USB2_BATTERY_CHRG_OTGPAD_CTL1(0), otgpad_ctl0);
2276 EXPORT_SYMBOL_GPL(xusb_enable_pad_protection);
2278 #ifdef CONFIG_ARCH_TEGRA_21x_SOC
2281 tegra_padctl_enable_regulator(struct platform_device *pdev)
2284 struct tegra_padctl *padctl;
2286 padctl = platform_get_drvdata(pdev);
2288 err = regulator_bulk_enable(padctl->soc_data->num_regulator,
2291 dev_err(&pdev->dev, "fail to enable regulator %d\n", err);
2297 tegra_padctl_disable_regulator(struct platform_device *pdev)
2300 struct tegra_padctl *padctl;
2302 padctl = platform_get_drvdata(pdev);
2304 err = regulator_bulk_disable(padctl->soc_data->num_regulator,
2307 dev_err(&pdev->dev, "fail to disable regulator %d\n", err);
2311 tegra_padctl_enable_plle(struct platform_device *pdev)
2314 struct tegra_padctl *padctl;
2316 padctl = platform_get_drvdata(pdev);
2318 err = clk_enable(padctl->plle_clk);
2320 dev_err(&pdev->dev, "fail to enable plle clock\n");
2326 tegra_padctl_disable_plle(struct platform_device *pdev)
2328 struct tegra_padctl *padctl;
2330 padctl = platform_get_drvdata(pdev);
2332 clk_disable(padctl->plle_clk);
2336 tegra_padctl_enable_uphy_pll(struct platform_device *pdev)
2339 struct tegra_padctl *padctl;
2341 padctl = platform_get_drvdata(pdev);
2343 err = pex_usb_pad_pll_reset_deassert();
2345 dev_err(&pdev->dev, "fail to deassert pex pll\n");
2349 err = sata_usb_pad_pll_reset_deassert();
2351 dev_err(&pdev->dev, "fail to deassert sata pll\n");
2355 if ((padctl->lane_owner & 0xf000) != SATA_LANE) {
2356 /* sata driver owns sata lane */
2357 t210_sata_uphy_pll_init(false);
2358 usb3_lane_out_of_iddq(SATA_S0);
2359 t210_padctl_enable_sata_idle_detector(false);
2360 t210_padctl_force_sata_seq(true);
2363 usb3_phy_pad_enable(padctl->lane_owner);
2365 if (padctl->lane_map)
2366 pcie_phy_pad_enable(true, padctl->lane_map);
2368 usb3_release_padmux_state_latch();
2375 tegra_padctl_disable_uphy_pll(struct platform_device *pdev)
2377 struct tegra_padctl *padctl;
2379 padctl = platform_get_drvdata(pdev);
2381 usb3_phy_pad_disable();
2383 if (padctl->lane_map)
2384 pcie_phy_pad_enable(false, padctl->lane_map);
2386 /* this doesn't assert uphy pll if sequencers are enabled */
2387 if (pex_usb_pad_pll_reset_assert())
2388 dev_err(&pdev->dev, "fail to assert pex pll\n");
2389 if (sata_usb_pad_pll_reset_assert())
2390 dev_err(&pdev->dev, "fail to assert sata pll\n");
2394 tegra_padctl_enable_plle_hw(struct platform_device *pdev)
2397 struct tegra_padctl *padctl;
2399 padctl = platform_get_drvdata(pdev);
2401 err = clk_enable(padctl->plle_hw_clk);
2403 dev_err(&pdev->dev, "fail to enable plle_hw\n");
2409 tegra_padctl_disable_plle_hw(struct platform_device *pdev)
2411 struct tegra_padctl *padctl;
2413 padctl = platform_get_drvdata(pdev);
2415 clk_disable(padctl->plle_hw_clk);
2419 tegra_padctl_uphy_init(struct platform_device *pdev)
2423 err = tegra_padctl_enable_plle(pdev);
2427 err = tegra_padctl_enable_uphy_pll(pdev);
2431 err = tegra_padctl_enable_plle_hw(pdev);
2438 tegra_padctl_disable_uphy_pll(pdev);
2440 tegra_padctl_disable_plle(pdev);
2446 tegra_padctl_uphy_deinit(struct platform_device *pdev)
2448 tegra_padctl_disable_plle_hw(pdev);
2449 tegra_padctl_disable_uphy_pll(pdev);
2450 tegra_padctl_disable_plle(pdev);
2454 tegra_padctl_get_regulator(struct platform_device *pdev)
2457 struct tegra_padctl *padctl;
2458 const struct tegra_padctl_soc_data *soc_data;
2462 padctl = platform_get_drvdata(pdev);
2463 soc_data = padctl->soc_data;
2465 size = soc_data->num_regulator *
2466 sizeof(struct regulator_bulk_data);
2467 padctl->regulator = devm_kzalloc(&pdev->dev, size, GFP_ATOMIC);
2468 if (IS_ERR(padctl->regulator)) {
2469 dev_err(&pdev->dev, "fail to alloc regulator\n");
2474 for (i = 0; i < soc_data->num_regulator; i++)
2475 padctl->regulator[i].supply =
2476 soc_data->regulator_name[i];
2478 err = devm_regulator_bulk_get(&pdev->dev, soc_data->num_regulator,
2481 dev_err(&pdev->dev, "fail to get regulator %d\n", err);
2489 static char * const tegra210_padctl_regulator_name[] = {
2490 "avdd_pll_uerefe", "hvdd_pex_pll_e",
2491 "dvdd_pex_pll", "hvddio_pex", "dvddio_pex",
2492 "hvdd_sata", "dvdd_sata_pll", "hvddio_sata", "dvddio_sata"
2495 static const struct tegra_padctl_soc_data tegra210_padctl_data = {
2496 .regulator_name = tegra210_padctl_regulator_name,
2498 ARRAY_SIZE(tegra210_padctl_regulator_name),
2501 static struct of_device_id tegra_padctl_of_match[] = {
2503 .compatible = "nvidia,tegra210-padctl",
2504 .data = &tegra210_padctl_data,
2510 tegra_padctl_probe(struct platform_device *pdev)
2514 bool enable_sata_port;
2516 const struct of_device_id *match;
2517 struct clk *plle_clk;
2518 struct clk *plle_hw_clk;
2520 if (of_property_read_u32(pdev->dev.of_node, "nvidia,lane_owner",
2521 (u32 *) &lane_owner))
2522 lane_owner = 0xffff;
2523 if (of_property_read_u32(pdev->dev.of_node, "nvidia,lane-map",
2526 enable_sata_port = of_property_read_bool(pdev->dev.of_node,
2527 "nvidia,enable-sata-port");
2529 if ((lane_owner == 0xffff) && (lane_map == 0) && !enable_sata_port)
2532 padctl = devm_kzalloc(&pdev->dev, sizeof(*padctl),
2534 if (IS_ERR(padctl)) {
2535 dev_err(&pdev->dev, "fail to alloc padctl struct\n");
2539 padctl->pdev = pdev;
2540 platform_set_drvdata(pdev, padctl);
2542 padctl->lane_owner = lane_owner;
2543 padctl->lane_map = lane_map;
2544 padctl->enable_sata_port = enable_sata_port;
2546 match = of_match_device(tegra_padctl_of_match, &pdev->dev);
2548 dev_err(&pdev->dev, "no device match\n");
2551 padctl->soc_data = match->data;
2553 /* get regulators */
2554 err = tegra_padctl_get_regulator(pdev);
2559 plle_clk = devm_clk_get(&pdev->dev, "pll_e");
2560 if (IS_ERR(plle_clk)) {
2561 dev_err(&pdev->dev, "pll_e not found\n");
2565 padctl->plle_clk = plle_clk;
2568 plle_hw_clk = clk_get_sys(NULL, "pll_e_hw");
2569 if (IS_ERR(plle_hw_clk)) {
2570 dev_err(&pdev->dev, "pll_e_hw not found\n");
2574 padctl->plle_hw_clk = plle_hw_clk;
2576 err = tegra_padctl_enable_regulator(pdev);
2580 err = tegra_padctl_uphy_init(pdev);
2587 tegra_padctl_remove(struct platform_device *pdev)
2589 tegra_padctl_uphy_deinit(pdev);
2590 tegra_padctl_disable_regulator(pdev);
2595 tegra_padctl_suspend_noirq(struct device *dev)
2597 struct platform_device *pdev = to_platform_device(dev);
2599 tegra_padctl_uphy_deinit(pdev);
2605 tegra_padctl_resume_noirq(struct device *dev)
2607 struct platform_device *pdev = to_platform_device(dev);
2609 return tegra_padctl_uphy_init(pdev);
2612 static const struct dev_pm_ops tegra_padctl_pm_ops = {
2613 .suspend_noirq = tegra_padctl_suspend_noirq,
2614 .resume_noirq = tegra_padctl_resume_noirq,
2617 static struct platform_driver tegra_padctl_driver = {
2618 .probe = tegra_padctl_probe,
2619 .remove = tegra_padctl_remove,
2621 .name = "tegra-padctl",
2622 .of_match_table = tegra_padctl_of_match,
2623 .pm = &tegra_padctl_pm_ops,
2627 static int __init tegra_xusb_padctl_init(void)
2629 platform_driver_register(&tegra_padctl_driver);
2633 fs_initcall(tegra_xusb_padctl_init);
2635 #define reg_dump(_name, _reg) \
2636 pr_debug("%s @%x = 0x%x\n", #_name, (_reg), \
2637 ioread32(IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE) + (_reg)))
2638 static bool clamp_en_early_enabled[4] = {false};
2639 void t210_clamp_en_early(unsigned port, bool on)
2643 if ((on && clamp_en_early_enabled[port]) ||
2644 (!on && !clamp_en_early_enabled[port]))
2647 clamp_en_early_enabled[port] = on;
2648 pr_debug("%s %s SS port %d\n", __func__,
2649 on ? "enable" : "disable", port);
2651 mask = SSPX_ELPG_CLAMP_EN_EARLY(port);
2653 tegra_usb_pad_reg_update(XUSB_PADCTL_ELPG_PROGRAM_1, 0, mask);
2656 tegra_usb_pad_reg_update(XUSB_PADCTL_ELPG_PROGRAM_1, mask, 0);
2658 reg_dump("elpg_program1", XUSB_PADCTL_ELPG_PROGRAM_1);
2660 EXPORT_SYMBOL_GPL(t210_clamp_en_early);
2662 static bool receiver_detector_disabled[4] = {false};
2663 void t210_receiver_detector(unsigned port, bool on)
2666 enum padctl_lane lane_enum;
2667 u32 misc_pad_ctl1, misc_pad_ctl2;
2673 lane = (padctl->lane_owner >> (port * 4)) & 0xf;
2674 lane_enum = usb3_laneowner_to_lane_enum(lane);
2675 if ((lane == USB3_LANE_NOT_ENABLED) || (lane_enum < 0))
2678 if ((on && !receiver_detector_disabled[port]) ||
2679 (!on && receiver_detector_disabled[port]))
2682 receiver_detector_disabled[port] = !on;
2684 if (lane_enum == SATA_S0) {
2685 misc_pad_ctl1 = XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL1;
2686 misc_pad_ctl2 = XUSB_PADCTL_UPHY_MISC_PAD_S0_CTL2;
2688 misc_pad_ctl1 = XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL1(lane_enum);
2689 misc_pad_ctl2 = XUSB_PADCTL_UPHY_MISC_PAD_PX_CTL2(lane_enum);
2692 pr_debug("%s %s SS port %d lane %d CTL1 addr 0x%x CTL2 addr 0x%x\n",
2693 __func__, on ? "enable" : "disable", port, lane_enum,
2694 misc_pad_ctl1, misc_pad_ctl2);
2697 mask = XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ |
2698 XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ;
2699 tegra_usb_pad_reg_update(misc_pad_ctl2, mask, 0);
2701 mask = XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ_OVRD |
2702 XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ_OVRD;
2703 tegra_usb_pad_reg_update(misc_pad_ctl2, 0, mask);
2705 mask = (XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_TX_RDET_CLK_EN |
2706 XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_TX_RDET_BYP |
2707 XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_TX_RDET_EN |
2708 XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_TX_TERM_EN);
2709 tegra_usb_pad_reg_update(misc_pad_ctl1, mask, 0);
2711 mask = XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_TX_MODE_OVRD;
2712 tegra_usb_pad_reg_update(misc_pad_ctl1, 0, mask);
2714 mask = XUSB_PADCTL_UPHY_MISC_PAD_CTL1_AUX_TX_MODE_OVRD;
2715 tegra_usb_pad_reg_update(misc_pad_ctl1, mask, 0);
2717 mask = XUSB_PADCTL_UPHY_MISC_PAD_CTL2_TX_IDDQ_OVRD |
2718 XUSB_PADCTL_UPHY_MISC_PAD_CTL2_RX_IDDQ_OVRD;
2719 tegra_usb_pad_reg_update(misc_pad_ctl2, mask, 0);
2722 reg_dump("ctrl1", misc_pad_ctl1);
2723 reg_dump("ctrl2", misc_pad_ctl2);
2724 reg_dump("elpg_program1", XUSB_PADCTL_ELPG_PROGRAM_1);
2726 EXPORT_SYMBOL_GPL(t210_receiver_detector);
2730 /* save restore below pad control register when cross LP0 */
2731 struct xusb_padctl_restore_context {
2732 u32 padctl_usb3_pad_mux;
2734 static struct xusb_padctl_restore_context context;
2736 static int tegra_xusb_padctl_suspend(void)
2738 context.padctl_usb3_pad_mux = tegra_usb_pad_reg_read(
2739 XUSB_PADCTL_USB3_PAD_MUX_0);
2743 static void tegra_xusb_padctl_resume(void)
2745 tegra_usb_pad_reg_write(XUSB_PADCTL_USB3_PAD_MUX_0,
2746 context.padctl_usb3_pad_mux);
2749 static struct syscore_ops tegra_padctl_syscore_ops = {
2750 .suspend = tegra_xusb_padctl_suspend,
2751 .resume = tegra_xusb_padctl_resume,
2752 .save = tegra_xusb_padctl_suspend,
2753 .restore = tegra_xusb_padctl_resume,
2756 static int __init tegra_xusb_padctl_init(void)
2758 register_syscore_ops(&tegra_padctl_syscore_ops);
2761 late_initcall(tegra_xusb_padctl_init);