aboutsummaryrefslogtreecommitdiff
path: root/payloads/libpayload/drivers/usb/xhci.c
diff options
context:
space:
mode:
Diffstat (limited to 'payloads/libpayload/drivers/usb/xhci.c')
-rw-r--r--payloads/libpayload/drivers/usb/xhci.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/payloads/libpayload/drivers/usb/xhci.c b/payloads/libpayload/drivers/usb/xhci.c
index 33009bc637..7adb304a23 100644
--- a/payloads/libpayload/drivers/usb/xhci.c
+++ b/payloads/libpayload/drivers/usb/xhci.c
@@ -551,6 +551,14 @@ xhci_enqueue_td(transfer_ring_t *const tr, const int ep, const size_t mps,
} else {
TRB_SET(TT, trb, TRB_NORMAL);
}
+ /*
+ * This is a workaround for Synopsys DWC3. If the ENT flag is
+ * not set for the Normal and Data Stage TRBs. We get Event TRB
+ * with length 0x20d from the controller when we enqueue a TRB
+ * for the IN endpoint with length 0x200.
+ */
+ if (!length)
+ TRB_SET(ENT, trb, 1);
xhci_enqueue_trb(tr);