| From 2dedea035ae82c5af0595637a6eda4655532b21e Mon Sep 17 00:00:00 2001 |
| From: Thinh Nguyen <Thinh.Nguyen@synopsys.com> |
| Date: Thu, 5 Mar 2020 13:24:01 -0800 |
| Subject: usb: dwc3: gadget: Wrap around when skip TRBs |
| |
| From: Thinh Nguyen <Thinh.Nguyen@synopsys.com> |
| |
| commit 2dedea035ae82c5af0595637a6eda4655532b21e upstream. |
| |
| When skipping TRBs, we need to account for wrapping around the ring |
| buffer and not modifying some invalid TRBs. Without this fix, dwc3 won't |
| be able to check for available TRBs. |
| |
| Cc: stable <stable@vger.kernel.org> |
| Fixes: 7746a8dfb3f9 ("usb: dwc3: gadget: extract dwc3_gadget_ep_skip_trbs()") |
| Signed-off-by: Thinh Nguyen <thinhn@synopsys.com> |
| Signed-off-by: Felipe Balbi <balbi@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/dwc3/gadget.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/usb/dwc3/gadget.c |
| +++ b/drivers/usb/dwc3/gadget.c |
| @@ -1518,7 +1518,7 @@ static void dwc3_gadget_ep_skip_trbs(str |
| for (i = 0; i < req->num_trbs; i++) { |
| struct dwc3_trb *trb; |
| |
| - trb = req->trb + i; |
| + trb = &dep->trb_pool[dep->trb_dequeue]; |
| trb->ctrl &= ~DWC3_TRB_CTRL_HWO; |
| dwc3_ep_inc_deq(dep); |
| } |