Repository navigation
usb: dwc2: regression in split interrupt handling breaks FIDO (YubiKey) behind hub #7282
Copy link
Copy link
Closed
Labels
Close within 30 daysIssue will be closed within 30 days unless requested to stay openIssue will be closed within 30 days unless requested to stay open
Description
Describe the bug
Commit 5329a41 ("usb: dwc2: masquerade split-interrupt transfers") introduces a regression that makes communication with a YubiKey (FIDO2) unreliable to the point of being unusable.
The issue was observed on a ClockworkPi uConsole (CM4-based), where the YubiKey is connected via the internal USB hub.
Symptoms
- HID device enumerates correctly (
/dev/hidrawXexists) - Interrupt transfers intermittently fail
- FIDO operations (CTAPHID) frequently time out
- Userspace tools (e.g.
ykman) fail to communicate reliably
Reverting the above commit restores fully stable operation.
Hardware
- Device: ClockworkPi uConsole (CM4 module)
- USB topology: YubiKey connected via internal hub (Genesys Logic)
- YubiKey: 1050:0407 (YubiKey 5 series)
Steps to reproduce the behaviour
Test preparation
- clone repository, get extra patches for uConsole hardware (display, battery..)
git clone https://github.com/raspberrypi/linux.git wget -O clockworkdrivers1.patch https://github.com/ak-rex/ClockworkPi-linux/commit/5633aedcb3fd632d64c54db0184880d1954de62b.patch wget -O clockworkdrivers2.patch https://github.com/ak-rex/ClockworkPi-linux/commit/4b5b5fe35abbbf4193ddbeab149833172096066b.patch - apply patches to the tree
cd linux git apply ../clockworkdrivers*.patch - compile the kernel
make clean make bcm7211_defconfig make -j$(nproc) Image module dtbs - copy generated dtb, overlays, module and kernel image to microSD card
- boot the uConsole device
- plug in YubiKey to USB and initiate the test procedure:
- run
sudo ykman fido infomultiple times - invoke python script 10 times
- run
Test results
Output with current head + clockwork hw patches:
jose@clockworkpi:~ $ sudo ykman fido info
WARNING: Failed opening device
ERROR: Failed to connect to YubiKey.
jose@clockworkpi:~ $ sudo ykman fido info
WARNING: Failed opening device
ERROR: Failed to connect to YubiKey.
jose@clockworkpi:~ $ for i in $(seq 10); do sudo ./write_test.py ; sleep 1; done
write failed: [Errno 32] Broken pipe
write ok
write failed: [Errno 32] Broken pipe
write ok
write failed: [Errno 32] Broken pipe
write ok
write failed: [Errno 32] Broken pipe
write ok
write failed: [Errno 32] Broken pipe
write ok
Output with current head + clockwork patches + reverted commit 5329a41
jose@clockworkpi:~ $ sudo ykman fido info
AAGUID: 2fc0579f-8113-47ea-b116-bb5a8db9202a
PIN: 8 attempt(s) remaining
Minimum PIN length: 4
jose@clockworkpi:~ $ sudo ykman fido info
AAGUID: 2fc0579f-8113-47ea-b116-bb5a8db9202a
PIN: 8 attempt(s) remaining
Minimum PIN length: 4
jose@clockworkpi:~ $ sudo ykman fido info
AAGUID: 2fc0579f-8113-47ea-b116-bb5a8db9202a
PIN: 8 attempt(s) remaining
Minimum PIN length: 4
jose@clockworkpi:~ $ for i in $(seq 10); do sudo ./write_test.py ; sleep 1; done
write ok
write ok
write ok
write ok
write ok
write ok
write ok
write ok
write ok
write ok
Device (s)
Other, Raspberry Pi CM4 Lite
System
jose@clockworkpi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 13 (trixie)
Release: 13
Codename: trixie
jose@clockworkpi:~ $ cat /etc/rpi-issue
Raspberry Pi reference 2026-02-25
Generated using pi-gen, https://github.com/RPi-Distro/pi-gen, , stage2
jose@clockworkpi:~ $ vcgencmd version
Feb 17 2025 20:03:07
Copyright (c) 2012 Broadcom
version da7125f985dfe3cb0cf91e3c47f1ace88018e466 (clean) (release) (start)
jose@clockworkpi:~ $ uname -a
Linux clockworkpi 6.12.77-v8+ #3 SMP PREEMPT Sat Mar 21 11:58:25 CET 2026 aarch64 GNU/Linux
jose@clockworkpi:~ $ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 005: ID feed:0000 Clockwork uConsole Keyboard
Bus 001 Device 006: ID 1050:0407 Yubico.com Yubikey 4/5 OTP+U2F+CCID
Logs
No response
Additional context
- issue is reproducible 100%
- not observed on earlier kernels
- not resolved by HID quirks
- likely specific to DWC2 + hub + interrupt transfer interaction
Metadata
Metadata
Assignees
Labels
Close within 30 daysIssue will be closed within 30 days unless requested to stay openIssue will be closed within 30 days unless requested to stay open
Activity
P33M commentedon Mar 23, 2026
Please post the full output of
sudo lsusb -v.jose1711 commentedon Mar 26, 2026
yubikey_lsusb_v.txt
P33M commentedon Mar 27, 2026
I think this is a recurrence of a failure case that was fixed in dwc_otg in #2077
Your device uses the same endpoint index for IN/OUT interrupt, but the hub hardware is different to the original issue report. With the FIQ microscheduler it was relatively easy to reschedule transfers to the same TT, but dwc2 will probably need more invasive changes.
usb: dwc2: only masquerade split-IN interrupt transfers
P33M commentedon Mar 27, 2026
Can you try updating with
sudo rpi-update pulls/7290and test. A quick check with a Pi 3B+, dwc2 and keyboard confirms that USB still works, but I don't have any devices with the yubikey's quirk.jose1711 commentedon Mar 30, 2026
I've applied your patch to current head + clockwork patches and recompiled. Then I ran a loop of 20 write tests, 1 second apart, followed by another loop with
ykman fido infocommand.Not a single issue was encountered.
P33M commentedon Mar 31, 2026
Thanks for testing. I've rebased the PR to
rpi-6.18.yas that is now under active development, withrpi-6.12.yonly receiving critical fixes. I would recommend updating your OS to target 6.18.pelwell commentedon Apr 27, 2026
I think this has been dealt with.