usb: dwc3: gadget: fix trb ring full bug
authorWu Liang feng <wulf@rock-chips.com>
Fri, 30 Sep 2016 11:19:40 +0000 (19:19 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Fri, 7 Oct 2016 08:40:12 +0000 (16:40 +0800)
commite9cfaddeec509e93d2100fce0d182f995fc159e6
treeae51c7efb7dc056cc6ff4ef69b9b500693bb5319
parentf17ca45e719d7c996728a5db828aa56a5357d983
usb: dwc3: gadget: fix trb ring full bug

The upstream commit 5e8ec28765 (usb: dwc3: gadget: Handle TRB
index 0 when full or empty) only use the HWO = 1 to check if
the TRB ring is full. But refer to DWC3 databook Version 3.00a,
8.2.3.2 TRB Control Bit Rules: When an OUT endpoint receives a
short packet, some TRBs in a chain may still have their HWO bit
set to 1 while belonging to software.

So if HWO=1 and CSP=1 on OUT endpoint, it also means that TRB
ring is empty, software may reclaim those TRBs even though HWO=1.

TEST=use MTP to transfer big data, and then cancel the transition,
check if it can transfer again.

Change-Id: I45cc683dc733ff7a642cfcd3ebc20455ef677753
Signed-off-by: Wu Liang feng <wulf@rock-chips.com>
drivers/usb/dwc3/gadget.c