diff mbox

[vivid] usb: xhci: Makefile: move xhci-pci and xhci-plat-hcd after xhci-hcd

Message ID 1467252398-14973-1-git-send-email-hui.wang@canonical.com
State New
Headers show

Commit Message

Hui Wang June 30, 2016, 2:06 a.m. UTC
From: "Lu, Baolu" <baolu.lu@linux.intel.com>

BugLink: http://bugs.launchpad.net/bugs/1597564

Module xhci-pci and xhci-plat-hcd depend on xhci-hcd. Module xhci-hcd
should be put at a place before xhci-pci and xhci-plat-hcd. Otherwise,
xhci_hcd_init() might be executed after other functions in xhci-hcd if
they are all selected to be built in.

Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 8451a34ff6c7c756e9e0f0094a3ba856c9734e5d)
Signed-off-by: Hui Wang <hui.wang@canonical.com>
---
This patch is only needed by vivid kernel, the xenial kernel already
had this patch.

With this patch, the ECHI host controller will be registerd to
USB host bus1 and XHCI host controllers will be registered to
USB host bus2 and bus3, when reboot or shutdown, the system will
call XHCI_shutdown() first, in this situation the system will not
hang.

Without this patch, the XHCI will be registered to USB host bus1 and
bus2, the EHCI will be registered to USB host bus3, when reboot or
shutdown, the system will call EHCI_shutdown() first, the system will
hang inside the EHCI_shutdown().

According to the explanation of Intel side, this problem has something
to do with port switching between EHCI and xHCI controller, before EHCI
and XHCI drivers are loaded, the USB pci code will switch over ports
from EHCI to XHCI if possible at boot, so the port belongs to XHCI now,
if EHCI_shutdown() is called first, it will try to turn off a port that
does not belong to it, then the system hang. If XHCI_shutdown() is called
first, it will give back the port to EHCI, then EHCI_shutdown() will not
hang.

 drivers/usb/host/Makefile | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

Tim Gardner July 5, 2016, 1:46 p.m. UTC | #1

Kamal Mostafa July 5, 2016, 6:31 p.m. UTC | #2
On Thu, Jun 30, 2016 at 10:06:38AM +0800, Hui Wang wrote:
> From: "Lu, Baolu" <baolu.lu@linux.intel.com>
> 
> BugLink: http://bugs.launchpad.net/bugs/1597564
> 
> Module xhci-pci and xhci-plat-hcd depend on xhci-hcd. Module xhci-hcd
> should be put at a place before xhci-pci and xhci-plat-hcd. Otherwise,
> xhci_hcd_init() might be executed after other functions in xhci-hcd if
> they are all selected to be built in.
> 
> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> (cherry picked from commit 8451a34ff6c7c756e9e0f0094a3ba856c9734e5d)
> Signed-off-by: Hui Wang <hui.wang@canonical.com>
> ---
> This patch is only needed by vivid kernel, the xenial kernel already
> had this patch.

Applied to Vivid.  Thanks Hui.

 -Kamal

> 
> With this patch, the ECHI host controller will be registerd to
> USB host bus1 and XHCI host controllers will be registered to
> USB host bus2 and bus3, when reboot or shutdown, the system will
> call XHCI_shutdown() first, in this situation the system will not
> hang.
> 
> Without this patch, the XHCI will be registered to USB host bus1 and
> bus2, the EHCI will be registered to USB host bus3, when reboot or
> shutdown, the system will call EHCI_shutdown() first, the system will
> hang inside the EHCI_shutdown().
> 
> According to the explanation of Intel side, this problem has something
> to do with port switching between EHCI and xHCI controller, before EHCI
> and XHCI drivers are loaded, the USB pci code will switch over ports
> from EHCI to XHCI if possible at boot, so the port belongs to XHCI now,
> if EHCI_shutdown() is called first, it will try to turn off a port that
> does not belong to it, then the system hang. If XHCI_shutdown() is called
> first, it will give back the port to EHCI, then EHCI_shutdown() will not
> hang.
> 
>  drivers/usb/host/Makefile | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
> index d6216a4..bd9a828 100644
> --- a/drivers/usb/host/Makefile
> +++ b/drivers/usb/host/Makefile
> @@ -28,9 +28,6 @@ obj-$(CONFIG_USB_WHCI_HCD)	+= whci/
>  
>  obj-$(CONFIG_PCI)		+= pci-quirks.o
>  
> -obj-$(CONFIG_USB_XHCI_PCI)	+= xhci-pci.o
> -obj-$(CONFIG_USB_XHCI_PLATFORM) += xhci-plat-hcd.o
> -
>  obj-$(CONFIG_USB_EHCI_HCD)	+= ehci-hcd.o
>  obj-$(CONFIG_USB_EHCI_PCI)	+= ehci-pci.o
>  obj-$(CONFIG_USB_EHCI_HCD_PLATFORM)	+= ehci-platform.o
> @@ -65,6 +62,8 @@ obj-$(CONFIG_USB_OHCI_HCD_PXA27X)	+= ohci-pxa27x.o
>  obj-$(CONFIG_USB_UHCI_HCD)	+= uhci-hcd.o
>  obj-$(CONFIG_USB_FHCI_HCD)	+= fhci.o
>  obj-$(CONFIG_USB_XHCI_HCD)	+= xhci-hcd.o
> +obj-$(CONFIG_USB_XHCI_PCI)	+= xhci-pci.o
> +obj-$(CONFIG_USB_XHCI_PLATFORM) += xhci-plat-hcd.o
>  obj-$(CONFIG_USB_SL811_HCD)	+= sl811-hcd.o
>  obj-$(CONFIG_USB_SL811_CS)	+= sl811_cs.o
>  obj-$(CONFIG_USB_U132_HCD)	+= u132-hcd.o
> -- 
> 1.9.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
diff mbox

Patch

diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
index d6216a4..bd9a828 100644
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
@@ -28,9 +28,6 @@  obj-$(CONFIG_USB_WHCI_HCD)	+= whci/
 
 obj-$(CONFIG_PCI)		+= pci-quirks.o
 
-obj-$(CONFIG_USB_XHCI_PCI)	+= xhci-pci.o
-obj-$(CONFIG_USB_XHCI_PLATFORM) += xhci-plat-hcd.o
-
 obj-$(CONFIG_USB_EHCI_HCD)	+= ehci-hcd.o
 obj-$(CONFIG_USB_EHCI_PCI)	+= ehci-pci.o
 obj-$(CONFIG_USB_EHCI_HCD_PLATFORM)	+= ehci-platform.o
@@ -65,6 +62,8 @@  obj-$(CONFIG_USB_OHCI_HCD_PXA27X)	+= ohci-pxa27x.o
 obj-$(CONFIG_USB_UHCI_HCD)	+= uhci-hcd.o
 obj-$(CONFIG_USB_FHCI_HCD)	+= fhci.o
 obj-$(CONFIG_USB_XHCI_HCD)	+= xhci-hcd.o
+obj-$(CONFIG_USB_XHCI_PCI)	+= xhci-pci.o
+obj-$(CONFIG_USB_XHCI_PLATFORM) += xhci-plat-hcd.o
 obj-$(CONFIG_USB_SL811_HCD)	+= sl811-hcd.o
 obj-$(CONFIG_USB_SL811_CS)	+= sl811_cs.o
 obj-$(CONFIG_USB_U132_HCD)	+= u132-hcd.o