From: Janusz Dziedzic Date: Wed, 9 Nov 2016 10:01:32 +0000 (+0100) Subject: usb: dwc3: clean TRB if STARTTRANSFER fail X-Git-Tag: v4.10-rc1~150^2~57^2~62 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=ce3fc8b32994e16f69912c982823105aafead7a6;p=karo-tx-linux.git usb: dwc3: clean TRB if STARTTRANSFER fail In case STARTTRANSFER will fail, clean TRB. Seems HW in such case don't clean HWO bit. So, without this cleanup prev_trb still have HWO bit set. In my case (without patch), after first START failed: - dep->enqueue == 1 - dep->dequeue == 1 - prev_trb still have HWO set - left_trb() == 0 No way to send more data. Signed-off-by: Janusz Dziedzic Signed-off-by: Felipe Balbi --- diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 9d6c085c6d48..9262ef20f7c6 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1084,6 +1084,8 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep, u16 cmd_param) * here and stop, unmap, free and del each of the linked * requests instead of what we do now. */ + if (req->trb) + memset(req->trb, 0, sizeof(struct dwc3_trb)); dep->queued_requests--; dwc3_gadget_giveback(dep, req, ret); return ret;