linux/drivers/usb
Pawel Laszczak 573aff747e usb:cdns3 Fix for stuck packets in on-chip OUT buffer.
Controller for OUT endpoints has shared on-chip buffers for all incoming
packets, including ep0out. It's FIFO buffer, so packets must be handled
by DMA in correct order. If the first packet in the buffer will not be
handled, then the following packets directed for other endpoints and
functions will be blocked.

Additionally the packets directed to one endpoint can block entire on-chip
buffers. In this case transfer to other endpoints also will blocked.

To resolve this issue after raising the descriptor missing interrupt
driver prepares internal usb_request object and use it to arm DMA
transfer.

The problematic situation was observed in case when endpoint has
been enabled but no usb_request were queued. Driver try detects
such endpoints and will use this workaround only for these endpoint.

Driver use limited number of buffer. This number can be set by macro
CDNS_WA2_NUM_BUFFERS.

Such blocking situation was observed on ACM gadget. For this function
host send OUT data packet but ACM function is not prepared for
this packet. It's cause that buffer placed in on chip memory block
transfer to other endpoints.

Issue has been fixed for DEV_VER_V2 version of controller.

Signed-off-by: Pawel Laszczak <pawell@cadence.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
2019-07-03 10:46:07 +03:00
..
atm USB: atm: ueagle-atm.c: remove redundant license text 2019-06-03 15:21:57 +02:00
c67x00 USB: add SPDX identifiers to all remaining Makefiles 2017-11-07 15:53:48 +01:00
cdns3 usb:cdns3 Fix for stuck packets in on-chip OUT buffer. 2019-07-03 10:46:07 +03:00
chipidea usb: chipidea: msm: get optional clock by devm_clk_get_optional() 2019-04-19 14:24:26 +02:00
class usb: cdc-wdm: remove redundant assignment to rv 2019-06-03 15:21:56 +02:00
common USB: move usb debugfs directory creation to the usb common core 2019-06-06 08:59:19 +02:00
core Merge 5.2-rc5 into usb-next 2019-06-17 11:23:24 +02:00
dwc2 Revert "usb: dwc2: host: Setting qtd to NULL after freeing it" 2019-06-18 11:58:29 +03:00
dwc3 usb:gadget Separated decoding functions from dwc3 driver. 2019-07-03 10:45:58 +03:00
early drivers: Remove explicit invocations of mmiowb() 2019-04-08 12:01:02 +01:00
gadget usb:gadget Simplify usb_decode_get_set_descriptor function. 2019-07-03 10:46:03 +03:00
host usb: host: u132-hcd: remove unneeded variable frame 2019-06-06 08:59:19 +02:00
image USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
isp1760 usb: isp1760-hcd: Fix fall-through annotations 2019-05-01 18:13:52 +02:00
misc USB: sisusbvga: Remove unneeded variable 2019-06-10 18:03:09 +02:00
mon USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
mtu3 Revert "usb: mtu3: fix up undefined reference to usb_debug_root" 2019-06-10 19:43:57 +02:00
musb usb: musb: dsps: Use dev_get_drvdata() 2019-04-30 17:55:08 +02:00
phy Merge 5.2-rc5 into usb-next 2019-06-17 11:23:24 +02:00
renesas_usbhs usb: renesas_usbhs: remove controlling PWEN/EXTLP support 2019-06-05 11:54:38 +02:00
roles usb: roles: Find the muxes by also matching against the device node 2019-02-14 10:52:25 +01:00
serial USB: serial: option: add Telit 0x1260 and 0x1261 compositions 2019-05-21 11:27:24 +02:00
storage USB: usb-storage: Add new ID to ums-realtek 2019-06-05 11:52:42 +02:00
typec Merge 5.2-rc5 into usb-next 2019-06-17 11:23:24 +02:00
usbip usbip: Replace unused kvec array with single variable in vhci_send_cmd_unlink() 2019-06-05 11:54:38 +02:00
wusbcore wusb: Remove unnecessary static function ckhdid_printf 2019-03-01 20:53:41 +01:00
Kconfig usb:cdns3 Add Cadence USB3 DRD Driver 2019-07-03 10:46:05 +03:00
Makefile usb:cdns3 Add Cadence USB3 DRD Driver 2019-07-03 10:46:05 +03:00
usb-skeleton.c usb: usb-skeleton: use irqsave() in USB's complete callback 2018-06-28 19:36:06 +09:00