lkml.org 
[lkml]   [2020]   [Nov]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 08/15] remoteproc: Introduce function __rproc_detach()
    Date
    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>
    ---
    drivers/remoteproc/remoteproc_core.c | 31 ++++++++++++++++++++++++++++
    1 file changed, 31 insertions(+)

    diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
    index 539667948bc8..928b3f975798 100644
    --- a/drivers/remoteproc/remoteproc_core.c
    +++ b/drivers/remoteproc/remoteproc_core.c
    @@ -1664,6 +1664,37 @@ 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);
    + rproc_start_subdevices(rproc);
    + 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
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-11-26 22:09    [W:5.447 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site