• Felipe Balbi's avatar
    usb: host: xhci: fix compliance mode workaround · 488d8960
    Felipe Balbi authored
    commit 96908589 upstream.
    
    Commit 71c731a2 (usb: host: xhci: Fix Compliance Mode
    on SN65LVP3502CP Hardware) implemented a workaround
    for a known issue with Texas Instruments' USB 3.0
    redriver IC but it left a condition where any xHCI
    host would be taken out of reset if port was placed
    in compliance mode and there was no device connected
    to the port.
    
    That condition would trigger a fake connection to a
    non-existent device so that usbcore would trigger a
    warm reset of the port, thus taking the link out of
    reset.
    
    This has the side-effect of preventing any xHCI host
    connected to a Linux machine from starting and running
    the USB 3.0 Electrical Compliance Suite because the
    port will mysteriously taken out of compliance mode
    and, thus, xHCI won't step through the necessary
    compliance patterns for link validation.
    
    This patch fixes the issue by just adding a missing
    check for XHCI_COMP_MODE_QUIRK inside
    xhci_hub_report_usb3_link_state() when PORT_CAS isn't
    set.
    
    This patch should be backported to all kernels containing
    commit 71c731a2.
    
    Fixes: 71c731a2 (usb: host: xhci: Fix Compliance Mode on SN65LVP3502CP Hardware)
    Cc: Alexis R. Cortes <alexis.cortes@ti.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    Acked-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    [lizf: Backported to 3.4:
     - s/xhci_hub_report_usb3_link_state/xhci_hub_report_link_state/]
    Signed-off-by: default avatarZefan Li <lizefan@huawei.com>
    488d8960
xhci-hub.c 32.8 KB