Skip to contentSkip to conversation

usb: gadget: musb: fix short isoc packets with inventra dma

PATCH Superseded Bin Liu 1 participant 1 message Jan 30, 2019 USB

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

Bin Liu

author
#0 lore raw

PATCH 1/1 usb: gadget: musb: fix short isoc packets with inventra dma

Greg,

Quoted 25 lines · Greg Kroah-Hartman
Quoted 24 lines · Bin Liu

From: Paul Elder <[email protected]>

Handling short packets (length < max packet size) in the Inventra DMA engine in the MUSB driver causes the MUSB DMA controller to hang. An example of a problem that is caused by this problem is when streaming video out of a UVC gadget, only the first video frame is transferred.

For short packets (mode-0 or mode-1 DMA), MUSB_TXCSR_TXPKTRDY must be set manually by the driver. This was previously done in musb_g_tx (musb_gadget.c), but incorrectly (all csr flags were cleared, and only MUSB_TXCSR_MODE and MUSB_TXCSR_TXPKTRDY were set). Fixing that problem allows some requests to be transferred correctly, but multiple requests were often put together in one USB packet, and caused problems if the packet size was not a multiple of 4. Instead, set MUSB_TXCSR_TXPKTRDY in dma_controller_irq (musbhsdma.c), just like host mode transfers.

This topic was originally tackled by Nicolas Boichat [0] [1] and is discussed further at [2] as part of his GSoC project [3].

[0] https://groups.google.com/forum/?hl=en#!topic/beagleboard-gsoc/k8Azwfp75CU
[1] https://gitorious.org/beagleboard-usbsniffer/beagleboard-usbsniffer-kernel/commit/b0be3b6cc195ba732189b04f1d43ec843c3e54c9?p=beagleboard-usbsniffer:beagleboard-usbsniffer-kernel.git;a=patch;h=b0be3b6cc195ba732189b04f1d43ec843c3e54c9
[2] http://beagleboard-usbsniffer.blogspot.com/2010/07/musb-isochronous-transfers-fixed.html
[3] http://elinux.org/BeagleBoard/GSoC/USBSniffer

Quoted 4 lines
Quoted 2 lines

No "Fixes:" tag?

This patch changes the logic which was there in the very first commit of the musb drivers more than a decade ago, so it seems the issue was there from day one. I didn't add the 'Fixes:' tag, was thinking it doesn't add any value.

Do you want me to add it?

	Fixes: 550a7375fe72 ("USB: Add MUSB and TUSB support")
Quoted 2 lines

No need for stable?

The patch might not be applied on stable cleanly. I was thinking to send out backport patches for applicable stable trees once this patch got in v5.0 -rc.

Quoted 2 lines

That seems odd...

Indeed, this is a forward-port from 2.6.34.

Regards,
-Bin.