Hi, Wesley Cheng wrote: > The current dwc3_gadget_reset_interrupt() will stop any active > transfers, but only addresses blocking of EP queuing for while we are > coming from a disconnected scenario, i.e. after receiving the disconnect > event. If the host decides to issue a bus reset on the device, the > connected parameter will still be set to true, allowing for EP queuing > to continue while we are disabling the functions. To avoid this, set the > connected flag to false until the stop active transfers is complete. > > Signed-off-by: Wesley Cheng <wcheng@xxxxxxxxxxxxxx> > --- > drivers/usb/dwc3/gadget.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c > index 6e14fdc..d5ed0f69 100644 > --- a/drivers/usb/dwc3/gadget.c > +++ b/drivers/usb/dwc3/gadget.c > @@ -3327,6 +3327,15 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) > u32 reg; > > /* > + * Ideally, dwc3_reset_gadget() would trigger the function > + * drivers to stop any active transfers through ep disable. > + * However, for functions which defer ep disable, such as mass > + * storage, we will need to rely on the call to stop active > + * transfers here, and avoid allowing of request queuing. > + */ > + dwc->connected = false; > + > + /* > * WORKAROUND: DWC3 revisions <1.88a have an issue which > * would cause a missing Disconnect Event if there's a > * pending Setup Packet in the FIFO. > This doesn't look right. Did you have rebase issue with your local change again? BR, Thinh