Re: XHCI unplug of USB-C device is not detected

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

 



On Fri, 5 Nov 2021, Mathias Nyman wrote:

> Hi

Hi, thanks for your help.

[...] 
> > Plugging in the webcam produces the dmesg below.
> > 
> > But unplugging simply results in no activity -- zero output in dmesg. Same 
> > when plugging in again.
> > 
> > After unplugging the device is still listed:
> > 
> >   $ lsusb
> >   Bus 004 Device 002: ID 046d:0893  Logitech StreamCam
> >   Bus 004 Device 001: ID 1d6b:0003 Linux 5.14.2-mh xhci-hcd xHCI Host Controller
> >   Bus 003 Device 001: ID 1d6b:0002 Linux 5.14.2-mh xhci-hcd xHCI Host Controller
> >   Bus 002 Device 001: ID 1d6b:0003 Linux 5.14.2-mh xhci-hcd xHCI Host Controller
> >   Bus 001 Device 007: ID 046d:c52f Logitech USB Receiver
> >   Bus 001 Device 006: ID 056a:037b Wacom Co.,Ltd. CTL-672
> >   Bus 001 Device 005: ID 1a40:0101  USB 2.0 Hub
> >   Bus 001 Device 004: ID 04d9:0340  USB-HID Keyboard
> >   Bus 001 Device 003: ID 04d9:0339  USB-HID Keyboard
> >   Bus 001 Device 002: ID 1a40:0101  USB 2.0 Hub
> >   Bus 001 Device 001: ID 1d6b:0002 Linux 5.14.2-mh xhci-hcd xHCI Host Controller
> 
> how about "lsusb -v"?
> It should try to read something from the device.

It seems to be populated with information from the webcam:

  # lsusb -v
  Couldn't open device, some information will be missing

  Bus 004 Device 002: ID 046d:0893  Logitech StreamCam
  Device Descriptor:
    bLength                18
    bDescriptorType         1
    bcdUSB               3.20
    bDeviceClass          239
  [...]

but then on a second run, the webcam is removed from lsusb output.
Plugging it in again still has no effect.

[...]
> Normally xHC generates an interrupt at connect change, and the interrupt
> handler reads the port status, and prints a debugging message.
> 
> We could manually read all the port registers before and after disconnecting.
> Check link state, and that the wake flags look ok in case device is suspended
> 
> Example:
> # cat /sys/kernel/debug/usb/xhci/0000\:00\:14.0/ports/port*/portsc
> Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: 
> Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: 
> Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: 
> Powered Connected Enabled Link:U0 PortSpeed:3 Change: Wake: 
> Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: 
> ...

There's no difference in the output before or after disconnecting the 
camera:

  stax# cat /sys/kernel/debug/usb/xhci/*/ports/port*/portsc
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Connected Enabled Link:U0 PortSpeed:3 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: WCE WOE
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: WCE WOE
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: WCE WOE
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: WCE WOE
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: WCE WOE
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: WCE WOE
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: WCE WOE
  Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake: WCE WOE
  Powered Connected Enabled Link:Resume PortSpeed:15 OverCurrent In-Reset Change: CSC PEC WRC OCC PRC PLC CEC CAS Wake: WCE WDE WOE
  Powered Connected Enabled Link:Resume PortSpeed:15 OverCurrent In-Reset Change: CSC PEC WRC OCC PRC PLC CEC CAS Wake: WCE WDE WOE
  Powered Connected Enabled Link:Resume PortSpeed:15 OverCurrent In-Reset Change: CSC PEC WRC OCC PRC PLC CEC CAS Wake: WCE WDE WOE
  Powered Connected Enabled Link:Resume PortSpeed:15 OverCurrent In-Reset Change: CSC PEC WRC OCC PRC PLC CEC CAS Wake: WCE WDE WOE

> Also see if disabling runtime suspend for both roothubs helps:
> # echo on > /sys/bus/usb/devices/usb1/power/control
> # echo on > /sys/bus/usb/devices/usb2/power/control

Yes, it helps. I pinpointed it on usb3. The webcam can now be plugged and 
re-plugged. It also survives a suspend/resume of the machine now and I can 
see the change in portsc:

  -Powered Connected Enabled Link:U3 PortSpeed:4 Change: Wake:
  +Powered Not-connected Disabled Link:RxDetect PortSpeed:0 Change: Wake:

So it seems this is a workaround -- thank you.

Is it worth getting to the root of this problem (and can I capture any 
data to help?) or is it just that some devices are buggy?

Many thanks,

-- 
Mark



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

  Powered by Linux