[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250618094441.1994965-1-quic_schowdhu@quicinc.com>
Date: Wed, 18 Jun 2025 15:14:41 +0530
From: Souradeep Chowdhury <quic_schowdhu@...cinc.com>
To: Mathieu Poirier <mathieu.poirier@...aro.org>,
Bjorn Andersson <andersson@...nel.org>,
linux-remoteproc@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: Souradeep Chowdhury <quic_schowdhu@...cinc.com>,
Mukesh Ojha <mukesh.ojha@....qualcomm.com>
Subject: [PATCH v6] remoteproc: Add device awake calls in rproc boot and shutdown path
Device awake calls are only present in the recovery path of remoteproc.
If an user stops and starts rproc by using the sysfs interface, then on
pm suspension the firmware fails to load as the request_firmware call
under adsp_load relies on usermodehelper process which gets freezed on
pm suspension. Add device awake calls in the rproc boot and shutdown path
to fix this.
Signed-off-by: Souradeep Chowdhury <quic_schowdhu@...cinc.com>
Reviewed-by: Mukesh Ojha <mukesh.ojha@....qualcomm.com>
---
Changes in v6
*Add some correction to commit message
Changes in v5
*Added more details to commit description
Changes in v4
*Remove stability from mailing list
*Remove the extra tab in v3
*Change the commit description
drivers/remoteproc/remoteproc_core.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index c2cf0d277729..5d6c4e694b4c 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -1917,6 +1917,7 @@ int rproc_boot(struct rproc *rproc)
return -EINVAL;
}
+ pm_stay_awake(rproc->dev.parent);
dev = &rproc->dev;
ret = mutex_lock_interruptible(&rproc->lock);
@@ -1961,6 +1962,7 @@ int rproc_boot(struct rproc *rproc)
atomic_dec(&rproc->power);
unlock_mutex:
mutex_unlock(&rproc->lock);
+ pm_relax(rproc->dev.parent);
return ret;
}
EXPORT_SYMBOL(rproc_boot);
@@ -1991,6 +1993,7 @@ int rproc_shutdown(struct rproc *rproc)
struct device *dev = &rproc->dev;
int ret = 0;
+ pm_stay_awake(rproc->dev.parent);
ret = mutex_lock_interruptible(&rproc->lock);
if (ret) {
dev_err(dev, "can't lock rproc %s: %d\n", rproc->name, ret);
@@ -2027,6 +2030,7 @@ int rproc_shutdown(struct rproc *rproc)
rproc->table_ptr = NULL;
out:
mutex_unlock(&rproc->lock);
+ pm_relax(rproc->dev.parent);
return ret;
}
EXPORT_SYMBOL(rproc_shutdown);
--
2.34.1
Powered by blists - more mailing lists