usb: xhci: tegra: fix DFE training results
Ajay Gupta [Thu, 13 Jun 2013 16:51:55 +0000 (09:51 -0700)]
Bug 1281372

Change-Id: Ia40ef4092d817bd56055cdfb971d279a10758853
Signed-off-by: Ajay Gupta <ajayg@nvidia.com>
Reviewed-on: http://git-master/r/242546
Reviewed-on: http://git-master/r/245649
Reviewed-by: Chao Xu <cxu@nvidia.com>

arch/arm/mach-tegra/xusb.c
drivers/usb/host/xhci-tegra.c

index 31fef1e..d3f8d2e 100644 (file)
@@ -52,8 +52,8 @@ void tegra_xusb_init(struct tegra_xusb_board_data *bdata)
        tegra_xusb_plat_data.pmc_portmap = (TEGRA_XUSB_UTMIP_PMC_PORT0 << 0) |
                        (TEGRA_XUSB_UTMIP_PMC_PORT2 << 4);
        tegra_xusb_plat_data.quirks |= TEGRA_XUSB_USE_HS_SRC_CLOCK2;
-       tegra_xusb_plat_data.rx_wander = (0xf << 4);
-       tegra_xusb_plat_data.rx_eq = (0x3070 << 8);
+       tegra_xusb_plat_data.rx_wander = (0x3 << 4);
+       tegra_xusb_plat_data.rx_eq = (0x3928 << 8);
        tegra_xusb_plat_data.cdr_cntl = (0x26 << 24);
        tegra_xusb_plat_data.dfe_cntl = 0x002008EE;
        tegra_xusb_plat_data.hs_slew = (0xE << 6);
@@ -64,8 +64,8 @@ void tegra_xusb_init(struct tegra_xusb_board_data *bdata)
        tegra_xusb_plat_data.pmc_portmap = (TEGRA_XUSB_UTMIP_PMC_PORT0 << 0) |
                        (TEGRA_XUSB_UTMIP_PMC_PORT1 << 4) |
                        (TEGRA_XUSB_UTMIP_PMC_PORT2 << 8);
-       tegra_xusb_plat_data.rx_wander = (0xf << 4);
-       tegra_xusb_plat_data.rx_eq = (0x3070 << 8);
+       tegra_xusb_plat_data.rx_wander = (0x3 << 4);
+       tegra_xusb_plat_data.rx_eq = (0x3928 << 8);
        tegra_xusb_plat_data.cdr_cntl = (0x26 << 24);
        tegra_xusb_plat_data.dfe_cntl = 0x002008EE;
        tegra_xusb_plat_data.hs_slew = (0xE << 6);
index 1c1d97b..8c02265 100644 (file)
@@ -1622,13 +1622,15 @@ static void tegra_xhci_program_ss_pad(struct tegra_xhci_hcd *tegra,
        u8 port)
 {
        struct tegra_xusb_padctl_regs *padregs = tegra->padregs;
-       u32 ctl2_offset, ctl4_offset;
+       u32 ctl2_offset, ctl4_offset, ctl5_offset;
        u32 reg;
 
        ctl2_offset = port ? padregs->iophy_usb3_pad1_ctl2_0 :
                        padregs->iophy_usb3_pad0_ctl2_0;
        ctl4_offset = port ? padregs->iophy_usb3_pad1_ctl4_0 :
                        padregs->iophy_usb3_pad0_ctl4_0;
+       ctl5_offset = port ? padregs->iophy_misc_pad_p1_ctl5_0 :
+                       padregs->iophy_misc_pad_p0_ctl5_0;
 
        reg = readl(tegra->padctl_base + ctl2_offset);
        reg &= ~(IOPHY_USB3_RXWANDER | IOPHY_USB3_RXEQ |
@@ -1641,6 +1643,10 @@ static void tegra_xhci_program_ss_pad(struct tegra_xhci_hcd *tegra,
        reg = tegra->pdata->dfe_cntl;
        writel(reg, tegra->padctl_base + ctl4_offset);
 
+       reg = readl(tegra->padctl_base + ctl5_offset);
+       reg |= RX_QEYE_EN;
+       writel(reg, tegra->padctl_base + ctl5_offset);
+
        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 &