On Thu, Mar 12, 2015 at 8:14 PM, Alistair Grant <akgrant0...@gmail.com> wrote: > On Thu, Mar 12, 2015 at 11:15 AM, Lu Baolu <baolu...@linux.intel.com> 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 Intel xHCI host controllers, if the event ring is full >> of events from transfers with BEI set, an "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 the 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. >> >> This patch is to apply XHCI_AVOID_BEI quirk to Intel xHC 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...@linux.intel.com> >> Cc: sta...@vger.kernel.org >> --- >> drivers/usb/host/xhci-pci.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c >> index fd53c9e..2af32e2 100644 >> --- a/drivers/usb/host/xhci-pci.c >> +++ b/drivers/usb/host/xhci-pci.c >> @@ -115,6 +115,7 @@ static void xhci_pci_quirks(struct device *dev, struct >> xhci_hcd *xhci) >> if (pdev->vendor == PCI_VENDOR_ID_INTEL) { >> xhci->quirks |= XHCI_LPM_SUPPORT; >> xhci->quirks |= XHCI_INTEL_HOST; >> + xhci->quirks |= XHCI_AVOID_BEI; >> } >> if (pdev->vendor == PCI_VENDOR_ID_INTEL && >> pdev->device == >> PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) { >> @@ -130,7 +131,6 @@ static void xhci_pci_quirks(struct device *dev, struct >> xhci_hcd *xhci) >> * PPT chipsets. >> */ >> xhci->quirks |= XHCI_SPURIOUS_REBOOT; >> - xhci->quirks |= XHCI_AVOID_BEI; >> } >> if (pdev->vendor == PCI_VENDOR_ID_INTEL && >> pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) { >> -- >> 2.1.0 >> >> -- > > This works for me... > > Computer: Dell XPS13 9333 > USB controller: Intel Corporation 8 Series USB xHCI HC (rev 04) > (prog-if 30 [XHCI]) > Kernel: 3.19.1 > USB Device: Hauppauge USB-Live2 > > Please let me know if I can help in any other way. > > Tested-by: Alistair Grant <akgrant0...@gmail.com>
Just FYI... I was able to test this on a slightly older laptop that had both USB2 and USB3 ports and can confirm that it also works there: 00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04) Thanks, Alistair -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/