stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] usb: xhci: apply XHCI_AVOID_BEI quirk to Intel ValleyView and LynxPoint LP
@ 2015-03-12  1:39 Lu Baolu
  2015-03-12  7:54 ` Greg Kroah-Hartman
  2015-03-12  8:46 ` Mathias Nyman
  0 siblings, 2 replies; 5+ messages in thread
From: Lu Baolu @ 2015-03-12  1:39 UTC (permalink / raw)
  To: Mathias Nyman, Greg Kroah-Hartman
  Cc: dheitmueller, linux-usb, linux-kernel, Lu Baolu, stable

When a device with an isochronous endpoint is plugged into the Intel
xHCI host controller, and the driver submits multiple frames per URB,
the xHCI driver will set the Block Event Interrupt (BEI) flag on all
but the last TD for the URB. This causes the host controller to place
an event on the event ring, but not send an interrupt. When the last
TD for the URB completes, BEI is cleared, and we get an interrupt for
the whole URB.

However,  under some Intel xHCI host controllers like ValleyView and
Lynx Point LP, if the event ring is full of events from transfers with
BEI set, a "Event Ring is Full" event will be posted to the last entry
of the event ring, but no interrupt is generated. Host will cease all
transfer and command executions  and  wait until software completes
handling the pending events in event ring. That means xHC stops but
event of "event ring is full" is not notified. As the result, the xHC
looks like dead to user.

The patch is to apply XHCI_AVOID_BEI to Intel VallyView and Lynx Point
LP devices. And it should be backported to kernels as old as 3.0, that
contains the commit 69e848c2090a ("Intel xhci: Support EHCI/xHCI port
switching.")

Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Cc: stable@vger.kernel.org
---
 drivers/usb/host/xhci-pci.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index fd53c9e..5aa4893 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -40,6 +40,7 @@
 #define PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI		0x22b5
 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_XHCI		0xa12f
 #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI	0x9d2f
+#define	PCI_DEVICE_ID_INTEL_VALLEYVIEW_XHCI		0x0f35
 
 static const char hcd_name[] = "xhci_hcd";
 
@@ -135,6 +136,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
 	if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
 		pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) {
 		xhci->quirks |= XHCI_SPURIOUS_REBOOT;
+		xhci->quirks |= XHCI_AVOID_BEI;
 	}
 	if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
 		(pdev->device == PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI ||
@@ -142,6 +144,9 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
 		 pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI)) {
 		xhci->quirks |= XHCI_PME_STUCK_QUIRK;
 	}
+	if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
+			pdev->device == PCI_DEVICE_ID_INTEL_VALLEYVIEW_XHCI)
+		xhci->quirks |= XHCI_AVOID_BEI;
 	if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
 			pdev->device == PCI_DEVICE_ID_EJ168) {
 		xhci->quirks |= XHCI_RESET_ON_RESUME;
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] usb: xhci: apply XHCI_AVOID_BEI quirk to Intel ValleyView and LynxPoint LP
  2015-03-12  1:39 [PATCH 1/1] usb: xhci: apply XHCI_AVOID_BEI quirk to Intel ValleyView and LynxPoint LP Lu Baolu
@ 2015-03-12  7:54 ` Greg Kroah-Hartman
  2015-03-12  8:48   ` Lu, Baolu
  2015-03-12  8:46 ` Mathias Nyman
  1 sibling, 1 reply; 5+ messages in thread
From: Greg Kroah-Hartman @ 2015-03-12  7:54 UTC (permalink / raw)
  To: Lu Baolu; +Cc: Mathias Nyman, dheitmueller, linux-usb, linux-kernel, stable

On Thu, Mar 12, 2015 at 09:39:06AM +0800, Lu Baolu wrote:
> When a device with an isochronous endpoint is plugged into the Intel
> xHCI host controller, and the driver submits multiple frames per URB,
> the xHCI driver will set the Block Event Interrupt (BEI) flag on all
> but the last TD for the URB. This causes the host controller to place
> an event on the event ring, but not send an interrupt. When the last
> TD for the URB completes, BEI is cleared, and we get an interrupt for
> the whole URB.
> 
> However,  under some Intel xHCI host controllers like ValleyView and
> Lynx Point LP, if the event ring is full of events from transfers with
> BEI set, a "Event Ring is Full" event will be posted to the last entry
> of the event ring, but no interrupt is generated. Host will cease all
> transfer and command executions  and  wait until software completes
> handling the pending events in event ring. That means xHC stops but
> event of "event ring is full" is not notified. As the result, the xHC
> looks like dead to user.
> 
> The patch is to apply XHCI_AVOID_BEI to Intel VallyView and Lynx Point
> LP devices. And it should be backported to kernels as old as 3.0, that
> contains the commit 69e848c2090a ("Intel xhci: Support EHCI/xHCI port
> switching.")
> 
> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
> Cc: stable@vger.kernel.org
> ---
>  drivers/usb/host/xhci-pci.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
> index fd53c9e..5aa4893 100644
> --- a/drivers/usb/host/xhci-pci.c
> +++ b/drivers/usb/host/xhci-pci.c
> @@ -40,6 +40,7 @@
>  #define PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI		0x22b5
>  #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_XHCI		0xa12f
>  #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI	0x9d2f
> +#define	PCI_DEVICE_ID_INTEL_VALLEYVIEW_XHCI		0x0f35

Minor nit, you added a tab where the rest of the file was using a space
:(

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] usb: xhci: apply XHCI_AVOID_BEI quirk to Intel ValleyView and LynxPoint LP
  2015-03-12  1:39 [PATCH 1/1] usb: xhci: apply XHCI_AVOID_BEI quirk to Intel ValleyView and LynxPoint LP Lu Baolu
  2015-03-12  7:54 ` Greg Kroah-Hartman
@ 2015-03-12  8:46 ` Mathias Nyman
  2015-03-12  8:47   ` Lu, Baolu
  1 sibling, 1 reply; 5+ messages in thread
From: Mathias Nyman @ 2015-03-12  8:46 UTC (permalink / raw)
  To: Lu Baolu, Mathias Nyman, Greg Kroah-Hartman
  Cc: dheitmueller, linux-usb, linux-kernel, stable

On 12.03.2015 03:39, Lu Baolu wrote:
> When a device with an isochronous endpoint is plugged into the Intel
> xHCI host controller, and the driver submits multiple frames per URB,
> the xHCI driver will set the Block Event Interrupt (BEI) flag on all
> but the last TD for the URB. This causes the host controller to place
> an event on the event ring, but not send an interrupt. When the last
> TD for the URB completes, BEI is cleared, and we get an interrupt for
> the whole URB.
> 
> However,  under some Intel xHCI host controllers like ValleyView and
> Lynx Point LP, if the event ring is full of events from transfers with
> BEI set, a "Event Ring is Full" event will be posted to the last entry
> of the event ring, but no interrupt is generated. Host will cease all
> transfer and command executions  and  wait until software completes
> handling the pending events in event ring. That means xHC stops but
> event of "event ring is full" is not notified. As the result, the xHC
> looks like dead to user.
> 
> The patch is to apply XHCI_AVOID_BEI to Intel VallyView and Lynx Point
> LP devices. And it should be backported to kernels as old as 3.0, that
> contains the commit 69e848c2090a ("Intel xhci: Support EHCI/xHCI port
> switching.")
> 

Maybe we should set the quirk for all Intel xHCI controllers.
So far the list includes Pantherpoint, Lynxpoint and valleyview.

I bet it concerns most Intel platforms.

-Mathias




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] usb: xhci: apply XHCI_AVOID_BEI quirk to Intel ValleyView and LynxPoint LP
  2015-03-12  8:46 ` Mathias Nyman
@ 2015-03-12  8:47   ` Lu, Baolu
  0 siblings, 0 replies; 5+ messages in thread
From: Lu, Baolu @ 2015-03-12  8:47 UTC (permalink / raw)
  To: Mathias Nyman, Mathias Nyman, Greg Kroah-Hartman
  Cc: dheitmueller, linux-usb, linux-kernel, stable



On 03/12/2015 04:46 PM, Mathias Nyman wrote:
> On 12.03.2015 03:39, Lu Baolu wrote:
>> When a device with an isochronous endpoint is plugged into the Intel
>> xHCI host controller, and the driver submits multiple frames per URB,
>> the xHCI driver will set the Block Event Interrupt (BEI) flag on all
>> but the last TD for the URB. This causes the host controller to place
>> an event on the event ring, but not send an interrupt. When the last
>> TD for the URB completes, BEI is cleared, and we get an interrupt for
>> the whole URB.
>>
>> However,  under some Intel xHCI host controllers like ValleyView and
>> Lynx Point LP, if the event ring is full of events from transfers with
>> BEI set, a "Event Ring is Full" event will be posted to the last entry
>> of the event ring, but no interrupt is generated. Host will cease all
>> transfer and command executions  and  wait until software completes
>> handling the pending events in event ring. That means xHC stops but
>> event of "event ring is full" is not notified. As the result, the xHC
>> looks like dead to user.
>>
>> The patch is to apply XHCI_AVOID_BEI to Intel VallyView and Lynx Point
>> LP devices. And it should be backported to kernels as old as 3.0, that
>> contains the commit 69e848c2090a ("Intel xhci: Support EHCI/xHCI port
>> switching.")
>>
> Maybe we should set the quirk for all Intel xHCI controllers.
> So far the list includes Pantherpoint, Lynxpoint and valleyview.
>
> I bet it concerns most Intel platforms.

Yes, I agree with you.

I will send out a new patch for this.

>
> -Mathias
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] usb: xhci: apply XHCI_AVOID_BEI quirk to Intel ValleyView and LynxPoint LP
  2015-03-12  7:54 ` Greg Kroah-Hartman
@ 2015-03-12  8:48   ` Lu, Baolu
  0 siblings, 0 replies; 5+ messages in thread
From: Lu, Baolu @ 2015-03-12  8:48 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Mathias Nyman, dheitmueller, linux-usb, linux-kernel, stable



On 03/12/2015 03:54 PM, Greg Kroah-Hartman wrote:
> On Thu, Mar 12, 2015 at 09:39:06AM +0800, Lu Baolu wrote:
>> When a device with an isochronous endpoint is plugged into the Intel
>> xHCI host controller, and the driver submits multiple frames per URB,
>> the xHCI driver will set the Block Event Interrupt (BEI) flag on all
>> but the last TD for the URB. This causes the host controller to place
>> an event on the event ring, but not send an interrupt. When the last
>> TD for the URB completes, BEI is cleared, and we get an interrupt for
>> the whole URB.
>>
>> However,  under some Intel xHCI host controllers like ValleyView and
>> Lynx Point LP, if the event ring is full of events from transfers with
>> BEI set, a "Event Ring is Full" event will be posted to the last entry
>> of the event ring, but no interrupt is generated. Host will cease all
>> transfer and command executions  and  wait until software completes
>> handling the pending events in event ring. That means xHC stops but
>> event of "event ring is full" is not notified. As the result, the xHC
>> looks like dead to user.
>>
>> The patch is to apply XHCI_AVOID_BEI to Intel VallyView and Lynx Point
>> LP devices. And it should be backported to kernels as old as 3.0, that
>> contains the commit 69e848c2090a ("Intel xhci: Support EHCI/xHCI port
>> switching.")
>>
>> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
>> Cc: stable@vger.kernel.org
>> ---
>>   drivers/usb/host/xhci-pci.c | 5 +++++
>>   1 file changed, 5 insertions(+)
>>
>> diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
>> index fd53c9e..5aa4893 100644
>> --- a/drivers/usb/host/xhci-pci.c
>> +++ b/drivers/usb/host/xhci-pci.c
>> @@ -40,6 +40,7 @@
>>   #define PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI		0x22b5
>>   #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_XHCI		0xa12f
>>   #define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_XHCI	0x9d2f
>> +#define	PCI_DEVICE_ID_INTEL_VALLEYVIEW_XHCI		0x0f35
> Minor nit, you added a tab where the rest of the file was using a space
> :(

Yes, thanks for reminding.

> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-03-12  8:48 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-12  1:39 [PATCH 1/1] usb: xhci: apply XHCI_AVOID_BEI quirk to Intel ValleyView and LynxPoint LP Lu Baolu
2015-03-12  7:54 ` Greg Kroah-Hartman
2015-03-12  8:48   ` Lu, Baolu
2015-03-12  8:46 ` Mathias Nyman
2015-03-12  8:47   ` Lu, Baolu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).