diff options
author | Hari Nagalla | 2024-10-09 09:27:17 -0500 |
---|---|---|
committer | Udit Kumar | 2024-10-14 02:59:05 -0500 |
commit | a04282dfaa0ae1917d43cc3f0bbdd8787a4688e6 (patch) | |
tree | c85dc95fe15da80b4400298fc31e4185692bf9be /drivers/remoteproc/ti_k3_r5_remoteproc.c | |
parent | 32ae7316ddc6d9b6bb0d87706cf7daa44c4c1e92 (diff) | |
download | ti-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.c | 18 |
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) { |