remoteproc: Refactor function rproc_trigger_auto_boot()
authorMathieu Poirier <mathieu.poirier@linaro.org>
Tue, 14 Jul 2020 19:50:33 +0000 (13:50 -0600)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Fri, 17 Jul 2020 06:06:12 +0000 (23:06 -0700)
Refactor function rproc_trigger_auto_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>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Tested-by: Arnaud Pouliquen <arnaud.pouliquen@st.com>
Link: https://lore.kernel.org/r/20200714195035.1426873-8-mathieu.poirier@linaro.org
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
drivers/remoteproc/remoteproc_core.c

index 1e9fc31..1f73dc1 100644 (file)
@@ -1571,6 +1571,15 @@ static int rproc_trigger_auto_boot(struct rproc *rproc)
 {
        int ret;
 
+       /*
+        * Since the remote processor is in a detached state, it has already
+        * been booted by another entity.  As such there is no point in waiting
+        * for a firmware image to be loaded, we can simply initiate the process
+        * of attaching to it immediately.
+        */
+       if (rproc->state == RPROC_DETACHED)
+               return rproc_boot(rproc);
+
        /*
         * We're initiating an asynchronous firmware loading, so we can
         * be built-in kernel code, without hanging the boot process.