Re: [PATCH 2/2] usb: dwc3: gadget: Ignore EP queue requests during bus reset

From: Thinh Nguyen
Date: Fri Mar 19 2021 - 20:40:59 EST


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