|
@@ -26,8 +26,8 @@ Signed-off-by: Jonathan Bell <[email protected]>
|
|
|
|
|
|
--- a/drivers/usb/host/xhci-pci.c
|
|
|
+++ b/drivers/usb/host/xhci-pci.c
|
|
|
-@@ -298,6 +298,7 @@ static void xhci_pci_quirks(struct devic
|
|
|
- xhci->quirks |= XHCI_EP_CTX_BROKEN_DCS;
|
|
|
+@@ -297,6 +297,7 @@ static void xhci_pci_quirks(struct devic
|
|
|
+ xhci->quirks |= XHCI_LPM_SUPPORT;
|
|
|
xhci->quirks |= XHCI_AVOID_DQ_ON_LINK;
|
|
|
xhci->quirks |= XHCI_VLI_TRB_CACHE_BUG;
|
|
|
+ xhci->quirks |= XHCI_VLI_SS_BULK_OUT_BUG;
|
|
@@ -36,7 +36,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
|
|
|
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
|
|
--- a/drivers/usb/host/xhci-ring.c
|
|
|
+++ b/drivers/usb/host/xhci-ring.c
|
|
|
-@@ -3578,14 +3578,15 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
|
|
+@@ -3555,14 +3555,15 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
|
|
unsigned int num_trbs;
|
|
|
unsigned int start_cycle, num_sgs = 0;
|
|
|
unsigned int enqd_len, block_len, trb_buff_len, full_len;
|
|
@@ -54,7 +54,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
|
|
|
full_len = urb->transfer_buffer_length;
|
|
|
/* If we have scatter/gather list, we use it. */
|
|
|
if (urb->num_sgs && !(urb->transfer_flags & URB_DMA_MAP_SINGLE)) {
|
|
|
-@@ -3622,6 +3623,17 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
|
|
+@@ -3599,6 +3600,17 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
|
|
start_cycle = ring->cycle_state;
|
|
|
send_addr = addr;
|
|
|
|
|
@@ -72,7 +72,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
|
|
|
/* Queue the TRBs, even if they are zero-length */
|
|
|
for (enqd_len = 0; first_trb || enqd_len < full_len;
|
|
|
enqd_len += trb_buff_len) {
|
|
|
-@@ -3634,6 +3646,11 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
|
|
+@@ -3611,6 +3623,11 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
|
|
if (enqd_len + trb_buff_len > full_len)
|
|
|
trb_buff_len = full_len - enqd_len;
|
|
|
|