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