• Tony Lindgren's avatar
    usb: musb: Fix host mode error -71 regression · 407788b5
    Tony Lindgren authored
    Commit 467d5c98 ("usb: musb: Implement session bit based runtime PM for
    musb-core") started implementing musb generic runtime PM support by
    introducing devctl register session bit based state control.
    
    This caused a regression where if a USB mass storage device is connected
    to a USB hub, we can get:
    
    usb 1-1: reset high-speed USB device number 2 using musb-hdrc
    usb 1-1: device descriptor read/64, error -71
    usb 1-1.1: new high-speed USB device number 4 using musb-hdrc
    
    This is because before the USB storage device is connected, musb is
    in OTG_STATE_A_SUSPEND. And we currently only set need_finish_resume
    in musb_stage0_irq() and the related code calling finish_resume_work
    in musb_resume() and musb_runtime_resume() never gets called.
    
    To fix the issue, we can call schedule_delayed_work() directly in
    musb_stage0_irq() to have finish_resume_work run.
    
    And we should no longer never get interrupts when when suspended.
    We have changed musb to no longer need pm_runtime_irqsafe().
    The need_finish_resume flag was added in commit 9298b4aa ("usb:
    musb: fix device hotplug behind hub") and no longer applies as far
    as I can tell. So let's just remove the earlier code that no longer
    is needed.
    
    Fixes: 467d5c98 ("usb: musb: Implement session bit based runtime PM for musb-core")
    Reported-by: default avatarBin Liu <b-liu@ti.com>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    Signed-off-by: default avatarBin Liu <b-liu@ti.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    407788b5
musb_core.h 17 KB