remoteproc: k3-r5: remove sysfw PM calls if not supported
authorTero Kristo <t-kristo@ti.com>
Fri, 11 Jun 2021 08:45:04 +0000 (11:45 +0300)
committerLokesh Vutla <lokeshvutla@ti.com>
Fri, 11 Jun 2021 11:04:52 +0000 (16:34 +0530)
With the sysfw rearch, sysfw PM calls are no longer available from SPL
level. To properly support this, remove the is_on checks and the reset
assertion from the R5 remoteproc driver as these are not supported.
Attempting to access unavailable services will cause the device to hang.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
Signed-off-by: Tero Kristo <kristo@kernel.org>
drivers/remoteproc/ti_k3_r5f_rproc.c

index 3c569a3..6f3e12d 100644 (file)
@@ -804,19 +804,27 @@ static int k3_r5f_probe(struct udevice *dev)
                return ret;
        }
 
-       ret = core->tsp.sci->ops.dev_ops.is_on(core->tsp.sci, core->tsp.dev_id,
-                                              &r_state, &core->in_use);
-       if (ret)
-               return ret;
+       /*
+        * The PM functionality is not supported by the firmware during
+        * SPL execution with the separated DM firmware image. The following
+        * piece of code is not compiled in that case.
+        */
+       if (!IS_ENABLED(CONFIG_K3_DM_FW)) {
+               ret = core->tsp.sci->ops.dev_ops.is_on(core->tsp.sci,
+                                                      core->tsp.dev_id,
+                                                      &r_state, &core->in_use);
+               if (ret)
+                       return ret;
 
-       if (core->in_use) {
-               dev_info(dev, "Core %d is already in use. No rproc commands work\n",
-                        core->tsp.proc_id);
-               return 0;
-       }
+               if (core->in_use) {
+                       dev_info(dev, "Core %d is already in use. No rproc commands work\n",
+                                core->tsp.proc_id);
+                       return 0;
+               }
 
-       /* Make sure Local reset is asserted. Redundant? */
-       reset_assert(&core->reset);
+               /* Make sure Local reset is asserted. Redundant? */
+               reset_assert(&core->reset);
+       }
 
        ret = k3_r5f_rproc_configure(core);
        if (ret) {