lkml.org 
[lkml]   [2020]   [Jun]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v4 3/9] remoteproc: Introducing function rproc_attach()
On Mon 01 Jun 10:51 PDT 2020, Mathieu Poirier wrote:

> Introducing function rproc_attach() to enact the same actions as
> rproc_start(), but without the steps related to the handling of
> a firmware image. That way we can properly deal with scenarios
> where the remoteproc core needs to attach with a remote processsor
> that has been booted by another entity.
>
> Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
> ---
> drivers/remoteproc/remoteproc_core.c | 42 ++++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
>
> diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
> index 9f04c30c4aaf..0b323f6b554b 100644
> --- a/drivers/remoteproc/remoteproc_core.c
> +++ b/drivers/remoteproc/remoteproc_core.c
> @@ -1370,6 +1370,48 @@ static int rproc_start(struct rproc *rproc, const struct firmware *fw)
> return ret;
> }
>
> +static int __maybe_unused rproc_attach(struct rproc *rproc)
> +{
> + struct device *dev = &rproc->dev;
> + int ret;
> +

For the case where we're going DETACHED -> RUNNING - > OFFLINE we
need to consider the pm_runtime (and prepare/unprepare) state of the
device as well...


Apart from that I think this looks good.

Regards,
Bjorn

> + ret = rproc_prepare_subdevices(rproc);
> + if (ret) {
> + dev_err(dev, "failed to prepare subdevices for %s: %d\n",
> + rproc->name, ret);
> + goto out;
> + }
> +
> + /* Attach to the remote processor */
> + ret = rproc_attach_device(rproc);
> + if (ret) {
> + dev_err(dev, "can't attach to rproc %s: %d\n",
> + rproc->name, ret);
> + goto unprepare_subdevices;
> + }
> +
> + /* Start any subdevices for the remote processor */
> + ret = rproc_start_subdevices(rproc);
> + if (ret) {
> + dev_err(dev, "failed to probe subdevices for %s: %d\n",
> + rproc->name, ret);
> + goto stop_rproc;
> + }
> +
> + rproc->state = RPROC_RUNNING;
> +
> + dev_info(dev, "remote processor %s is now attached\n", rproc->name);
> +
> + return 0;
> +
> +stop_rproc:
> + rproc->ops->stop(rproc);
> +unprepare_subdevices:
> + rproc_unprepare_subdevices(rproc);
> +out:
> + return ret;
> +}
> +
> /*
> * take a firmware and boot a remote processor with it.
> */
> --
> 2.20.1
>

\
 
 \ /
  Last update: 2020-06-22 09:11    [W:0.412 / U:0.004 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site