remoteproc: core: Prevent system suspend during remoteproc recovery
authorRishabh Bhatnagar <rishabhb@codeaurora.org>
Wed, 29 Apr 2020 18:04:42 +0000 (11:04 -0700)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Tue, 12 May 2020 19:11:41 +0000 (12:11 -0700)
The system might go into suspend during recovery of any remoteproc.
This will interrupt the recovery process in between increasing the
recovery time. Make the platform device as wakeup capable and
use pm_stay_wake/pm_relax APIs to avoid system from going into
suspend during recovery.

Signed-off-by: Siddharth Gupta <sidgup@codeaurora.org>
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Acked-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Link: https://lore.kernel.org/r/1588183482-21146-1-git-send-email-rishabhb@codeaurora.org
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
drivers/remoteproc/qcom_q6v5_pas.c
drivers/remoteproc/remoteproc_core.c

index 3bb69f58e086c4123ab1826c86e6ae5a97c97d2f..61791a03f648c75f7b57227c711d02894033f0fe 100644 (file)
@@ -407,6 +407,8 @@ static int adsp_probe(struct platform_device *pdev)
        adsp->has_aggre2_clk = desc->has_aggre2_clk;
        platform_set_drvdata(pdev, adsp);
 
+       device_wakeup_enable(adsp->dev);
+
        ret = adsp_alloc_memory_region(adsp);
        if (ret)
                goto free_rproc;
index 4bd0f45a00c0625d049fd6c24c3d4037701e3b95..7350161a3ed0d9c030d4e7d0063d1ab9ad349fc7 100644 (file)
@@ -1766,6 +1766,8 @@ static void rproc_crash_handler_work(struct work_struct *work)
 
        if (!rproc->recovery_disabled)
                rproc_trigger_recovery(rproc);
+
+       pm_relax(rproc->dev.parent);
 }
 
 /**
@@ -2353,6 +2355,9 @@ void rproc_report_crash(struct rproc *rproc, enum rproc_crash_type type)
                return;
        }
 
+       /* Prevent suspend while the remoteproc is being recovered */
+       pm_stay_awake(rproc->dev.parent);
+
        dev_err(&rproc->dev, "crash detected in %s: type %s\n",
                rproc->name, rproc_crash_to_string(type));