linux/drivers
Frank Li 387c2b6ba1 usb: cdns3: gadget: fix new urb never complete if ep cancel previous requests
This issue was found at android12 MTP.
1. MTP submit many out urb request.
2. Cancel left requests (>20) when enough data get from host
3. Send ACK by IN endpoint.
4. MTP submit new out urb request.
5. 4's urb never complete.

TRACE LOG:

MtpServer-2157    [000] d..3  1287.150391: cdns3_ep_dequeue: ep1out: req: 00000000299e6836, req buff 000000009df42287, length: 0/16384 zsi, status: -115, trb: [start:87, end:87: virt addr 0x80004000ffd50420], flags:1 SID: 0
MtpServer-2157    [000] d..3  1287.150410: cdns3_gadget_giveback: ep1out: req: 00000000299e6836, req buff 000000009df42287, length: 0/16384 zsi, status: -104, trb: [start:87, end:87: virt addr 0x80004000ffd50420], flags:0 SID: 0
MtpServer-2157    [000] d..3  1287.150433: cdns3_ep_dequeue: ep1out: req: 0000000080b7bde6, req buff 000000009ed5c556, length: 0/16384 zsi, status: -115, trb: [start:88, end:88: virt addr 0x80004000ffd5042c], flags:1 SID: 0
MtpServer-2157    [000] d..3  1287.150446: cdns3_gadget_giveback: ep1out: req: 0000000080b7bde6, req buff 000000009ed5c556, length: 0/16384 zsi, status: -104, trb: [start:88, end:88: virt addr 0x80004000ffd5042c], flags:0 SID: 0
	....
MtpServer-2157    [000] d..1  1293.630410: cdns3_alloc_request: ep1out: req: 00000000afbccb7d, req buff 0000000000000000, length: 0/0 zsi, status: 0, trb: [start:0, end:0: virt addr (null)], flags:0 SID: 0
MtpServer-2157    [000] d..2  1293.630421: cdns3_ep_queue: ep1out: req: 00000000afbccb7d, req buff 00000000871caf90, length: 0/512 zsi, status: -115, trb: [start:0, end:0: virt addr (null)], flags:0 SID: 0
MtpServer-2157    [000] d..2  1293.630445: cdns3_wa1: WA1: ep1out set guard
MtpServer-2157    [000] d..2  1293.630450: cdns3_wa1: WA1: ep1out restore cycle bit
MtpServer-2157    [000] d..2  1293.630453: cdns3_prepare_trb: ep1out: trb 000000007317b3ee, dma buf: 0xffd5bc00, size: 512, burst: 128 ctrl: 0x00000424 (C=0, T=0, ISP, IOC, Normal) SID:0 LAST_SID:0
MtpServer-2157    [000] d..2  1293.630460: cdns3_doorbell_epx: ep1out, ep_trbaddr ffd50414
	....
irq/241-5b13000-2154    [000] d..1  1293.680849: cdns3_epx_irq: IRQ for ep1out: 01000408 ISP , ep_traddr: ffd508ac ep_last_sid: 00000000 use_streams: 0
irq/241-5b13000-2154    [000] d..1  1293.680858: cdns3_complete_trb: ep1out: trb 0000000021a11b54, dma buf: 0xffd50420, size: 16384, burst: 128 ctrl: 0x00001810 (C=0, T=0, CHAIN, LINK) SID:0 LAST_SID:0
irq/241-5b13000-2154    [000] d..1  1293.680865: cdns3_request_handled: Req: 00000000afbccb7d not handled, DMA pos: 185, ep deq: 88, ep enq: 185, start trb: 184, end trb: 184

Actually DMA pos already bigger than previous submit request afbccb7d's TRB (184-184). The reason of (not handled) is that deq position is wrong.

The TRB link is below when irq happen.

	DEQ LINK LINK LINK LINK LINK .... TRB(afbccb7d):START  DMA(EP_TRADDR).

Original code check LINK TRB, but DEQ just move one step.

	LINK DEQ LINK LINK LINK LINK .... TRB(afbccb7d):START  DMA(EP_TRADDR).

This patch skip all LINK TRB and sync DEQ to trb's start.

	LINK LINK LINK LINK LINK .... DEQ = TRB(afbccb7d):START  DMA(EP_TRADDR).

Acked-by: Peter Chen <peter.chen@kernel.org>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Jun Li <jun.li@nxp.com>
Link: https://lore.kernel.org/r/20211130154239.8029-1-Frank.Li@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-12-03 13:57:22 +01:00
..
accessibility
acpi Merge branch 'acpi-properties' 2021-11-26 19:45:31 +01:00
amba
android binder: fix test regression due to sender_euid change 2021-11-17 16:08:52 +01:00
ata ata: libata-sata: Declare ata_ncq_sdev_attrs static 2021-11-18 14:34:25 +09:00
atm
auxdisplay
base arch_topology: Fix missing clear cluster_cpumask in remove_cpu_topology() 2021-11-11 13:09:33 +01:00
bcma pci-v5.16-changes 2021-11-06 14:36:12 -07:00
block vhost,virtio,vdpa: bugfixes 2021-11-28 11:58:52 -08:00
bluetooth
bus - Config updates for BMIPS platform 2021-11-13 09:11:33 -08:00
cdrom
char
clk Devicetree fixes for v5.16, take 1: 2021-11-14 11:11:51 -08:00
clocksource
comedi
connector
counter
cpufreq cpufreq: intel_pstate: ITMT support for overclocked system 2021-11-23 14:11:18 +01:00
cpuidle
crypto pci-v5.16-changes 2021-11-06 14:36:12 -07:00
cxl cxl for v5.16 2021-11-08 11:49:48 -08:00
dax
dca
devfreq Merge branches 'pm-opp' and 'pm-cpufreq' 2021-11-10 14:06:51 +01:00
dio
dma dmaengine updates for v5.16-rc1 2021-11-10 11:47:55 -08:00
dma-buf drm next/fixes for 5.16-rc1 2021-11-12 12:11:07 -08:00
edac
eisa
extcon
firewire SCSI misc on 20211105 2021-11-05 08:42:02 -07:00
firmware firmware: smccc: Fix check for ARCH_SOC_ID not implemented 2021-11-22 11:42:59 +01:00
fpga
fsi
gnss
gpio gpio: rockchip: needs GENERIC_IRQ_CHIP to fix build errors 2021-11-16 09:41:44 +01:00
gpu xen: branch for v5.16-rc3 2021-11-26 09:54:13 -08:00
greybus
hid HID: multitouch: Fix Iiyama ProLite T1931SAW (0eef:0001 again!) 2021-11-19 16:00:21 +01:00
hsi
hv Drivers: hv: balloon: Use VMBUS_RING_SIZE() wrapper for dm_ring_size 2021-11-15 12:35:56 +00:00
hwmon Merge branch 'akpm' (patches from Andrew) 2021-11-06 14:08:17 -07:00
hwspinlock
hwtracing
i2c i2c: virtio: disable timeout handling 2021-11-23 10:55:48 +01:00
i3c
idle
iio chrome platform changes for 5.16 2021-11-10 11:36:43 -08:00
infiniband RDMA/nldev: Check stat attribute before accessing it 2021-11-17 16:45:16 -04:00
input xen: add "not_essential" flag to struct xenbus_driver 2021-11-23 13:41:29 -06:00
interconnect
iommu iommu/vt-d: Fix unmap_pages support 2021-11-26 22:54:47 +01:00
ipack
irqchip irqchip/sifive-plic: Fixup EOI failed when masked 2021-11-12 16:09:51 +00:00
isdn
leds
macintosh Merge branch 'akpm' (patches from Andrew) 2021-11-06 14:08:17 -07:00
mailbox
mcb
md for-5.16/drivers-2021-11-09 2021-11-09 11:24:08 -08:00
media media fixes for v5.16-rc3 2021-11-22 14:58:57 -08:00
memory memory: mtk-smi: Fix a null dereference for the ostd 2021-11-25 14:46:00 +01:00
memstick
message pci-v5.16-changes 2021-11-06 14:36:12 -07:00
mfd chrome platform changes for 5.16 2021-11-10 11:36:43 -08:00
misc More ACPI updates for 5.16-rc1 2021-11-10 11:52:40 -08:00
mmc mmc: spi: Add device-tree SPI IDs 2021-11-23 12:32:28 +01:00
most
mtd for-5.16/drivers-2021-11-09 2021-11-09 11:24:08 -08:00
mux
net vhost,virtio,vdpa: bugfixes 2021-11-28 11:58:52 -08:00
nfc nfc: virtual_ncidev: change default device permissions 2021-11-26 11:14:31 -08:00
ntb
nubus
nvdimm libnvdimm for v5.16 2021-11-10 10:56:02 -08:00
nvme nvmet: use IOCB_NOWAIT only if the filesystem supports it 2021-11-25 15:02:40 +01:00
nvmem
of Devicetree fixes for v5.16, take 1: 2021-11-14 11:11:51 -08:00
opp
parisc
parport
pci A set of fixes for the interrupt subsystem: 2021-11-14 10:38:27 -08:00
pcmcia
perf
phy
pinctrl pinctrl: qcom: sm8350: Correct UFS and SDC offsets 2021-11-16 02:19:15 +01:00
platform Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid 2021-11-24 09:44:13 -08:00
pnp
power
powercap powercap: DTPM: Fix suspend failure and kernel warning 2021-11-10 21:18:14 +01:00
pps
ps3
ptp ptp: ocp: Fix a couple NULL vs IS_ERR() checks 2021-11-18 12:12:55 +00:00
pwm
rapidio rapidio: avoid bogus __alloc_size warning 2021-11-06 13:30:33 -07:00
ras
regulator - Remove Drivers 2021-11-08 12:07:52 -08:00
remoteproc
reset
rpmsg remoteproc updates for v5.16 2021-11-10 09:07:26 -08:00
rtc RTC for 5.16 2021-11-12 11:44:31 -08:00
s390 s390: replace snprintf in show functions with sysfs_emit 2021-11-16 12:29:19 +01:00
sbus
scsi vhost,virtio,vdpa: bugfixes 2021-11-28 11:58:52 -08:00
sh
siox
slimbus
soc Merge branch 'exit-cleanups-for-v5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2021-11-10 16:15:54 -08:00
soundwire
spi spi: Fixes for v5.16 2021-11-18 14:35:41 -08:00
spmi
ssb
staging staging: rtl8192e: Fix use after free in _rtl92e_pci_disconnect() 2021-11-17 14:08:57 +01:00
target scsi: target: configfs: Delete unnecessary checks for NULL 2021-11-18 23:07:02 -05:00
tc
tee optee: fix kfree NULL pointer 2021-11-16 14:41:23 +01:00
thermal Merge branch 'thermal-int340x' 2021-11-18 20:40:28 +01:00
thunderbolt
tty xen: flag hvc_xen to be not essential for system boot 2021-11-23 13:42:08 -06:00
uio
usb usb: cdns3: gadget: fix new urb never complete if ep cancel previous requests 2021-12-03 13:57:22 +01:00
vdpa vdpa_sim: avoid putting an uninitialized iova_domain 2021-11-24 19:00:29 -05:00
vfio
vhost vhost-vdpa: clean irqs before reseting vdpa device 2021-11-24 19:00:28 -05:00
video xen: branch for v5.16-rc3 2021-11-26 09:54:13 -08:00
virt
virtio Revert "virtio_ring: validate used buffer length" 2021-11-24 18:47:27 -05:00
visorbus
vlynq
vme
w1
watchdog linux-watchdog 5.16-rc1 tag 2021-11-10 09:41:22 -08:00
xen xen: detect uninitialized xenbus in xenbus_init 2021-11-24 08:55:15 -06:00
zorro
Kconfig
Makefile