• D
    usb: force warm reset to break link re-connect livelock · 3cd12f91
    Dan Williams 提交于
    Resuming a powered down port sometimes results in the port state being
    stuck in the training sequence.
    
     hub 3-0:1.0: debounce: port 1: total 2000ms stable 0ms status 0x2e0
     port1: can't get reconnection after setting port  power on, status -110
     hub 3-0:1.0: port 1 status 0000.02e0 after resume, -19
     usb 3-1: can't resume, status -19
     hub 3-0:1.0: logical disconnect on port 1
    
    In the case above we wait for the port re-connect timeout of 2 seconds
    and observe that the port status is USB_SS_PORT_LS_POLLING (although it
    is likely toggling between this state and USB_SS_PORT_LS_RX_DETECT).
    This is indicative of a case where the device is failing to progress the
    link training state machine.
    
    It is resolved by issuing a warm reset to get the hub and device link
    state machines back in sync.
    
     hub 3-0:1.0: debounce: port 1: total 2000ms stable 0ms status 0x2e0
     usb usb3: port1 usb_port_runtime_resume requires warm reset
     hub 3-0:1.0: port 1 not warm reset yet, waiting 50ms
     usb 3-1: reset SuperSpeed USB device number 2 using xhci_hcd
    
    After a reconnect timeout when we expect the device to be present, force
    a warm reset of the device.  Note that we can not simply look at the
    link status to determine if a warm reset is required as any of the
    training states USB_SS_PORT_LS_POLLING, USB_SS_PORT_LS_RX_DETECT, or
    USB_SS_PORT_LS_COMP_MOD are valid states that do not indicate the need
    for warm reset by themselves.
    
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: Kukjin Kim <kgene.kim@samsung.com>
    Cc: Vincent Palatin <vpalatin@chromium.org>
    Cc: Lan Tianyu <tianyu.lan@intel.com>
    Cc: Ksenia Ragiadakou <burzalodowa@gmail.com>
    Cc: Vivek Gautam <gautam.vivek@samsung.com>
    Cc: Douglas Anderson <dianders@chromium.org>
    Cc: Felipe Balbi <balbi@ti.com>
    Cc: Sunil Joshi <joshi@samsung.com>
    Cc: Hans de Goede <hdegoede@redhat.com>
    Acked-by: NJulius Werner <jwerner@chromium.org>
    Signed-off-by: NDan Williams <dan.j.williams@intel.com>
    Acked-by: NAlan Stern <stern@rowland.harvard.edu>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3cd12f91
port.c 12.7 KB