• Mathias Nyman's avatar
    xhci: Don't let USB3 ports stuck in polling state prevent suspend · d92f2c59
    Mathias Nyman authored
    Commit 2f31a67f ("usb: xhci: Prevent bus suspend if a port connect
    change or polling state is detected") was intended to prevent ports that
    were still link training from being forced to U3 suspend state mid
    enumeration.
    This solved enumeration issues for devices with slow link training.
    
    Turns out some devices are stuck in the link training/polling state,
    and thus that patch will prevent suspend completely for these devices.
    This is seen with USB3 card readers in some MacBooks.
    
    Instead of preventing suspend, give some time to complete the link
    training. On successful training the port will end up as connected
    and enabled.
    If port instead is stuck in link training the bus suspend will continue
    suspending after 360ms (10 * 36ms) timeout (tPollingLFPSTimeout).
    
    Original patch was sent to stable, this one should go there as well
    
    Fixes: 2f31a67f ("usb: xhci: Prevent bus suspend if a port connect change or polling state is detected")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    d92f2c59
xhci-hub.c 50.9 KB