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 <[email protected]>
Reviewed-by: Bjorn Andersson <[email protected]>
Tested-by: Arnaud Pouliquen <[email protected]>
---
 drivers/remoteproc/remoteproc_core.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/remoteproc/remoteproc_core.c 
b/drivers/remoteproc/remoteproc_core.c
index caea920ce4b8..08de81828e4e 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -1568,6 +1568,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.
-- 
2.25.1

Reply via email to