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

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

 



Thinh Nguyen wrote:
> 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.

Btw, the intention is this:
if (minor_revision >  0x00 && minor_revision < 0x10) ...

It's much clearer this way. I'll make the change after more feedbacks on
other patches.

BR,
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