From: Thinh Nguyen Date: Wed, 6 May 2020 02:47:03 +0000 (-0700) Subject: usb: dwc3: gadget: Don't prepare beyond a transfer X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=aefe3d232b6629cb0ac92cc3d4238a5133dd9fec;p=linux.git usb: dwc3: gadget: Don't prepare beyond a transfer Don't prepare TRBs beyond a transfer. In DWC_usb32, its transfer burst capability may try to read and use TRBs beyond the active transfer. For other controllers, they don't process the next transfer TRBs until the current transfer is completed. Explicitly prevent preparing TRBs ahead for all controllers. Signed-off-by: Thinh Nguyen Signed-off-by: Felipe Balbi --- diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 97c6a57857256..07824b670440b 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1231,6 +1231,14 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep) if (!dwc3_calc_trbs_left(dep)) return; + + /* + * Don't prepare beyond a transfer. In DWC_usb32, its transfer + * burst capability may try to read and use TRBs beyond the + * active transfer instead of stopping. + */ + if (dep->stream_capable && req->request.is_last) + return; } }