[PATCH v2 2/2] usb: dwc3: ep0: Reset TRB counter for ep0 IN

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]