This is a note to let you know that I've just added the patch titled usb: dwc3: fix TRB completion when multiple TRBs are started to the 3.16-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: usb-dwc3-fix-trb-completion-when-multiple-trbs-are-started.patch and it can be found in the queue-3.16 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 0b93a4c838fa10370d72f86fe712426ac63804de Mon Sep 17 00:00:00 2001 From: Felipe Balbi <balbi@xxxxxx> Date: Thu, 4 Sep 2014 10:28:10 -0500 Subject: usb: dwc3: fix TRB completion when multiple TRBs are started From: Felipe Balbi <balbi@xxxxxx> commit 0b93a4c838fa10370d72f86fe712426ac63804de upstream. After commit 2ec2a8be (usb: dwc3: gadget: always enable IOC on bulk/interrupt transfers) we created a situation where it was possible to hang a bulk/interrupt endpoint if we had more than one pending request in our queue and they were both started with a single Start Transfer command. The problems triggers because we had not enabled Transfer In Progress event for those endpoints and we were not able to process early giveback of requests completed without LST bit set. Fix the problem by finally enabling Xfer In Progress event for all endpoint types, except control. Fixes: 2ec2a8be (usb: dwc3: gadget: always enable IOC on bulk/interrupt transfers) Reported-by: Pratyush Anand <pratyush.anand@xxxxxx> Signed-off-by: Felipe Balbi <balbi@xxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/usb/dwc3/gadget.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -527,7 +527,7 @@ static int dwc3_gadget_set_ep_config(str dep->stream_capable = true; } - if (usb_endpoint_xfer_isoc(desc)) + if (!usb_endpoint_xfer_control(desc)) params.param1 |= DWC3_DEPCFG_XFER_IN_PROGRESS_EN; /* @@ -2042,12 +2042,6 @@ static void dwc3_endpoint_interrupt(stru dwc3_endpoint_transfer_complete(dwc, dep, event, 1); break; case DWC3_DEPEVT_XFERINPROGRESS: - if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) { - dev_dbg(dwc->dev, "%s is not an Isochronous endpoint\n", - dep->name); - return; - } - dwc3_endpoint_transfer_complete(dwc, dep, event, 0); break; case DWC3_DEPEVT_XFERNOTREADY: Patches currently in stable-queue which might be from balbi@xxxxxx are queue-3.16/usb-dwc3-omap-fix-ordering-for-runtime-pm-calls.patch queue-3.16/usb-chipidea-msm-use-usb-phy-api-to-control-phy-state.patch queue-3.16/usb-dwc3-fix-trb-completion-when-multiple-trbs-are-started.patch queue-3.16/usb-gadget-f_rndis-fix-interface-id-for-os-descriptors.patch queue-3.16/usb-phy-tegra-avoid-use-of-sizeof-void.patch queue-3.16/usb-phy-twl4030-usb-fix-lost-interrupts-after-id-pin-goes-down.patch queue-3.16/usb-host-xhci-fix-compliance-mode-workaround.patch queue-3.16/usb-phy-twl4030-usb-fix-regressions-to-runtime-pm-on-omaps.patch queue-3.16/usb-dwc3-core-fix-ordering-for-phy-suspend.patch queue-3.16/usb-dwc3-core-fix-order-of-pm-runtime-calls.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html