usb: dwc3: ep0: Don't clear ep0 DWC3_EP_TRANSFER_STARTED
authorThinh Nguyen <Thinh.Nguyen@synopsys.com>
Thu, 14 Nov 2024 01:02:06 +0000 (01:02 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 16 Nov 2024 08:04:56 +0000 (09:04 +0100)
The driver cannot issue the End Transfer command to the SETUP transfer.
Don't clear DWC3_EP_TRANSFER_STARTED flag to make sure that the driver
won't send Start Transfer command again, which can cause no-resource
error. For example this can occur if the host issues a reset to the
device.

Cc: stable@vger.kernel.org
Fixes: 76cb323f80ac ("usb: dwc3: ep0: clear all EP0 flags")
Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/d3d618185fd614bb7426352a9fc1199641d3b5f5.1731545781.git.Thinh.Nguyen@synopsys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc3/ep0.c

index f3d97ad5156ee9278a61d0c8eeb292b13fc395a8..666ac432f52d67300c681727a5ed651196634d0c 100644 (file)
@@ -232,7 +232,7 @@ void dwc3_ep0_stall_and_restart(struct dwc3 *dwc)
        /* stall is always issued on EP0 */
        dep = dwc->eps[0];
        __dwc3_gadget_ep_set_halt(dep, 1, false);
-       dep->flags &= DWC3_EP_RESOURCE_ALLOCATED;
+       dep->flags &= DWC3_EP_RESOURCE_ALLOCATED | DWC3_EP_TRANSFER_STARTED;
        dep->flags |= DWC3_EP_ENABLED;
        dwc->delayed_status = false;