Re: [PATCH] xhci: Add BayTrail to list of Intel switchable hosts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



At this point the port switchover quirk is getting unwieldy.  I know of
at least two more platforms that will need the switchover quirk, and
it's silly to keep adding them to the list.

Heikki, can you change the code to always try to switchover the ports
from EHCI to xHCI if an Intel xHCI host is found, and fail gracefully if
there isn't an EHCI host controller on board?

I suspect Intel will include the port switchover mechanism until they
decide to only include xHCI hosts and no EHCI hosts.  In the meantime,
we can avoid breaking USB 3.0 new platforms by always attempting to do
the switchover.

Sarah Sharp

On Tue, May 21, 2013 at 09:08:16AM +0300, Heikki Krogerus wrote:
> From: "Chew, Chiau Ee" <chiau.ee.chew@xxxxxxxxx>
> 
> Like the xHCI controller on Intel Panther Point and Lynx Point
> chipsets, the xHCI controller on Intel BayTrail has also ports that
> can be switched between the EHCI host controller.
> 
> This patch should be backported to stable kernels as old as 3.0,
> that contain commit 69e848c2090aebba5698a1620604c7dccb448684
> "Intel xhci: Support EHCI/xHCI port switching.
> 
> Signed-off-by: Chew, Chiau Ee <chiau.ee.chew@xxxxxxxxx>
> Signed-off-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> ---
>  drivers/usb/host/ehci-pci.c   |    3 ++-
>  drivers/usb/host/pci-quirks.c |   12 +++++++++++-
>  2 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
> index 595d210..a5708d9 100644
> --- a/drivers/usb/host/ehci-pci.c
> +++ b/drivers/usb/host/ehci-pci.c
> @@ -322,7 +322,8 @@ static bool usb_is_intel_switchable_ehci(struct pci_dev *pdev)
>  		(pdev->device == 0x1E26 ||
>  		 pdev->device == 0x8C2D ||
>  		 pdev->device == 0x8C26 ||
> -		 pdev->device == 0x9C26);
> +		 pdev->device == 0x9C26 ||
> +		 pdev->device == 0x0F34);
>  }
>  
>  static void ehci_enable_xhci_companion(void)
> diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
> index 4c338ec..6062822 100644
> --- a/drivers/usb/host/pci-quirks.c
> +++ b/drivers/usb/host/pci-quirks.c
> @@ -724,6 +724,7 @@ static int handshake(void __iomem *ptr, u32 mask, u32 done,
>  
>  #define PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI	0x8C31
>  #define PCI_DEVICE_ID_INTEL_LYNX_POINT_LP_XHCI	0x9C31
> +#define PCI_DEVICE_ID_INTEL_BYT_XHCI		0x0F35
>  
>  bool usb_is_intel_ppt_switchable_xhci(struct pci_dev *pdev)
>  {
> @@ -741,10 +742,19 @@ bool usb_is_intel_lpt_switchable_xhci(struct pci_dev *pdev)
>  		 pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_LP_XHCI);
>  }
>  
> +/* And so does the Intel BayTrail. */
> +bool usb_is_intel_byt_switchable_xhci(struct pci_dev *pdev)
> +{
> +	return pdev->class == PCI_CLASS_SERIAL_USB_XHCI &&
> +		pdev->vendor == PCI_VENDOR_ID_INTEL &&
> +		pdev->device == PCI_DEVICE_ID_INTEL_BYT_XHCI;
> +}
> +
>  bool usb_is_intel_switchable_xhci(struct pci_dev *pdev)
>  {
>  	return usb_is_intel_ppt_switchable_xhci(pdev) ||
> -		usb_is_intel_lpt_switchable_xhci(pdev);
> +		usb_is_intel_lpt_switchable_xhci(pdev) ||
> +		usb_is_intel_byt_switchable_xhci(pdev);
>  }
>  EXPORT_SYMBOL_GPL(usb_is_intel_switchable_xhci);
>  
> -- 
> 1.7.10.4
> 
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]