Re: [RFC PATCH 6/8] usb: xhci: Fix port minor revision

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

 



David Laight wrote:
> From: Thinh Nguyen
>> Sent: 03 February 2021 01:16
>>
>> Sergei Shtylyov wrote:
>>> Hello!
>>>
>>> On 02.02.2021 6:42, Thinh Nguyen wrote:
>>>
>>>> Some hosts incorrectly use sub-minor version for minor version (i.e.
>>>> 0x02 instead of 0x20 for bcdUSB 0x320 and 0x01 for bcdUSB 0x310).
>>>> Currently the xHCI driver works around this by just checking for minor
>>>> revision > 0x01 for USB 3.1 everywhere. With the addition of USB 3.2,
>>>> checking this gets a bit cumbersome. Since there is no USB release with
>>>> bcdUSB 0x301 to 0x309, we can assume that sub-minor version 01 to 09 is
>>>> incorrect. Let's try to fix this and use the minor revision that matches
>>>> with the USB/xHCI spec to help with the version checking within the
>>>> driver.
>>>>
>>>> Signed-off-by: Thinh Nguyen <Thinh.Nguyen@xxxxxxxxxxxx>
>>>> ---
>>>>   drivers/usb/host/xhci-mem.c | 9 +++++++++
>>>>   1 file changed, 9 insertions(+)
>>>>
>>>> diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
>>>> index f2c4ee7c4786..34105b477c62 100644
>>>> --- a/drivers/usb/host/xhci-mem.c
>>>> +++ b/drivers/usb/host/xhci-mem.c
>>>> @@ -2129,6 +2129,15 @@ static void xhci_add_in_port(struct xhci_hcd
>>>> *xhci, unsigned int num_ports,
>>>>         if (major_revision == 0x03) {
>>>>           rhub = &xhci->usb3_rhub;
>>>> +        /*
>>>> +         * Some hosts incorrectly use sub-minor version for minor
>>>> +         * version (i.e. 0x02 instead of 0x20 for bcdUSB 0x320 and 0x01
>>>> +         * for bcdUSB 0x310). Since there is no USB release with sub
>>>> +         * minor version 0x301 to 0x309, we can assume that they are
>>>> +         * incorrect and fix it here.
>>>> +         */
>>>> +        if (!(minor_revision & 0xf0) && (minor_revision & 0x0f))
>>>> +            minor_revision = minor_revision << 4;
>>>    Why not:
>>>
>>>             minor_revision <<= 4;
>>>
>>> [...]
>>>
>>> MBR, Sergei
>> Sure, we can do that.
> Isn't it just:
> 		if (minor_revision < 0x10)
> 			minor_revision <<= 4;
>
> 	David
>
>

Ah.... Not sure what I was thinking when I made that roundabout check.
Thanks for pointing it out.

Thinh




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

  Powered by Linux