Skip to content

Commit 5857711

Browse files
Kuen-Han Tsaigregkh
authored andcommitted
usb: dwc3: Ignore late xferNotReady event to prevent halt timeout
During a device-initiated disconnect, the End Transfer command resets the event filter, allowing a new xferNotReady event to be generated before the controller is fully halted. Processing this late event incorrectly triggers a Start Transfer, which prevents the controller from halting and results in a DSTS.DEVCTLHLT bit polling timeout. Ignore the late xferNotReady event if the controller is already in a disconnected state. Fixes: 72246da ("usb: Introduce DesignWare USB3 DRD Driver") Cc: stable <[email protected]> Signed-off-by: Kuen-Han Tsai <[email protected]> Acked-by: Thinh Nguyen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 6ca8af3 commit 5857711

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

drivers/usb/dwc3/gadget.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3777,6 +3777,15 @@ static void dwc3_gadget_endpoint_transfer_complete(struct dwc3_ep *dep,
37773777
static void dwc3_gadget_endpoint_transfer_not_ready(struct dwc3_ep *dep,
37783778
const struct dwc3_event_depevt *event)
37793779
{
3780+
/*
3781+
* During a device-initiated disconnect, a late xferNotReady event can
3782+
* be generated after the End Transfer command resets the event filter,
3783+
* but before the controller is halted. Ignore it to prevent a new
3784+
* transfer from starting.
3785+
*/
3786+
if (!dep->dwc->connected)
3787+
return;
3788+
37803789
dwc3_gadget_endpoint_frame_from_event(dep, event);
37813790

37823791
/*

0 commit comments

Comments
 (0)