• Xu Yang's avatar
    usb: chipidea: core: handle power lost in workqueue · cc509b6a
    Xu Yang authored
    When power is recycled in usb controller during system power management,
    the controller will recognize it and switch role if role has been changed
    during power lost. In current design, it will be completed in resume()
    function. However, this may bring issues since usb class devices have
    their pm operations too and these device's resume() functions are still
    not being called at this point. When usb controller recognized host role
    should be stopped, these usb class devices will be removed at this point.
    But these usb class devices can't be removed in some cases, such as scsi
    devices. Since scsi driver may sync data to U-disk, however it will block
    there because scsi drvier can only handle pm request when is in suspended
    state. Therefore, there may exist a dependency between ci_resume() and usb
    class device's resume(). To break this potential dependency, we need to
    handle power lost work in a workqueue.
    
    Fixes: 74494b33 ("usb: chipidea: core: add controller resume support when controller is powered off")
    cc: stable@vger.kernel.org
    Signed-off-by: default avatarXu Yang <xu.yang_2@nxp.com>
    Link: https://lore.kernel.org/r/20240119123537.3614838-1-xu.yang_2@nxp.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    cc509b6a
ci.h 12.5 KB