Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 041d81f4 authored by Felipe Balbi's avatar Felipe Balbi
Browse files

usb: dwc3: gadget: fix 'endpoint always busy' bug



If a USB transfer has already been started, meaning
we have already issued StartTransfer command to that
particular endpoint, DWC3_EP_BUSY flag has also
already been set.

When we try to cancel this transfer which is already
in controller's cache, we will not receive XferComplete
event and we must clear DWC3_EP_BUSY in order to allow
subsequent requests to be properly started.

The best place to clear that flag is right after issuing
DWC3_DEPCMD_ENDTRANSFER.

Cc: stable@vger.kernel.org # v3.4 v3.5 v3.6
Reported-by: default avatarMoiz Sonasath <m-sonasath@ti.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent ddffeb8c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1904,7 +1904,7 @@ static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum)
	ret = dwc3_send_gadget_ep_cmd(dwc, dep->number, cmd, &params);
	WARN_ON_ONCE(ret);
	dep->resource_index = 0;

	dep->flags &= ~DWC3_EP_BUSY;
	udelay(100);
}