52 lines
1.7 KiB
Diff
52 lines
1.7 KiB
Diff
|
From: Nikita Yushchenko <nyushchenko@dev.rtsoft.ru>
|
||
|
Subject: [PATCH] usb: pci-quirks: do not access OHCI_FMINTERVAL register on ULI hw
|
||
|
|
||
|
This access causes hang on Freescale P2020DS board (that has OHCI
|
||
|
provided by ULI 1533 chip).
|
||
|
|
||
|
Since preserving OHCI_FMINTERVAL was originally done only for NVIDIA
|
||
|
hardware and only later (in c6187597) was turned unconditional, and
|
||
|
c6187597 commit message again mentions only NVIDIA, I think it should be
|
||
|
safe to disable preserving OHCI_FMINTERVAL if device vendor is ULI.
|
||
|
|
||
|
Signed-off-by: Nikita Yushchenko <nyushchenko@dev.rtsoft.ru>
|
||
|
---
|
||
|
drivers/usb/host/pci-quirks.c | 8 +++++---
|
||
|
1 file changed, 5 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
|
||
|
index 00661d3..5acbd5b 100644
|
||
|
--- a/drivers/usb/host/pci-quirks.c
|
||
|
+++ b/drivers/usb/host/pci-quirks.c
|
||
|
@@ -571,7 +571,7 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
|
||
|
{
|
||
|
void __iomem *base;
|
||
|
u32 control;
|
||
|
- u32 fminterval;
|
||
|
+ u32 uninitialized_var(fminterval);
|
||
|
int cnt;
|
||
|
|
||
|
if (!mmio_resource_enabled(pdev, 0))
|
||
|
@@ -619,7 +619,8 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
|
||
|
}
|
||
|
|
||
|
/* software reset of the controller, preserving HcFmInterval */
|
||
|
- fminterval = readl(base + OHCI_FMINTERVAL);
|
||
|
+ if (pdev->vendor != PCI_VENDOR_ID_AL)
|
||
|
+ fminterval = readl(base + OHCI_FMINTERVAL);
|
||
|
writel(OHCI_HCR, base + OHCI_CMDSTATUS);
|
||
|
|
||
|
/* reset requires max 10 us delay */
|
||
|
@@ -628,7 +629,8 @@ static void quirk_usb_handoff_ohci(struct pci_dev *pdev)
|
||
|
break;
|
||
|
udelay(1);
|
||
|
}
|
||
|
- writel(fminterval, base + OHCI_FMINTERVAL);
|
||
|
+ if (pdev->vendor != PCI_VENDOR_ID_AL)
|
||
|
+ writel(fminterval, base + OHCI_FMINTERVAL);
|
||
|
|
||
|
/* Now the controller is safely in SUSPEND and nothing can wake it up */
|
||
|
iounmap(base);
|
||
|
--
|
||
|
1.7.10.4
|