• YD Tseng's avatar
    usb: xhci: Fix USB 3.1 supported protocol parsing · b72eb843
    YD Tseng authored
    xHCI host controllers can have both USB 3.1 and 3.0 extended speed
    protocol lists. If the USB3.1 speed is parsed first and 3.0 second then
    the minor revision supported will be overwritten by the 3.0 speeds and
    the USB3 roothub will only show support for USB 3.0 speeds.
    
    This was the case with a xhci controller with the supported protocol
    capability listed below.
    In xhci-mem.c, the USB 3.1 speed is parsed first, the min_rev of usb3_rhub
    is set as 0x10.  And then USB 3.0 is parsed.  However, the min_rev of
    usb3_rhub will be changed to 0x00. If USB 3.1 device is connected behind
    this host controller, the speed of USB 3.1 device just reports 5G speed
    using lsusb.
    
         00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
      00 01 08 00 00 00 00 00 40 00 00 00 00 00 00 00 00
      10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      20 02 08 10 03 55 53 42 20 01 02 00 00 00 00 00 00     //USB 3.1
      30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      40 02 08 00 03 55 53 42 20 03 06 00 00 00 00 00 00     //USB 3.0
      50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      60 02 08 00 02 55 53 42 20 09 0E 19 00 00 00 00 00     //USB 2.0
      70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
    This patch fixes the issue by only owerwriting the minor revision if
    it is higher than the existing one.
    
    [reword commit message -Mathias]
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarYD Tseng <yd_tseng@asmedia.com.tw>
    Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    b72eb843
xhci-mem.c 76.9 KB