123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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
|