[Steam Deck] USB-C DRD makes all external USB comms unavailable on latest Linux kernel
Brief summary of the problem:
Since the last kernel updates (6.5.8/9 to 6.5.11) to Bazzite on my Steam Deck running on their latest F7A0118/0119 BIOS, if I leave USB DRD mode on by default as before I will not get any USB comms with the integrated USB-C port. In the OS, the two USB controllers in the deck that are dedicated to the USB-C port will not get enumerated in lsusb, and therefore no external communication will happen. As soon as I switch back to XHCI everything start to work normally again. Mind you that up to a couple of days ago I had enabled DRD as by default and I did not experience any of the issues reported, so I'm really not sure what did cause this issue (If it's a kernel bug, if it's a late BIOS bug that appeared randomly or a bug in the latest firmware of the Steam Deck Dock (.121 released two weeks ago)).
If I have enabled DRD mode, I can get bootable peripherals when opening the boot menu no problem, but as soon as I reach Linux all comms are dead (in fact, even the external roots hub are missing, the internal one for bluetooth and integrated controller are still present and working). However USB-C Video out to the external monitor still works 100% correctly without any issues.
I've tried to downgrade back to the previous working 0118, reset the BIOS, load factory defaults, fully reset PD contracts beetween the Dock and the Deck to no results.
I've just tested a random USB stick with a Windows recovery environment while leaving DRD enabled and it booted 100% fine. All USB ports and the integrated ethernet adapter was correctly enumerating and working (mind you that I didn't have any GPU driver loaded, so that might have a factor in this), so this makes me think that it's either a firmware regression or a kernel one, but I'm more leaning towards a kernel issue at this point.
In case this is a firmware bug I've opened an issue in the Valve Github repo, but as of today noone has pitched in yet.
Let me know what logs you need to debug it further.
Hardware description:
- CPU: AMD Custom CPU 0405
- GPU: 04:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] VanGogh [AMD Custom GPU 0405] [1002:163f] (rev ae)
- System Memory: 16 GB 5500
- Display(s): The integrated 800P display and a MSI MAG274QRF-QD 144 Hz connected to the HDMI output from the Steam Deck Dock
- Type of Display Connection: eDP to MIPI converter for the integrated one, DP to HDMI (? Guessing here, not sure on the display output architecture from the dock) for the external one.
System information:
- Distro name and Version: Fedora Kinoite 39 Immutable (Bazzite based)
- Kernel version: Linux DeckDiMarco 6.5.11-300.fc39.x86_64 #1 (closed) SMP PREEMPT_DYNAMIC Wed Nov 8 22:37:57 UTC 2023 x86_64 GNU/Linux
- Custom kernel: N/A
- AMD official driver version: N/A
How to reproduce the issue:
Running the latest version of Bazzite on a Steam Deck on BIOS 0119 with DRD enabled is enough to reproduce the problem for me. Not sure which path is easier to test this further. I'll probably test with a Windows USB OTG to try to exclude as much hardware and firmware as possible. It's the kernel with this commit that caused the regression here