remoteproc: k3-dsp: Correct Reset logic for devices without lresets
authorBeleswar Padhi <b-padhi@ti.com>
Tue, 13 May 2025 05:44:49 +0000 (11:14 +0530)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Tue, 20 May 2025 17:19:11 +0000 (11:19 -0600)
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>
drivers/remoteproc/ti_k3_dsp_remoteproc.c

index 476f4e6..2ffcdba 100644 (file)
@@ -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;