The k3_dsp_rproc_release() function erroneously deasserts the local
reset even for devices which do not support it. Even though it results
in a no-operation, Update the logic to explicitly deassert only the
global reset for devices that do not have a local reset.

Signed-off-by: Beleswar Padhi <b-pa...@ti.com>
Tested-by: Judith Mendez <j...@ti.com>
---
v11: Changelog:
1. Put if-else block for code path with lreset and w/o lreset. [Andrew]
2. Carried T/B tag.

Link to v10:
https://lore.kernel.org/all/20250417182001.3903905-17-b-pa...@ti.com/

v10: Changelog:
1. Split [v9 13/26] into [v10 16/33] and [v10 17/33] patches. 

Link to v9:
https://lore.kernel.org/all/20250317120622.1746415-14-b-pa...@ti.com/

 drivers/remoteproc/ti_k3_dsp_remoteproc.c | 30 ++++++++++-------------
 1 file changed, 13 insertions(+), 17 deletions(-)

diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c 
b/drivers/remoteproc/ti_k3_dsp_remoteproc.c
index f8a5282df5b71..08e6dde3ea267 100644
--- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c
+++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c
@@ -30,23 +30,19 @@ static int k3_dsp_rproc_release(struct k3_rproc *kproc)
        struct device *dev = kproc->dev;
        int ret;
 
-       if (kproc->data->uses_lreset)
-               goto lreset;
-
-       ret = kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci,
-                                                   kproc->ti_sci_id);
-       if (ret) {
-               dev_err(dev, "module-reset deassert failed (%pe)\n", 
ERR_PTR(ret));
-               return ret;
-       }
-
-lreset:
-       ret = reset_control_deassert(kproc->reset);
-       if (ret) {
-               dev_err(dev, "local-reset deassert failed, (%pe)\n", 
ERR_PTR(ret));
-               if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci,
-                                                         kproc->ti_sci_id))
-                       dev_warn(dev, "module-reset assert back failed\n");
+       if (kproc->data->uses_lreset) {
+               ret = reset_control_deassert(kproc->reset);
+               if (ret) {
+                       dev_err(dev, "local-reset deassert failed, (%pe)\n", 
ERR_PTR(ret));
+                       if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci,
+                                                                 
kproc->ti_sci_id))
+                               dev_warn(dev, "module-reset assert back 
failed\n");
+               }
+       } else {
+               ret = kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci,
+                                                           kproc->ti_sci_id);
+               if (ret)
+                       dev_err(dev, "module-reset deassert failed (%pe)\n", 
ERR_PTR(ret));
        }
 
        return ret;
-- 
2.34.1


Reply via email to