mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-18 18:23:53 +08:00
remoteproc: Introduce function __rproc_detach()
Introduce function __rproc_detach() to perform the same kind of operation as rproc_stop(), but instead of switching off the remote processor using rproc->ops->stop(), it uses rproc->ops->detach(). That way it is possible for the core to release the resources associated with a remote processor while the latter is kept operating. Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org> Reviewed-by: Peng Fan <peng.fan@nxp.com> Reviewed-by: Arnaud Pouliquen <arnaud.pouliquen@st.com> Link: https://lore.kernel.org/r/20210312162453.1234145-10-mathieu.poirier@linaro.org Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
7f3bd0c019
commit
6070203fe4
@ -1712,6 +1712,36 @@ static int rproc_stop(struct rproc *rproc, bool crashed)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* __rproc_detach(): Does the opposite of __rproc_attach()
|
||||
*/
|
||||
static int __maybe_unused __rproc_detach(struct rproc *rproc)
|
||||
{
|
||||
struct device *dev = &rproc->dev;
|
||||
int ret;
|
||||
|
||||
/* No need to continue if a detach() operation has not been provided */
|
||||
if (!rproc->ops->detach)
|
||||
return -EINVAL;
|
||||
|
||||
/* Stop any subdevices for the remote processor */
|
||||
rproc_stop_subdevices(rproc, false);
|
||||
|
||||
/* Tell the remote processor the core isn't available anymore */
|
||||
ret = rproc->ops->detach(rproc);
|
||||
if (ret) {
|
||||
dev_err(dev, "can't detach from rproc: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
rproc_unprepare_subdevices(rproc);
|
||||
|
||||
rproc->state = RPROC_DETACHED;
|
||||
|
||||
dev_info(dev, "detached remote processor %s\n", rproc->name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* rproc_trigger_recovery() - recover a remoteproc
|
||||
|
Loading…
Reference in New Issue
Block a user