Hi! > [ Upstream commit 71ca43f30df9c642970f9dc9b2d6f463f4967e7b ] > > 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. This is mismerged / crazy. Will probably break the driver completely. > +++ b/drivers/usb/dwc3/gadget.c > @@ -2717,6 +2717,15 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) > > dwc->connected = true; > > + /* > + * 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 See how connected = true is immediately overwritten? In mainline = true assignment is done below, so it does not have this problem. Best regards, Pavel -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Attachment:
signature.asc
Description: PGP signature