• Elric Fu's avatar
    USB: Set hub depth after USB3 hub reset · a45aa3b3
    Elric Fu authored
    The superspeed device attached to a USB 3.0 hub(such as VIA's)
    doesn't respond the address device command after resume. The
    root cause is the superspeed hub will miss the Hub Depth value
    that is used as an offset into the route string to locate the
    bits it uses to determine the downstream port number after
    reset, and all packets can't be routed to the device attached
    to the superspeed hub.
    
    Hub driver sends a Set Hub Depth request to the superspeed hub
    except for USB 3.0 root hub when the hub is initialized and
    doesn't send the request again after reset due to the resume
    process. So moving the code that sends the Set Hub Depth request
    to the superspeed hub from hub_configure() to hub_activate()
    is to cover those situations include initialization and reset.
    
    The patch should be backported to kernels as old as 2.6.39.
    Signed-off-by: default avatarElric Fu <elricfu1@gmail.com>
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Cc: stable@vger.kernel.org
    a45aa3b3
hub.c 116 KB