usb: dwc3: fix TRB completion when multiple TRBs are started
authorFelipe Balbi <balbi@ti.com>
Thu, 4 Sep 2014 15:28:10 +0000 (10:28 -0500)
committerFelipe Balbi <balbi@ti.com>
Fri, 5 Sep 2014 14:16:55 +0000 (09:16 -0500)
commit0b93a4c838fa10370d72f86fe712426ac63804de
treea834b4e0ff9188981ec9c4f1ac5bea773b6fd0e6
parent81a60b7f5c143ab3cdcd9943c9b4b7c63c32fc31
usb: dwc3: fix TRB completion when multiple TRBs are started

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)
Cc: <stable@vger.kernel.org> # v3.14+
Reported-by: Pratyush Anand <pratyush.anand@st.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/gadget.c