diff options
author | 2025-05-13 11:14:49 +0530 | |
---|---|---|
committer | 2025-05-20 11:19:11 -0600 | |
commit | 754d13dfe263c704b9c2e3cd86cc37cf877a0789 (patch) | |
tree | 7b9c3884ed2931e07fc427a0a2539b3937bf5f1d | |
parent | remoteproc: k3: Refactor .kick rproc ops into common driver (diff) | |
download | linux-rng-754d13dfe263c704b9c2e3cd86cc37cf877a0789.tar.xz linux-rng-754d13dfe263c704b9c2e3cd86cc37cf877a0789.zip |
remoteproc: k3-dsp: Correct Reset logic for devices without lresets
The k3_dsp_rproc_reset() function erroneously asserts the local reset
even for devices which do not support it. Even though it results in a
no-operation, Update the logic to explicitly assert the local reset for
devices that support it and only the global reset for those that do not.
Signed-off-by: Beleswar Padhi <b-padhi@ti.com>
Tested-by: Judith Mendez <jm@ti.com>
Reviewed-by: Andrew Davis <afd@ti.com>
Link: https://lore.kernel.org/r/20250513054510.3439842-16-b-padhi@ti.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
-rw-r--r-- | drivers/remoteproc/ti_k3_dsp_remoteproc.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc/ti_k3_dsp_remoteproc.c index 476f4e69d2c1..2ffcdba1c775 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -30,21 +30,15 @@ static int k3_dsp_rproc_reset(struct k3_rproc *kproc) struct device *dev = kproc->dev; int ret; - ret = reset_control_assert(kproc->reset); - if (ret) { - dev_err(dev, "local-reset assert failed (%pe)\n", ERR_PTR(ret)); - return ret; - } - - if (kproc->data->uses_lreset) - return ret; - - ret = kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) { - dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret)); - if (reset_control_deassert(kproc->reset)) - dev_warn(dev, "local-reset deassert back failed\n"); + if (kproc->data->uses_lreset) { + ret = reset_control_assert(kproc->reset); + if (ret) + dev_err(dev, "local-reset assert failed (%pe)\n", ERR_PTR(ret)); + } else { + ret = kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id); + if (ret) + dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret)); } return ret; |