lkml.org 
[lkml]   [2019]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.0 147/238] dmaengine: usb-dmac: Make DMAC system sleep callbacks explicit
    Date
    5.0-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Phuong Nguyen <phuong.nguyen.xw@renesas.com>

    commit d9140a0da4a230a03426d175145989667758aa6a upstream.

    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."

    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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/dma/sh/usb-dmac.c | 2 ++
    1 file changed, 2 insertions(+)

    --- a/drivers/dma/sh/usb-dmac.c
    +++ b/drivers/dma/sh/usb-dmac.c
    @@ -694,6 +694,8 @@ static int usb_dmac_runtime_resume(struc
    #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)
    };

    \
     
     \ /
      Last update: 2019-03-22 13:39    [W:4.060 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site