Using an UAS device (and thus USB-3 streams) on an Intel Cherrytrail device, results in the following error: xhci_hcd 0000:00:14.0: ERROR Transfer event for disabled endpoint or incorrect stream ring xhci_hcd 0000:00:14.0: @00000000742f7120 00000000 00000000 06000000 02028000 Note that the completion code is COMP_STALLED and the buffer which was being processed last is set to NULL. Both are a problem here, the buffer being NULL is what directly results in this error, because that means we cannot find out which stream was stalled, so which ring the move to the next td / which urb to return to the device driver with a -EPIPE status. Even if we could figure out the active stream when this happened the COMP_STALLED itself is weird too as the UAS protocol does not define a stall response by the device. I've tried to fix this by simply doing a xhci_queue_reset_ep() on the endpoint, but that only makes things worse, going from waiting for the scsi layer to timeout (30 seconds) and the uas driver to do an usb-reset, to things not working at all. The uas device + USB-3 cable used for testing work fine on other xhci controllers and show this behavior on multiple cherrytrail devices, so lets disable streams on cherrytrail until we can find a better workaround. Cc: stable@xxxxxxxxxxxxxxx Cc: Oliver Neukum <oneukum@xxxxxxxx> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> --- drivers/usb/host/xhci-pci.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index c96b0b1..0fbbef8 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -180,6 +180,9 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) (pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI || pdev->device == PCI_DEVICE_ID_INTEL_APL_XHCI)) xhci->quirks |= XHCI_MISSING_CAS; + if (pdev->vendor == PCI_VENDOR_ID_INTEL && + pdev->device == PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI) + xhci->quirks |= XHCI_BROKEN_STREAMS; if (pdev->vendor == PCI_VENDOR_ID_ETRON && pdev->device == PCI_DEVICE_ID_EJ168) { -- 2.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html