mvebu: fixup usb3 support on the a38x
Signed-off-by: Imre Kaloz <kaloz@openwrt.org> SVN-Revision: 45026
This commit is contained in:
parent
4bac1253c1
commit
f6eff33b8d
|
@ -1480,6 +1480,7 @@ define KernelPackage/usb3
|
|||
CONFIG_USB_XHCI_HCD \
|
||||
CONFIG_USB_XHCI_PCI \
|
||||
CONFIG_USB_XHCI_PLATFORM \
|
||||
CONFIG_USB_XHCI_MVEBU=y \
|
||||
CONFIG_USB_XHCI_HCD_DEBUGGING=n
|
||||
FILES:= \
|
||||
$(XHCI_FILES)
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
From 1e7e4fb66489cc84366656ca5318f1cb61afd4ba Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
Date: Tue, 24 Feb 2015 18:27:00 +0200
|
||||
Subject: usb: XHCI: platform: Move the Marvell quirks after the enabling the
|
||||
clocks
|
||||
|
||||
The commit 973747928514 ("usb: host: xhci-plat: add support for the Armada
|
||||
375/38x XHCI controllers") extended the xhci-plat driver to support the Armada
|
||||
375/38x SoCs, mostly by adding a quirk configuring the MBUS window.
|
||||
|
||||
However, that quirk was run before the clock the controllers needs has been
|
||||
enabled. This usually worked because the clock was first enabled by the
|
||||
bootloader, and left as such until the driver is probe, where it tries to
|
||||
access the MBUS configuration registers before enabling the clock.
|
||||
|
||||
Things get messy when EPROBE_DEFER is involved during the probe, since as part
|
||||
of its error path, the driver will rightfully disable the clock. When the
|
||||
driver will be reprobed, it will retry to access the MBUS registers, but this
|
||||
time with the clock disabled, which hangs forever.
|
||||
|
||||
Fix this by running the quirks after the clock has been enabled by the driver.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
Cc: <stable@vger.kernel.org> # v3.16+
|
||||
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
|
||||
--- a/drivers/usb/host/xhci-plat.c
|
||||
+++ b/drivers/usb/host/xhci-plat.c
|
||||
@@ -87,15 +87,6 @@ static int xhci_plat_probe(struct platfo
|
||||
if (!res)
|
||||
return -ENODEV;
|
||||
|
||||
- if (of_device_is_compatible(pdev->dev.of_node,
|
||||
- "marvell,armada-375-xhci") ||
|
||||
- of_device_is_compatible(pdev->dev.of_node,
|
||||
- "marvell,armada-380-xhci")) {
|
||||
- ret = xhci_mvebu_mbus_init_quirk(pdev);
|
||||
- if (ret)
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
/* Initialize dma_mask and coherent_dma_mask to 32-bits */
|
||||
ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
|
||||
if (ret)
|
||||
@@ -129,6 +120,15 @@ static int xhci_plat_probe(struct platfo
|
||||
goto put_hcd;
|
||||
}
|
||||
|
||||
+ if (of_device_is_compatible(pdev->dev.of_node,
|
||||
+ "marvell,armada-375-xhci") ||
|
||||
+ of_device_is_compatible(pdev->dev.of_node,
|
||||
+ "marvell,armada-380-xhci")) {
|
||||
+ ret = xhci_mvebu_mbus_init_quirk(pdev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
|
||||
if (ret)
|
||||
goto disable_clk;
|
Loading…
Reference in New Issue