On Wed, Jun 18, 2025 at 03:14:41PM +0530, Souradeep Chowdhury wrote: > Device awake calls are only present in the recovery path of remoteproc.
This is not the problem, this merely documents a related fact. Might be worth mention after the problem has been established. > 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. I asked why is this a problem, what happens when the usermodehelper processes gets frozen, why does this cause an issue for the starting remoteproc? Why does it cause issues during shutdown? Regards, Bjorn > Add device awake calls in the rproc boot and shutdown path > to fix this. > > Signed-off-by: Souradeep Chowdhury <[email protected]> > Reviewed-by: Mukesh Ojha <[email protected]> > --- > 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 >

