aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHari Nagalla2024-10-09 09:27:17 -0500
committerUdit Kumar2024-10-14 02:59:05 -0500
commita04282dfaa0ae1917d43cc3f0bbdd8787a4688e6 (patch)
treec85dc95fe15da80b4400298fc31e4185692bf9be /drivers/remoteproc/ti_k3_r5_remoteproc.c
parent32ae7316ddc6d9b6bb0d87706cf7daa44c4c1e92 (diff)
downloadti-linux-kernel-a04282dfaa0ae1917d43cc3f0bbdd8787a4688e6.tar.gz
ti-linux-kernel-a04282dfaa0ae1917d43cc3f0bbdd8787a4688e6.tar.xz
ti-linux-kernel-a04282dfaa0ae1917d43cc3f0bbdd8787a4688e6.zip
remoteproc: k3-r5: keep the device on during stop
Keep the core on when stopping a R5F core. On a stop, the core is halted and held in reset. On a start, the reset is released after a firmware loaded and this boots the core. This mechanism allows each R5F core in a cluster to be independently stopped and loaded with a new firmware. Signed-off-by: Hari Nagalla <hnagalla@ti.com> Reviewed-by: Beleswar Padhi <b-padhi@ti.com> Tested-by: Beleswar Padhi <b-padhi@ti.com>
Diffstat (limited to 'drivers/remoteproc/ti_k3_r5_remoteproc.c')
-rw-r--r--drivers/remoteproc/ti_k3_r5_remoteproc.c18
1 files changed, 0 insertions, 18 deletions
diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/ti_k3_r5_remoteproc.c
index c84683dde0bf..ad208a7ea473 100644
--- a/drivers/remoteproc/ti_k3_r5_remoteproc.c
+++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c
@@ -342,15 +342,6 @@ static int k3_r5_split_reset(struct k3_r5_core *core)
342 return ret; 342 return ret;
343 } 343 }
344 344
345 ret = core->ti_sci->ops.dev_ops.put_device(core->ti_sci,
346 core->ti_sci_id);
347 if (ret) {
348 dev_err(core->dev, "module-reset assert failed, ret = %d\n",
349 ret);
350 if (reset_control_deassert(core->reset))
351 dev_warn(core->dev, "local-reset deassert back failed\n");
352 }
353
354 return ret; 345 return ret;
355} 346}
356 347
@@ -870,15 +861,6 @@ static int k3_r5_rproc_stop(struct rproc *rproc)
870 return 0; 861 return 0;
871 } 862 }
872 863
873 /* do not allow core 0 to stop before core 1 */
874 core1 = list_last_entry(&cluster->cores, struct k3_r5_core,
875 elem);
876 if (core != core1 && core1->rproc->state != RPROC_OFFLINE) {
877 dev_err(dev, "%s: can not stop core 0 before core 1\n",
878 __func__);
879 ret = -EPERM;
880 goto out;
881 }
882 reinit_completion(&kproc->shut_comp); 864 reinit_completion(&kproc->shut_comp);
883 ret = mbox_send_message(kproc->mbox, (void *)msg); 865 ret = mbox_send_message(kproc->mbox, (void *)msg);
884 if (ret < 0) { 866 if (ret < 0) {