From f1636eb0fd025df3a229b092cc21f21271457623 Mon Sep 17 00:00:00 2001 From: William Wu Date: Fri, 7 Jan 2022 11:10:32 +0800 Subject: [PATCH] usb: dwc3: fix failed to enter suspend The dwc3 disable wakeup in runtime resume, it prevent the PM suspend with the following log on RK3588 EVB1: [ 22.910675][ T1886] PM: suspend entry (deep) ...... [ 23.059751][ T1886] Hardware name: Rockchip RK3588 EVB1 LP4 V10 Board (DT) [ 23.059759][ T1886] Call trace: [ 23.059782][ T1886] dump_backtrace+0x0/0x1c8 [ 23.059797][ T1886] show_stack+0x1c/0x2c [ 23.059813][ T1886] dump_stack_lvl+0xdc/0x12c [ 23.059825][ T1886] dump_stack+0x1c/0x64 [ 23.059840][ T1886] __pm_stay_awake+0xb0/0xbc [ 23.059856][ T1886] ep_poll_callback+0x190/0x2e8 [ 23.059872][ T1886] __wake_up_common+0xc8/0x14c [ 23.059884][ T1886] __wake_up_sync_key+0x80/0xd0 [ 23.059900][ T1886] sock_def_readable+0x44/0x7c [ 23.059915][ T1886] netlink_broadcast_deliver+0xa0/0xe0 [ 23.059928][ T1886] do_one_broadcast+0x234/0x434 [ 23.059940][ T1886] netlink_broadcast_filtered+0xd8/0x1e0 [ 23.059952][ T1886] netlink_broadcast+0x1c/0x2c [ 23.059966][ T1886] uevent_net_broadcast_untagged+0xd0/0x138 [ 23.059977][ T1886] kobject_uevent_env+0x3e8/0x404 [ 23.059987][ T1886] kobject_uevent+0x18/0x28 [ 23.060001][ T1886] device_del+0x290/0x488 [ 23.060013][ T1886] device_unregister+0x1c/0x3c [ 23.060025][ T1886] wakeup_source_sysfs_remove+0x18/0x28 [ 23.060036][ T1886] wakeup_source_unregister+0x8c/0xa8 [ 23.060047][ T1886] device_init_wakeup+0x94/0xf4 [ 23.060063][ T1886] dwc3_runtime_resume+0x28/0x74 [ 23.060076][ T1886] pm_generic_runtime_resume+0x2c/0x44 [ 23.060089][ T1886] genpd_runtime_resume+0x174/0x234 [ 23.060099][ T1886] __rpm_callback+0x80/0x338 [ 23.060112][ T1886] rpm_resume+0x3e4/0x66c [ 23.060125][ T1886] __pm_runtime_resume+0x54/0x8c [ 23.060137][ T1886] genpd_prepare+0x70/0x100 [ 23.060148][ T1886] device_prepare+0x74/0x184 [ 23.060158][ T1886] dpm_prepare+0xb8/0x410 [ 23.060169][ T1886] dpm_suspend_start+0x30/0x1e4 [ 23.060180][ T1886] suspend_devices_and_enter+0xc4/0x338 [ 23.060191][ T1886] enter_state+0x12c/0x3f8 [ 23.060201][ T1886] pm_suspend+0x60/0xcc ...... [ 23.067765][ T1886] PM: PM: Pending Wakeup Sources: NETLINK [ 23.067780][ T1886] PM: Some devices failed to suspend, or early wake event detected [ 23.092746][ T1886] OOM killer enabled. [ 23.093099][ T1886] Restarting tasks ... done. [ 23.095953][ T1886] [dhd] dhd_pm_callback: action=4, suspend=0, suspend_mode=0 [ 23.096644][ T1886] Abort: Pending Wakeup Sources: NETLINK [ 23.097145][ T1886] PM: suspend exit Actually, we can enable wakeup in runtime resume when usb connect, so let's fix it. Signed-off-by: William Wu Change-Id: I7376fe45fbcbc8210db38ed49600f9ffd101607d --- drivers/usb/dwc3/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index fc1087b4dbde..4f3eb0ac7b53 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1943,7 +1943,7 @@ static int dwc3_runtime_suspend(struct device *dev) if (ret) return ret; - device_init_wakeup(dev, true); + device_init_wakeup(dev, false); return 0; } @@ -1953,7 +1953,7 @@ static int dwc3_runtime_resume(struct device *dev) struct dwc3 *dwc = dev_get_drvdata(dev); int ret; - device_init_wakeup(dev, false); + device_init_wakeup(dev, true); ret = dwc3_resume_common(dwc, PMSG_AUTO_RESUME); if (ret)