• Stanislaw Ledwon's avatar
    usb: Add support for root hub port status CAS · db46b26c
    Stanislaw Ledwon authored
    commit 8bea2bd3 upstream.
    
    The host controller port status register supports CAS (Cold Attach
    Status) bit. This bit could be set when USB3.0 device is connected
    when system is in Sx state. When the system wakes to S0 this port
    status with CAS bit is reported and this port can't be used by any
    device.
    
    When CAS bit is set the port should be reset by warm reset. This
    was not supported by xhci driver.
    
    The issue was found when pendrive was connected to suspended
    platform. The link state of "Compliance Mode" was reported together
    with CAS bit. This link state was also not supported by xhci and
    core/hub.c.
    
    The CAS bit is defined only for xhci root hub port and it is
    not supported on regular hubs. The link status is used to force
    warm reset on port. Make the USB core issue a warm reset when port
    is in ether the 'inactive' or 'compliance mode'. Change the xHCI driver
    to report 'compliance mode' when the CAS is set. This force warm reset
    on the root hub port.
    
    This patch should be backported to stable kernels as old as 3.2, that
    contain the commit 10d674a8 "USB: When
    hot reset for USB3 fails, try warm reset."
    Signed-off-by: default avatarStanislaw Ledwon <staszek.ledwon@linux.intel.com>
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Acked-by: default avatarAndiry Xu <andiry.xu@amd.com>
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    db46b26c
xhci.h 61 KB