From e486b3fcd42f20a2b5d9fc10117bae44daff9f1a Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Fri, 22 May 2015 23:27:42 +0000 Subject: [PATCH] [arm64] USB: Add support for XHCI on APM Mustang (Closes: #785707) svn path=/dists/sid/linux/; revision=22670 --- debian/changelog | 4 + debian/config/arm64/config | 3 + ...acpi-identification-to-xhci-platform.patch | 80 +++++++++++++++++++ ...form-driver-use-64-bit-or-32-bit-dma.patch | 48 +++++++++++ debian/patches/series | 3 + 5 files changed, 138 insertions(+) create mode 100644 debian/patches/features/arm64/usb-add-support-for-acpi-identification-to-xhci-platform.patch create mode 100644 debian/patches/features/arm64/usb-make-xhci-platform-driver-use-64-bit-or-32-bit-dma.patch diff --git a/debian/changelog b/debian/changelog index d5fbfcafe..a825f9043 100644 --- a/debian/changelog +++ b/debian/changelog @@ -139,6 +139,10 @@ linux (4.0.4-1) UNRELEASED; urgency=medium * linux-image: Add versioned Breaks on udev (<< 208-8~) due to #752742 and #756312 * [i386] pnp: Disable PNPBIOS_PROC_FS + * [arm64] USB: Add support for XHCI on APM Mustang (Closes: #785707) + - Change USB_XHCI_HCD to built-in and enable USB_XHCI_PLATFORM as built-in + - Make xhci platform driver use 64 bit or 32 bit DMA + - Add support for ACPI identification to xhci-platform -- Ben Hutchings Mon, 18 May 2015 00:00:06 +0100 diff --git a/debian/config/arm64/config b/debian/config/arm64/config index b1fed84d9..81ed34c45 100644 --- a/debian/config/arm64/config +++ b/debian/config/arm64/config @@ -125,6 +125,9 @@ CONFIG_USB_EHCI_HCD=m CONFIG_USB_EHCI_HCD_PLATFORM=m CONFIG_USB_OHCI_HCD=m CONFIG_USB_OHCI_HCD_PLATFORM=m +#. xhci-platform apparently does not build as module, so xhci_hcd can't be either +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_HCD_PLATFORM=y ## ## file: drivers/virtio/Kconfig diff --git a/debian/patches/features/arm64/usb-add-support-for-acpi-identification-to-xhci-platform.patch b/debian/patches/features/arm64/usb-add-support-for-acpi-identification-to-xhci-platform.patch new file mode 100644 index 000000000..d4140e580 --- /dev/null +++ b/debian/patches/features/arm64/usb-add-support-for-acpi-identification-to-xhci-platform.patch @@ -0,0 +1,80 @@ +From: Mark Langsdorf +Subject: [PATCH v3 2/2] [usb] dd support for ACPI identification to xhci-platform +Date: Tue, 25 Nov 2014 15:19:26 -0600 +Origin: http://permalink.gmane.org/gmane.linux.usb.general/118784 +Bug-Debian: https://bugs.debian.org/785707 + +Provide the methods to let ACPI identify the need to use +xhci-platform. Change the Kconfig files so the +xhci-plat.o file is selectable during kernel config. + +This has been tested on an ARM64 machine with platform XHCI, an +x86_64 machine with XHCI, and an x86_64 machine without XHCI. +There were no regressions or error messages on the machines +without platform XHCI. + +Signed-off-by: Mark Langsdorf +--- +Changes from v2 + Replaced tristate with a boolean as the driver doesn't + compile as a module + Correct --help-- to ---help--- +Changes from v1 + Renamed from "add support for APM X-Gene to xhci-platform" + Removed changes to arm64/Kconfig + Made CONFIG_USB_XHCI_PLATFORM a user selectable config option + + drivers/usb/host/Kconfig | 7 ++++++- + drivers/usb/host/xhci-plat.c | 11 +++++++++++ + 2 files changed, 17 insertions(+), 1 deletion(-) + +--- a/drivers/usb/host/Kconfig ++++ b/drivers/usb/host/Kconfig +@@ -32,7 +32,12 @@ config USB_XHCI_PCI + default y + + config USB_XHCI_PLATFORM +- tristate ++ boolean "xHCI platform driver support" ++ ---help--- ++ Say 'Y' to enable the support for the xHCI host controller ++ as a platform device. Many ARM SoCs provide USB this way. ++ ++ If unsure, say 'Y'. + + config USB_XHCI_MVEBU + tristate "xHCI support for Marvell Armada 375/38x" +--- a/drivers/usb/host/xhci-plat.c ++++ b/drivers/usb/host/xhci-plat.c +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + + #include "xhci.h" + #include "xhci-mvebu.h" +@@ -241,6 +242,15 @@ static const struct of_device_id usb_xhc + MODULE_DEVICE_TABLE(of, usb_xhci_of_match); + #endif + ++#ifdef CONFIG_ACPI ++static const struct acpi_device_id usb_xhci_acpi_match[] = { ++ { "PNP0D10", }, ++ { "PNP0D15", }, ++ { } ++}; ++MODULE_DEVICE_TABLE(acpi, usb_xhci_acpi_match); ++#endif ++ + static struct platform_driver usb_xhci_driver = { + .probe = xhci_plat_probe, + .remove = xhci_plat_remove, +@@ -248,6 +258,7 @@ static struct platform_driver usb_xhci_d + .name = "xhci-hcd", + .pm = DEV_PM_OPS, + .of_match_table = of_match_ptr(usb_xhci_of_match), ++ .acpi_match_table = ACPI_PTR(usb_xhci_acpi_match), + }, + }; + MODULE_ALIAS("platform:xhci-hcd"); diff --git a/debian/patches/features/arm64/usb-make-xhci-platform-driver-use-64-bit-or-32-bit-dma.patch b/debian/patches/features/arm64/usb-make-xhci-platform-driver-use-64-bit-or-32-bit-dma.patch new file mode 100644 index 000000000..88d386031 --- /dev/null +++ b/debian/patches/features/arm64/usb-make-xhci-platform-driver-use-64-bit-or-32-bit-dma.patch @@ -0,0 +1,48 @@ +From: Mark Langsdorf +Subject: [PATCH v3 1/2] make xhci platform driver use 64 bit or 32 bit DMA +Date: Tue, 25 Nov 2014 15:19:25 -0600 +Origin: http://permalink.gmane.org/gmane.linux.usb.general/118786 +Bug-Debian: https://bugs.debian.org/785707 + +The xhci platform driver needs to work on systems that either only +support 64-bit DMA or only support 32-bit DMA. Attempt to set a +coherent dma mask for 64-bit DMA, and attempt again with 32-bit +DMA if that fails. + +Signed-off-by: Mark Langsdorf +Tested-by: Mark Salter +--- +Changes from v2: + None +Changes from v1: + Consolidated to use dma_set_mask_and_coherent + Got rid of the check against sizeof(dma_addr_t) + + drivers/usb/host/xhci-plat.c | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +--- a/drivers/usb/host/xhci-plat.c ++++ b/drivers/usb/host/xhci-plat.c +@@ -83,14 +83,14 @@ static int xhci_plat_probe(struct platfo + if (irq < 0) + return -ENODEV; + +- /* Initialize dma_mask and coherent_dma_mask to 32-bits */ +- ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); +- if (ret) +- return ret; +- if (!pdev->dev.dma_mask) +- pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask; +- else +- dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); ++ /* Try setting the coherent_dma_mask to 64 bits, then try 32 bits */ ++ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); ++ if (ret) { ++ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); ++ if (ret) ++ return ret; ++ } ++ + + hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev)); + if (!hcd) diff --git a/debian/patches/series b/debian/patches/series index fdf74f601..ebe29b46a 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -68,3 +68,6 @@ bugfix/all/mnt-fail-collect_mounts-when-applied-to-unmounted-mo.patch bugfix/all/fs_pin-allow-for-the-possibility-that-m_list-or-s_li.patch bugfix/all/rtc-hctosys-do-not-treat-lack-of-rtc-device-as-error.patch bugfix/all/rtc-hctosys-use-function-name-in-the-error-log.patch +features/arm64/usb-make-xhci-platform-driver-use-64-bit-or-32-bit-dma.patch +features/arm64/usb-add-support-for-acpi-identification-to-xhci-platform.patch +usb-add-support-for-acpi-identification-to-xhci-platform.patch