summaryrefslogtreecommitdiff
path: root/drivers/usb/host/xhci-tegra.c
diff options
context:
space:
mode:
authorjoyw <joyw@nvidia.com>2013-09-12 14:47:54 +0800
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-27 12:54:02 -0700
commite6352c9818d99af96158059e8ffe87baa2e612fe (patch)
tree5fe8cce4582c6539a5edd39e81e16173a05121d0 /drivers/usb/host/xhci-tegra.c
parent41a752465c4dc5ee5b0efc29defeb2d9415f434a (diff)
xhci: tegra: Add support for xusb use sata lane
For some boards, Laguna, use sata lane for SS port 1. Add support to set relevant register,XUSB_PADCTL_IOPHY_MISC_PAD_S0_CTL_*_0, in pad ctontrol. Bug 1366525 Change-Id: I409843c9a8d67ab5438357d550f7ddda0fda4495 Signed-off-by: joyw <joyw@nvidia.com> Reviewed-on: http://git-master/r/273556 Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com> Tested-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers/usb/host/xhci-tegra.c')
-rw-r--r--drivers/usb/host/xhci-tegra.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
index d9a4f093d3c9..c0a2ace5644a 100644
--- a/drivers/usb/host/xhci-tegra.c
+++ b/drivers/usb/host/xhci-tegra.c
@@ -2116,6 +2116,13 @@ static void tegra_xhci_program_utmip_pad(struct tegra_xhci_hcd *tegra,
tegra_xhci_release_otg_port(true);
}
+static inline bool xusb_use_sata_lane(struct tegra_xhci_hcd *tegra)
+{
+ return ((XUSB_DEVICE_ID_T114 == tegra->device_id) ? false
+ : ((tegra->bdata->portmap & TEGRA_XUSB_SS_P1)
+ && (tegra->bdata->lane_owner & BIT(0))));
+}
+
static void tegra_xhci_program_ss_pad(struct tegra_xhci_hcd *tegra,
u8 port)
{
@@ -2150,6 +2157,17 @@ static void tegra_xhci_program_ss_pad(struct tegra_xhci_hcd *tegra,
reg |= SPARE_IN(tegra->pdata->spare_in);
writel(reg, tegra->padctl_base + MISC_PAD_CTL_2_0(port));
+ if (xusb_use_sata_lane(tegra)) {
+ reg = readl(tegra->padctl_base + MISC_PAD_S0_CTL_5_0);
+ reg |= RX_QEYE_EN;
+ writel(reg, tegra->padctl_base + MISC_PAD_S0_CTL_5_0);
+
+ reg = readl(tegra->padctl_base + MISC_PAD_S0_CTL_2_0);
+ reg &= ~SPARE_IN(~0);
+ reg |= SPARE_IN(tegra->pdata->spare_in);
+ writel(reg, tegra->padctl_base + MISC_PAD_S0_CTL_2_0);
+ }
+
reg = readl(tegra->padctl_base + padregs->ss_port_map_0);
reg &= ~(port ? SS_PORT_MAP_P1 : SS_PORT_MAP_P0);
reg |= (tegra->bdata->ss_portmap &