The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / board / freescale / p2020ds / linux-fix-c6187597-breakage.patch
diff --git a/cirros-testvm/src-cirros/buildroot-2015.05/board/freescale/p2020ds/linux-fix-c6187597-breakage.patch b/cirros-testvm/src-cirros/buildroot-2015.05/board/freescale/p2020ds/linux-fix-c6187597-breakage.patch
new file mode 100644 (file)
index 0000000..598f92d
--- /dev/null
@@ -0,0 +1,51 @@
+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