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 - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)