Update the co-processor state in function stm32_rproc_stop() so that
it can be used in scenarios where the remoteproc core is attaching
to the M4.

Mainly based on the work published by Arnaud Pouliquen [1].

[1]. https://patchwork.kernel.org/project/linux-remoteproc/list/?series=239877

Signed-off-by: Mathieu Poirier <[email protected]>
Reviewed-by: Arnaud Pouliquen <[email protected]>
---
 drivers/remoteproc/stm32_rproc.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/remoteproc/stm32_rproc.c b/drivers/remoteproc/stm32_rproc.c
index 7145cd49616e..f4da42fc0eeb 100644
--- a/drivers/remoteproc/stm32_rproc.c
+++ b/drivers/remoteproc/stm32_rproc.c
@@ -504,6 +504,18 @@ static int stm32_rproc_stop(struct rproc *rproc)
                }
        }
 
+       /* update coprocessor state to OFF if available */
+       if (ddata->m4_state.map) {
+               err = regmap_update_bits(ddata->m4_state.map,
+                                        ddata->m4_state.reg,
+                                        ddata->m4_state.mask,
+                                        M4_STATE_OFF);
+               if (err) {
+                       dev_err(&rproc->dev, "failed to set copro state\n");
+                       return err;
+               }
+       }
+
        return 0;
 }
 
-- 
2.25.1

Reply via email to