summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVinayak Pane <vpane@nvidia.com>2011-12-10 18:28:34 -0800
committerSimone Willett <swillett@nvidia.com>2012-02-15 14:13:37 -0800
commitf58bbb57b36fc02170d6905d07e573b414ac3021 (patch)
treee847dec3e3cc8dcbebc39f9a712a6fdb47d1c02b
parenta81486774aadad68be9d58e5ac0caac55e3f35fd (diff)
arm: tegra: usb: Disable WAIT_FOR_VALID for hsic
The ehci generic port reset fails sometimes for HSIC modem to connect in stress tests. HSIC bus reset apparently needs a SW WAR. Using the feature of HS_READY_WAIT_FOR_VALID to disable HSIC transmit config signal for HS ready wait for valid. This is AP30 specific workaround. Bug 898008 Bug 932606 Change-Id: I3d1aafa1bbd046769b0eb62970aa990ae7bad617 Signed-off-by: Vinayak Pane <vpane@nvidia.com> Reviewed-on: http://git-master/r/83279 Reviewed-by: Rajkumar Jayaraman <rjayaraman@nvidia.com> Reviewed-by: Steve Lin <stlin@nvidia.com>
-rw-r--r--arch/arm/mach-tegra/usb_phy.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/arch/arm/mach-tegra/usb_phy.c b/arch/arm/mach-tegra/usb_phy.c
index 69f1e0563926..7bb5e753b235 100644
--- a/arch/arm/mach-tegra/usb_phy.c
+++ b/arch/arm/mach-tegra/usb_phy.c
@@ -165,6 +165,9 @@
#define UHSIC_HSRX_CFG1 0x80c
#define UHSIC_HS_SYNC_START_DLY(x) (((x) & 0x1f) << 1)
+#define UHSIC_TX_CFG0 0x810
+#define UHSIC_HS_POSTAMBLE_OUTPUT_ENABLE (1 << 6)
+
#define UHSIC_MISC_CFG0 0x814
#define UHSIC_SUSPEND_EXIT_ON_EDGE (1 << 7)
#define UHSIC_DETECT_SHORT_CONNECT (1 << 8)
@@ -345,6 +348,9 @@
#define UHSIC_HSRX_CFG1 0xc0c
#define UHSIC_HS_SYNC_START_DLY(x) (((x) & 0x1f) << 1)
+#define UHSIC_TX_CFG0 0xc10
+#define UHSIC_HS_READY_WAIT_FOR_VALID (1 << 9)
+
#define UHSIC_MISC_CFG0 0xc14
#define UHSIC_SUSPEND_EXIT_ON_EDGE (1 << 7)
#define UHSIC_DETECT_SHORT_CONNECT (1 << 8)
@@ -564,9 +570,6 @@ static u32 utmip_rctrl_val, utmip_tctrl_val;
#define UHSIC_PLL_CFG0 0x800
-#define UHSIC_TX_CFG0 0x810
-#define UHSIC_HS_POSTAMBLE_OUTPUT_ENABLE (1 << 6)
-
#define UHSIC_CMD_CFG0 0x824
#define UHSIC_PRETEND_CONNECT_DETECT (1 << 5)
@@ -2200,6 +2203,13 @@ static int uhsic_phy_power_on(struct tegra_usb_phy *phy, bool is_dpd)
val |= UHSIC_HS_SYNC_START_DLY(uhsic_config->sync_start_delay);
writel(val, base + UHSIC_HSRX_CFG1);
+#ifdef CONFIG_ARCH_TEGRA_3x_SOC
+ /* WAR HSIC TX */
+ val = readl(base + UHSIC_TX_CFG0);
+ val &= ~UHSIC_HS_READY_WAIT_FOR_VALID;
+ writel(val, base + UHSIC_TX_CFG0);
+#endif
+
val = readl(base + UHSIC_MISC_CFG0);
val |= UHSIC_SUSPEND_EXIT_ON_EDGE;
#ifdef CONFIG_ARCH_TEGRA_3x_SOC