--- /dev/null
+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