Re: XHCI debug device is not detected after debug target enables it

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Sep 22, 2025 at 04:39:47PM +0300, Mathias Nyman wrote:
> On 22.9.2025 6.23, Marek Marczykowski-Górecki wrote:
> > Hi,
> > 
> > I have a setup where XHCI console is used to debug Xen on a laptop.
> > There are two system involved:
> > 1. SUT - an x86 laptop running Xen, and configured to expose
> > console over XHCI debug capability
> > 2. debugger - Raspberry Pi 4B to which the debug cable is connected and
> > where the console can be accessed
> > 
> > The XHCI debug cable is a simple USB3 A-A cable, with D+, D- and Vbus
> > pins cut. When SUT isn't configured to serve debug console (for
> > example during boot while in firmware), debugger complains about
> > connected device, like this:
> > 
> >      usb usb2-port2: config error
> >      usb usb2-port2: Cannot enable. Maybe the USB cable is bad?
> >      usb usb2-port2: Cannot enable. Maybe the USB cable is bad?
> >      usb usb2-port2: Cannot enable. Maybe the USB cable is bad?
> >      usb usb2-port2: Cannot enable. Maybe the USB cable is bad?
> >      usb usb2-port2: attempt power cycle
> >      usb usb2-port2: Cannot enable. Maybe the USB cable is bad?
> >      usb usb2-port2: Cannot enable. Maybe the USB cable is bad?
> >      usb usb2-port2: unable to enumerate USB device
> >      usb usb2-port2: config error
> > 
> > This is expected, as two USB hosts are connected together here. But once
> > Xen starts and configures XHCI debug console, it's supposed to be
> > detected as ttyUSB0. When it works, it looks like this:
> > 
> >      usb 2-2: new SuperSpeed USB device number 11 using xhci_hcd
> >      usb 2-2: LPM exit latency is zeroed, disabling LPM.
> >      usb 2-2: New USB device found, idVendor=1d6b, idProduct=0010, bcdDevice= 0.00
> >      usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> >      usb 2-2: Product: Debug console
> >      usb 2-2: Manufacturer: Xen
> >      usb 2-2: SerialNumber: 0
> >      usb_debug 2-2:1.0: xhci_dbc converter detected
> >      usb 2-2: xhci_dbc converter now attached to ttyUSB0
> > 
> > This worked fine with 5.15.92 (from Raspberry Pi fork) on debugger. It
> > also works fine with RPi debugger replaced with another x86 box
> > (regardless of the kernel version). But after updating RPi to 6.6.78
> > (also RPi fork) it stopped working. Updating further to 6.12.48 (RPi) or
> > even 6.16.7 (vanilla) didn't fixed it either. I didn't test vanilla
> > 5.15, but I find it unlikely it worked only due to some RPi patch
> > before.
> > 
> > When it's broken, SUT waits for the XHCI to enter "configured" state,
> > IIUC in this loop:
> > https://gitlab.com/xen-project/xen/-/blob/staging/xen/drivers/char/xhci-dbc.c?ref_type=heads#L864
> > 
> > There are two options to fix it in this state:
> > - unplugging the cable and plugging it back
> > - _reading_ /sys/bus/usb/devices/usb2/2-0:1.0/usb2-port2/disable
> > 
> > In the latter case, kernel prints this (note the first line):
> > 
> >      xhci_hcd 0000:01:00.0: port 2-2 resume PLC timeout
> >      usb 2-2: new SuperSpeed USB device number 11 using xhci_hcd
> >      usb 2-2: LPM exit latency is zeroed, disabling LPM.
> >      usb 2-2: New USB device found, idVendor=1d6b, idProduct=0010, bcdDevice= 0.00
> >      usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> >      usb 2-2: Product: Debug console
> >      usb 2-2: Manufacturer: Xen
> >      usb 2-2: SerialNumber: 0
> >      usb_debug 2-2:1.0: xhci_dbc converter detected
> >      usb 2-2: xhci_dbc converter now attached to ttyUSB0
> > 
> > I can 100% reliably reproduce the issue on warm reboot. On cold boot
> > usually it works.
> > 
> > Any ideas?
> > 
> 
> Best guess is that the Raspberry PI, debugger xHC is runtime suspended.
> 
> Reconnecting the cable, or reading the port "disable" sysfs entry causes the host
> to resume, run, and detect the connected device.
> 
> The xHCI host is probably allowed to suspend after several failed enumeration attempts,
> which is expected due to the connected device also being in host mode.
> 
> I think runtime pm support was enabled as default for most xHCI hosts around late 5.x,
> early 6.x kernels, so that would fit.

This would kinda match also that "usb usb2-port2: Cannot enable"
messages stop appearing after some time.

> Does preventing the roothub, and thus the host from runtime suspend help:
> 
> On the Raspberry Pi debugger:
> echo on > /sys/bus/usb/devices/usb2/power/control

I tried that on the port before, but not on the root hub. Now tried on
the root hub as you shown above, but unfortunately it didn't help.

I tried also setting /sys/bus/usb/devices/usb2/power/autosuspend to -1,
didn't help either.

After this change, just reading the disable file is not enough, I need
to write 1 and then 0 to it...

-- 
Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux