On Thu, Sep 17, 2020 at 07:27:03PM +0200, Hans de Goede wrote: > Hi, > > On 9/10/20 5:41 PM, Alan Stern wrote: > > On Thu, Sep 10, 2020 at 03:58:49PM +0200, Hans de Goede wrote: > > > Hi, > > > > > > On 9/6/20 4:22 AM, Alan Stern wrote: > > > > On Sat, Sep 05, 2020 at 01:37:38PM +0200, Hans de Goede wrote: > > > > > Hi All, > > > > > > > > > > I have been debugging an issue with a 2-in-1 which > > > > > consists of a tablet + a kbd-dock, where the device > > > > > turns into a clamshell when docked into the kbd-dock. > > > > > > > > > > The kbd dock is connected via pogo-pins. This works > > > > > fine when docked at boot. But there is an enumeration > > > > > issue when hot-docked (and the keyboard looses power > > > > > when the lid is closedm so this also triggers after > > > > > a suspend/resume): > > > > > > > > > > [ 3498.924190] usb 1-3: new full-speed USB device number 5 using xhci_hcd > > > > > [ 3499.041725] usb 1-3: device descriptor read/64, error -71 > > > > > [ 3515.215890] usb 1-3: device descriptor read/64, error -110 > > > > > [ 3515.440369] usb 1-3: new full-speed USB device number 6 using xhci_hcd > > > > > [ 3515.603544] usb 1-3: New USB device found, idVendor=06cb, idProduct=73f5, bcdDevice= 0.02 > > > > > [ 3515.603574] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 > > > > > [ 3515.603596] usb 1-3: Product: ITE Device(8910) > > > > > [ 3515.603614] usb 1-3: Manufacturer: ITE Tech. Inc. > > > > > > > > > > Note there is about 6 seconds before the keyboard becomes > > > > > usable, which is quite long when trying to unlock the > > > > > laptop after opening the lid. > > > > > > > > > > If I set the USB_PORT_QUIRK_OLD_SCHEME on the port used by the kbd-dock: > > > > > > > > > > echo 1 > /sys/devices/pci0000\:00/0000\:00\:14.0/usb1/1-0\:1.0/usb1-port3/quirks > > > > > > > > > > Then this changes to: > > > > > > > > > > [ 4467.875008] usb 1-3: new full-speed USB device number 7 using xhci_hcd > > > > > [ 4467.878483] usb 1-3: Device not responding to setup address. > > > > > [ 4468.082476] usb 1-3: Device not responding to setup address. > > > > > [ 4468.289990] usb 1-3: device not accepting address 7, error -71 > > > > > [ 4468.614928] usb 1-3: new full-speed USB device number 8 using xhci_hcd > > > > > [ 4468.662392] usb 1-3: New USB device found, idVendor=06cb, idProduct=73f5, bcdDevice= 0.02 > > > > > [ 4468.662423] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 > > > > > [ 4468.662444] usb 1-3: Product: ITE Device(8910) > > > > > [ 4468.662461] usb 1-3: Manufacturer: ITE Tech. Inc. > > > > > > > > > > Which is a lot better wrt making the keyboard available for > > > > > use in a timely manner. > > > > > > > > > > So now I'm looking into a way to automatically do this. I would > > > > > prefer to keep the handling of this out of the kernel, so I looked into > > > > > udev, but it seems that the usb_port_device_type device-s registered by > > > > > usb_hub_create_port_device() are not visible to udev? > > > > > > > > > > At least I'm not seeing them, in the output of "udevadm info -e" > > > > > > > > My impression is that fixing this would be the simplest approach. > > > > > > I agree that first trying to fix it is a good idea. > > <snip> > > > > > Have you tried decreasing the initial_descriptor_timeout module > > > > parameter for usbcore? That would probably help, but it's kind of a > > > > sledgehammer. > > > > > > So I tried this: > > > > > > [root@localhost ~]# cat /sys/module/usbcore/parameters/initial_descriptor_timeout > > > 1000 > > > > > > But it does not really seem to help: > > > > > > [ 1171.435346] usb 1-3: USB disconnect, device number 2 > > > [ 1180.430958] usb 1-3: new full-speed USB device number 3 using xhci_hcd > > > [ 1180.551543] usb 1-3: device descriptor read/64, error -71 > > > [ 1184.045548] usb 1-3: device descriptor read/64, error -110 > > > [ 1184.270924] usb 1-3: new full-speed USB device number 4 using xhci_hcd > > > [ 1184.438336] usb 1-3: New USB device found, idVendor=06cb, idProduct=73f5, bcdDevice= 0.02 > > > [ 1184.438371] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 > > > [ 1184.438399] usb 1-3: Product: ITE Device(8910) > > > [ 1184.438425] usb 1-3: Manufacturer: ITE Tech. Inc. > > > > That part of hub.c is a real mess. Coincidentally, I just posted a > > patch to try and fix it up a bit: > > > > https://marc.info/?l=linux-usb&m=159959185227447&w=2 > > Ok, I've applied the patch and tried again (with initial_descriptor_timeout still set to 1000), > so now the log from the reconnect looks look this: > > [ 1157.248439] usb 1-3: new full-speed USB device number 3 using xhci_hcd > [ 1157.254234] usb 1-3: device descriptor read/64, error -71 > [ 1157.371442] usb 1-3: new full-speed USB device number 4 using xhci_hcd > [ 1158.377895] usb 1-3: device descriptor read/64, error -110 > [ 1158.379646] usb usb1-port3: attempt power cycle > [ 1159.014480] usb 1-3: new full-speed USB device number 5 using xhci_hcd > [ 1159.176112] usb 1-3: New USB device found, idVendor=06cb, idProduct=73f5, bcdDevice= 0.02 > [ 1159.176138] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 > [ 1159.176156] usb 1-3: Product: ITE Device(8910) > [ 1159.176172] usb 1-3: Manufacturer: ITE Tech. Inc. > > Still a bit slower then the old probe method, but much better then the > new probe method with the default initial_descriptor_timeout. Yeah, okay, it's good to see that the patch helps. But I'm doubtful that the change it makes will become part of the standard (i.e., not for embedded systems) kernel. I still think the udev approach will be best. That will require adding various *_uevent_* calls in usb_hub_create_port_device, and adding a .uevent member to usb_port_device_type. > > If you apply that along with module parameter change, does it make any > > difference? > > > > (Or maybe you don't care to pursue this course and would prefer to work > > on the udev approach...) > > No, I would like to see this fixed properly in the kernel, but this is > somewhat low on my prioritry list, esp. during workdays, so that why I'm > a bit slow with responding, sorry. No problem. Alan Stern