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 <wch...@codeaurora.org>
> ---
>  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

Reply via email to