diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/host/ehci-tegra.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c index 168015da8cb1..8dd873bbe59b 100644 --- a/drivers/usb/host/ehci-tegra.c +++ b/drivers/usb/host/ehci-tegra.c @@ -52,6 +52,10 @@ #define HOSTPC1_DEVLC_STS (1 << 28) #define HOSTPC1_DEVLC_PTS(x) (((x) & 0x7) << 29) +#define USB1_PREFETCH_ID 6 +#define USB2_PREFETCH_ID 18 +#define USB3_PREFETCH_ID 17 + struct tegra_ehci_hcd { struct ehci_hcd *ehci; struct tegra_usb_phy *phy; @@ -167,6 +171,14 @@ static irqreturn_t tegra_ehci_irq (struct usb_hcd *hcd) irqreturn_t irq_status; bool pmc_remote_wakeup = false; + /* Fence read for coherency of AHB master intiated writes */ + if (tegra->phy->instance == 0) + readb(IO_ADDRESS(IO_PPCS_PHYS + USB1_PREFETCH_ID)); + else if (tegra->phy->instance == 1) + readb(IO_ADDRESS(IO_PPCS_PHYS + USB2_PREFETCH_ID)); + else if (tegra->phy->instance == 2) + readb(IO_ADDRESS(IO_PPCS_PHYS + USB3_PREFETCH_ID)); + if ((tegra->phy->usb_phy_type == TEGRA_USB_PHY_TYPE_UTMIP) && (tegra->ehci->has_hostpc)) { /* check if there is any remote wake event */ |