In control read transfer completion handler, the driver needs to reset the TRB enqueue counter. Since there is one control endpoint structure for each direction, we must also track the TRB enqueue counter for each direction. Currently the driver only resets the TRB counter for control OUT endpoint only. Check for the data direction and properly reset the TRB counter from correct control endpoint. Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Thinh Nguyen <thinhn@xxxxxxxxxxxx> --- drivers/usb/dwc3/ep0.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index fd3e7ad2eb0e..618b4260f0d9 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -858,7 +858,12 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, trb++; trb->ctrl &= ~DWC3_TRB_CTRL_HWO; trace_dwc3_complete_trb(ep0, trb); - ep0->trb_enqueue = 0; + + if (r->direction) + dwc->eps[1]->trb_enqueue = 0; + else + dwc->eps[0]->trb_enqueue = 0; + dwc->ep0_bounced = false; } -- 2.11.0