|
@@ -64,7 +64,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
|
|
|
static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
|
static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
|
|
{
|
|
{
|
|
|
struct pci_dev *pdev = to_pci_dev(dev);
|
|
struct pci_dev *pdev = to_pci_dev(dev);
|
|
|
-@@ -496,6 +508,8 @@ static void xhci_pci_quirks(struct devic
|
|
|
|
|
|
|
+@@ -486,6 +498,8 @@ static void xhci_pci_quirks(struct devic
|
|
|
xhci->quirks |= XHCI_AVOID_DQ_ON_LINK;
|
|
xhci->quirks |= XHCI_AVOID_DQ_ON_LINK;
|
|
|
xhci->quirks |= XHCI_ZHAOXIN_TRB_FETCH;
|
|
xhci->quirks |= XHCI_ZHAOXIN_TRB_FETCH;
|
|
|
xhci->quirks |= XHCI_VLI_SS_BULK_OUT_BUG;
|
|
xhci->quirks |= XHCI_VLI_SS_BULK_OUT_BUG;
|
|
@@ -75,7 +75,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
|
|
|
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
|
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
|
|
|
--- a/drivers/usb/host/xhci-ring.c
|
|
--- a/drivers/usb/host/xhci-ring.c
|
|
|
+++ b/drivers/usb/host/xhci-ring.c
|
|
+++ b/drivers/usb/host/xhci-ring.c
|
|
|
-@@ -3679,6 +3679,48 @@ static int xhci_align_td(struct xhci_hcd
|
|
|
|
|
|
|
+@@ -3674,6 +3674,48 @@ static int xhci_align_td(struct xhci_hcd
|
|
|
return 1;
|
|
return 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -124,7 +124,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
|
|
|
/* This is very similar to what ehci-q.c qtd_fill() does */
|
|
/* This is very similar to what ehci-q.c qtd_fill() does */
|
|
|
int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
|
|
int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
|
|
|
struct urb *urb, int slot_id, unsigned int ep_index)
|
|
struct urb *urb, int slot_id, unsigned int ep_index)
|
|
|
-@@ -3835,6 +3877,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
|
|
|
|
|
|
+@@ -3830,6 +3872,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
check_trb_math(urb, enqd_len);
|
|
check_trb_math(urb, enqd_len);
|
|
@@ -133,7 +133,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
|
|
|
giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id,
|
|
giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id,
|
|
|
start_cycle, start_trb);
|
|
start_cycle, start_trb);
|
|
|
return 0;
|
|
return 0;
|
|
|
-@@ -3970,6 +4014,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
|
|
|
|
|
|
|
+@@ -3979,6 +4023,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *
|
|
|
/* Event on completion */
|
|
/* Event on completion */
|
|
|
field | TRB_IOC | TRB_TYPE(TRB_STATUS) | ep_ring->cycle_state);
|
|
field | TRB_IOC | TRB_TYPE(TRB_STATUS) | ep_ring->cycle_state);
|
|
|
|
|
|
|
@@ -144,7 +144,7 @@ Signed-off-by: Jonathan Bell <[email protected]>
|
|
|
return 0;
|
|
return 0;
|
|
|
--- a/drivers/usb/host/xhci.h
|
|
--- a/drivers/usb/host/xhci.h
|
|
|
+++ b/drivers/usb/host/xhci.h
|
|
+++ b/drivers/usb/host/xhci.h
|
|
|
-@@ -1665,6 +1665,7 @@ struct xhci_hcd {
|
|
|
|
|
|
|
+@@ -1666,6 +1666,7 @@ struct xhci_hcd {
|
|
|
/* Downstream VLI fixes */
|
|
/* Downstream VLI fixes */
|
|
|
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(56)
|
|
#define XHCI_AVOID_DQ_ON_LINK BIT_ULL(56)
|
|
|
#define XHCI_VLI_SS_BULK_OUT_BUG BIT_ULL(57)
|
|
#define XHCI_VLI_SS_BULK_OUT_BUG BIT_ULL(57)
|