WSL2-Linux-Kernel/drivers/usb/dwc2
John Keeping 644139f8b6 usb: dwc2: Fix IN FIFO allocation
On chips with fewer FIFOs than endpoints (for example RK3288 which has 9
endpoints, but only 6 which are cabable of input), the DPTXFSIZN
registers above the FIFO count may return invalid values.

With logging added on startup, I see:

	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=1 sz=256
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=2 sz=128
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=3 sz=128
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=4 sz=64
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=5 sz=64
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=6 sz=32
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=7 sz=0
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=8 sz=0
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=9 sz=0
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=10 sz=0
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=11 sz=0
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=12 sz=0
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=13 sz=0
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=14 sz=0
	dwc2 ff580000.usb: dwc2_hsotg_init_fifo: ep=15 sz=0

but:

	# cat /sys/kernel/debug/ff580000.usb/fifo
	Non-periodic FIFOs:
	RXFIFO: Size 275
	NPTXFIFO: Size 16, Start 0x00000113

	Periodic TXFIFOs:
		DPTXFIFO 1: Size 256, Start 0x00000123
		DPTXFIFO 2: Size 128, Start 0x00000223
		DPTXFIFO 3: Size 128, Start 0x000002a3
		DPTXFIFO 4: Size 64, Start 0x00000323
		DPTXFIFO 5: Size 64, Start 0x00000363
		DPTXFIFO 6: Size 32, Start 0x000003a3
		DPTXFIFO 7: Size 0, Start 0x000003e3
		DPTXFIFO 8: Size 0, Start 0x000003a3
		DPTXFIFO 9: Size 256, Start 0x00000123

so it seems that FIFO 9 is mirroring FIFO 1.

Fix the allocation by using the FIFO count instead of the endpoint count
when selecting a FIFO for an endpoint.

Acked-by: Minas Harutyunyan <hminas@synopsys.com>
Signed-off-by: John Keeping <john@metanate.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-01-15 10:39:21 +01:00
..
Kconfig usb: remove redundant 'default n' from Kconfig-s 2019-05-21 10:06:22 +02:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
core.c usb: dwc2: use a longer core rest timeout in dwc2_core_reset() 2019-10-22 10:42:08 +03:00
core.h usb: Spelling s/enpoint/endpoint/ 2019-11-04 15:53:00 +01:00
core_intr.c usb: dwc2: optionally assert phy reset when waking up 2019-05-03 09:13:47 +03:00
debug.h usb: dwc2: Fix kernel doc's warnings. 2018-05-21 10:02:13 +03:00
debugfs.c usb: dwc2: create debugfs directory under usb root 2019-11-14 11:16:35 +08:00
gadget.c usb: dwc2: Fix IN FIFO allocation 2020-01-15 10:39:21 +01:00
hcd.c usb: dwc2: Fix NULL qh in dwc2_queue_transaction 2020-01-15 10:39:20 +01:00
hcd.h Revert "usb: dwc2: host: Setting qtd to NULL after freeing it" 2019-06-18 11:58:29 +03:00
hcd_ddma.c usb: dwc2: Modify dwc2_readl/writel functions prototype 2018-07-30 10:39:16 +03:00
hcd_intr.c usb: dwc2: host: Fix wMaxPacketSize handling (fix webcam regression) 2019-06-06 13:51:41 +03:00
hcd_queue.c usb: dwc2: host: Fix wMaxPacketSize handling (fix webcam regression) 2019-06-06 13:51:41 +03:00
hw.h usb: dwc2: Move UTMI_PHY_DATA defines closer 2019-05-03 09:13:48 +03:00
params.c usb: dwc2: Switch to use device_property_count_u32() 2019-08-09 08:28:29 +03:00
pci.c usb: dwc2: pci: Fix an error code in probe 2018-11-14 11:07:12 +02:00
platform.c usb: Remove dev_err() usage after platform_get_irq() 2019-07-30 20:29:18 +02:00