diff options
author | Imre Kaloz <kaloz@openwrt.org> | 2015-03-26 14:32:45 +0000 |
---|---|---|
committer | Imre Kaloz <kaloz@openwrt.org> | 2015-03-26 14:32:45 +0000 |
commit | f6eff33b8dd6755c503f7745ef0b10f6d07f4999 (patch) | |
tree | 54c4da07d01df84a4827c1d7a7d579293d12c409 | |
parent | 4bac1253c1da052fb9716e268b5fa2fc31952183 (diff) | |
download | upstream-f6eff33b8dd6755c503f7745ef0b10f6d07f4999.tar.gz upstream-f6eff33b8dd6755c503f7745ef0b10f6d07f4999.tar.bz2 upstream-f6eff33b8dd6755c503f7745ef0b10f6d07f4999.zip |
mvebu: fixup usb3 support on the a38x
Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
SVN-Revision: 45026
-rw-r--r-- | package/kernel/linux/modules/usb.mk | 1 | ||||
-rw-r--r-- | target/linux/mvebu/patches-3.18/210-xhci_move_marvell_quirks.patch | 61 |
2 files changed, 62 insertions, 0 deletions
diff --git a/package/kernel/linux/modules/usb.mk b/package/kernel/linux/modules/usb.mk index be1553a508..7a63829a75 100644 --- a/package/kernel/linux/modules/usb.mk +++ b/package/kernel/linux/modules/usb.mk @@ -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) diff --git a/target/linux/mvebu/patches-3.18/210-xhci_move_marvell_quirks.patch b/target/linux/mvebu/patches-3.18/210-xhci_move_marvell_quirks.patch new file mode 100644 index 0000000000..2296900e31 --- /dev/null +++ b/target/linux/mvebu/patches-3.18/210-xhci_move_marvell_quirks.patch @@ -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; |