Message ID | 1547714657-22780-1-git-send-email-yoshihiro.shimoda.uh@renesas.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [v2] dmaengine: usb-dmac: Make DMAC system sleep callbacks explicit | expand |
On 17-01-19, 17:44, Yoshihiro Shimoda wrote: > From: Phuong Nguyen <phuong.nguyen.xw@renesas.com> > > This commit fixes the issue that USB-DMAC hangs silently after system > resumes on R-Car Gen3 hence renesas_usbhs will not work correctly > when using USB-DMAC for bulk transfer e.g. ethernet or serial > gadgets. > > The issue can be reproduced by these steps: > 1. modprobe g_serial > 2. Suspend and resume system. > 3. connect a usb cable to host side > 4. Transfer data from Host to Target > 5. cat /dev/ttyGS0 (Target side) > 6. echo "test" > /dev/ttyACM0 (Host side) > > The 'cat' will not result anything. However, system still can work > normally. > > Currently, USB-DMAC driver does not have system sleep callbacks hence > this driver relies on the PM core to force runtime suspend/resume to > suspend and reinitialize USB-DMAC during system resume. After > the commit 17218e0092f8 ("PM / genpd: Stop/start devices without > pm_runtime_force_suspend/resume()"), PM core will not force > runtime suspend/resume anymore so this issue happens. > > To solve this, make system suspend resume explicit by using > pm_runtime_force_{suspend,resume}() as the system sleep callbacks. > SET_NOIRQ_SYSTEM_SLEEP_PM_OPS() is used to make sure USB-DMAC > suspended after and initialized before renesas_usbhs." Applied, thanks
diff --git a/drivers/dma/sh/usb-dmac.c b/drivers/dma/sh/usb-dmac.c index 7f7184c..59403f6 100644 --- a/drivers/dma/sh/usb-dmac.c +++ b/drivers/dma/sh/usb-dmac.c @@ -694,6 +694,8 @@ static int usb_dmac_runtime_resume(struct device *dev) #endif /* CONFIG_PM */ static const struct dev_pm_ops usb_dmac_pm = { + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, + pm_runtime_force_resume) SET_RUNTIME_PM_OPS(usb_dmac_runtime_suspend, usb_dmac_runtime_resume, NULL) };