diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index f25bf76dafe3..a8caaab0eb52 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -3277,7 +3277,13 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep, * processed by the core. Hence do not reclaim it until * it is processed by the core. */ - if (req->trb->ctrl & DWC3_TRB_CTRL_HWO) { + /* + * If sg transfer are in progress, avoid checking + * HWO bit here as these will get cleared during + * ep reclaim. + */ + if ((req->trb->ctrl & DWC3_TRB_CTRL_HWO) + && (req->num_queued_sgs == 0)) { dbg_event(0xFF, "PEND TRB", dep->number); return 1; }