linux/drivers/dma/sh
Phuong Nguyen d9140a0da4 dmaengine: usb-dmac: Make DMAC system sleep callbacks explicit
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 17218e0092 ("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."

Signed-off-by: Phuong Nguyen <phuong.nguyen.xw@renesas.com>
Signed-off-by: Hiroyuki Yokoyama <hiroyuki.yokoyama.vx@renesas.com>
Cc: <stable@vger.kernel.org> # v4.16+
[shimoda: revise the commit log and add Cc tag]
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2019-01-20 16:29:52 +05:30
..
Kconfig dmaengine: sh: Remove R-Mobile APE6 support 2018-12-05 13:01:54 +05:30
Makefile dmaengine: sh: Remove R-Mobile APE6 support 2018-12-05 13:01:54 +05:30
rcar-dmac.c dmaengine: sh: rcar-dmac: Use device_iommu_mapped() 2018-12-17 12:47:49 +01:00
shdma-arm.h dmaengine: use SPDX identifier for Renesas drivers 2018-08-29 21:58:49 +05:30
shdma-base.c dmaengine: use SPDX identifier for Renesas drivers 2018-08-29 21:58:49 +05:30
shdma-of.c dmaengine: use SPDX identifier for Renesas drivers 2018-08-29 21:58:49 +05:30
shdma.h dmaengine: sh: Remove R-Mobile APE6 support 2018-12-05 13:01:54 +05:30
shdmac.c dmaengine: sh: Remove R-Mobile APE6 support 2018-12-05 13:01:54 +05:30
sudmac.c dmaengine: use SPDX identifier for Renesas drivers 2018-08-29 21:58:49 +05:30
usb-dmac.c dmaengine: usb-dmac: Make DMAC system sleep callbacks explicit 2019-01-20 16:29:52 +05:30