lkml.org 
[lkml]   [2020]   [Jun]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 6/9] remoteproc: Refactor function rproc_boot()
    Date
    Refactor function rproc_boot() to properly deal with scenarios
    where the remoteproc core needs to attach with a remote
    processor that has already been booted by an external entity.

    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    ---
    drivers/remoteproc/remoteproc_core.c | 28 +++++++++++++++++-----------
    1 file changed, 17 insertions(+), 11 deletions(-)

    diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
    index 0be8343dd851..48ddc29814be 100644
    --- a/drivers/remoteproc/remoteproc_core.c
    +++ b/drivers/remoteproc/remoteproc_core.c
    @@ -1503,7 +1503,7 @@ static int rproc_fw_boot(struct rproc *rproc, const struct firmware *fw)
    * Attach to remote processor - similar to rproc_fw_boot() but without
    * the steps that deal with the firmware image.
    */
    -static int __maybe_unused rproc_actuate(struct rproc *rproc)
    +static int rproc_actuate(struct rproc *rproc)
    {
    struct device *dev = &rproc->dev;
    int ret;
    @@ -1923,24 +1923,30 @@ int rproc_boot(struct rproc *rproc)
    goto unlock_mutex;
    }

    - /* skip the boot process if rproc is already powered up */
    + /* skip the boot or attach process if rproc is already powered up */
    if (atomic_inc_return(&rproc->power) > 1) {
    ret = 0;
    goto unlock_mutex;
    }

    - dev_info(dev, "powering up %s\n", rproc->name);
    + if (rproc->state == RPROC_DETACHED) {
    + dev_info(dev, "attaching to %s\n", rproc->name);

    - /* load firmware */
    - ret = request_firmware(&firmware_p, rproc->firmware, dev);
    - if (ret < 0) {
    - dev_err(dev, "request_firmware failed: %d\n", ret);
    - goto downref_rproc;
    - }
    + ret = rproc_actuate(rproc);
    + } else {
    + dev_info(dev, "powering up %s\n", rproc->name);

    - ret = rproc_fw_boot(rproc, firmware_p);
    + /* load firmware */
    + ret = request_firmware(&firmware_p, rproc->firmware, dev);
    + if (ret < 0) {
    + dev_err(dev, "request_firmware failed: %d\n", ret);
    + goto downref_rproc;
    + }

    - release_firmware(firmware_p);
    + ret = rproc_fw_boot(rproc, firmware_p);
    +
    + release_firmware(firmware_p);
    + }

    downref_rproc:
    if (ret)
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-06-01 19:52    [W:4.221 / U:0.512 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site