[BUG REPORT] usb: dwc3: Transaction Error while doing iso output
Steve Brown
sbrown at opensat.com
Sun Sep 8 10:34:46 PDT 2024
Hi Felipe,
The problem was encountered using the wsjtx packet radio program in
conjunction with a Yaesu FT-710 ham radio transceiver. The FT-710 has a
dual uart and sound device behind an internal hub. The uarts are used
to control the radio frequency and switch between transmit and receive.
The sound device is used for transmit and receive audio.
The uarts and sound device receive (input) function as expected, but
the transmit (output) fails.
I distilled the failure to the following scenario:
1. Using aplay to send a short file to the sound output succeeds.
2. Opening one of the uarts via "cat /dev/ttyUSB0" and then sending the
sound file fails.
Wireshark reports the iso transmit failure as Protocol Error (-71).
Ftrace of xhci reports it as a Transaction Error (0x04) returned by the
dwc3 controller.
I have tested this on a RPi4b and RPi5 as well as a several Rockchip
boards. All fail.
The dwc2 controllers on the USB-C connector on both the RPi4b and RPi5
do not exhibit this problem. Nor does the dwc2 controller on the RPi3b.
The Intel Comet Lake USB3.0 controller on my desktop machine succeeds
as well.
GSPNSID values for the various boards:
RPi5 is 5533330b BCM2712 / USB:RP1
RPi4b is 4f54280a BCM2711 / USB:VL805
OPi5Pro is 5533300a RK3588S USB:soc
OPi3 is 5533300a RK3566 USB:soc
If I insert a USB1.1 hub prior to the radio, the iso output succeeds.
Below is the usb tree. The board is an RPi5 running kernel 6.11.0-rc6
from https://github.com/raspberrypi/linux.git
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/2p, 480M
ID 1d6b:0002 Linux Foundation 2.0 root hub
|__ Port 2: Dev 27, If 0, Class=Hub, Driver=hub/4p, 480M
ID 04b4:6560 Cypress Semiconductor Corp. CY7C65640 USB-2.0 "TetraHub"
|__ Port 1: Dev 28, If 0, Class=Vendor Specific Class, Driver=cp210x, 12M
ID 10c4:ea70 Silicon Labs CP2105 Dual UART Bridge
|__ Port 1: Dev 28, If 1, Class=Vendor Specific Class, Driver=cp210x, 12M
ID 10c4:ea70 Silicon Labs CP2105 Dual UART Bridge
|__ Port 2: Dev 29, If 0, Class=Audio, Driver=snd-usb-audio, 12M
ID 0d8c:0013 C-Media Electronics, Inc.
|__ Port 2: Dev 29, If 3, Class=Human Interface Device, Driver=usbhid, 12M
ID 0d8c:0013 C-Media Electronics, Inc.
|__ Port 2: Dev 29, If 1, Class=Audio, Driver=snd-usb-audio, 12M
ID 0d8c:0013 C-Media Electronics, Inc.
|__ Port 2: Dev 29, If 2, Class=Audio, Driver=snd-usb-audio, 12M
ID 0d8c:0013 C-Media Electronics, Inc.
I have the wireshark pcap and the ftrace, but I'm not sure how to get
the reg dump at the instant of the error. I can post these files if you
think they would be useful. However, this appears to be a problem with
the controller, not the driver.
Lastly, I have one of the Taradov usb sniffers. When I hook it up and
attempt to see what's on the wire, the behavior changes and all I get
is continuous log of:
Sep 06 09:21:58 wsjtx kernel: usb 3-2: clear tt 1 (9021) error -71
I have the sniffer output from the above and can post it if you think it's useful.
The sniffer performs as expected on my desktop machine.
Do you have a suggestion of how to proceed?
Steve WA9OLA
More information about the linux-rpi-kernel
mailing list