From: Hans de Goede <hdegoede@redhat.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-usb@vger.kernel.org
Subject: Re: How to set USB_PORT_QUIRK_OLD_SCHEME on an usb-port ?
Date: Fri, 2 Oct 2020 22:10:52 +0200 [thread overview]
Message-ID: <db64c49e-6e1a-c12d-7340-e88edb06c30e@redhat.com> (raw)
In-Reply-To: <20200917200949.GC1099735@rowland.harvard.edu>
Hi,
On 9/17/20 10:09 PM, Alan Stern wrote:
> 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.
So I tried this and it does not work, the problem is that
dev_uevent_filter() from drivers/base/core.c
filters out uevents for anything which is not either a device
on a bus or a class device:
static int dev_uevent_filter(struct kset *kset, struct kobject *kobj)
{
struct kobj_type *ktype = get_ktype(kobj);
if (ktype == &device_ktype) {
struct device *dev = kobj_to_dev(kobj);
if (dev->bus)
return 1;
if (dev->class)
return 1;
}
return 0;
}
(as mentioned this is a low priority thing for me, so hence
the long time between replies)
Regards,
Hans
next prev parent reply other threads:[~2020-10-02 20:11 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-05 11:37 How to set USB_PORT_QUIRK_OLD_SCHEME on an usb-port ? Hans de Goede
2020-09-06 2:22 ` Alan Stern
2020-09-10 13:58 ` Hans de Goede
2020-09-10 15:41 ` Alan Stern
2020-09-17 17:27 ` Hans de Goede
2020-09-17 20:09 ` Alan Stern
2020-10-02 20:10 ` Hans de Goede [this message]
2020-10-02 20:12 ` Hans de Goede
2020-10-03 1:26 ` Alan Stern
2020-10-03 7:52 ` Greg Kroah-Hartman
2020-10-03 11:09 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=db64c49e-6e1a-c12d-7340-e88edb06c30e@redhat.com \
--to=hdegoede@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).