remoteproc: k3: Refactor release_tsp() functions into common driver
authorBeleswar Padhi <b-padhi@ti.com>
Tue, 13 May 2025 05:45:10 +0000 (11:15 +0530)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Tue, 20 May 2025 17:19:12 +0000 (11:19 -0600)
The release_tsp() implementations in the TI K3 R5, DSP and M4 remoteproc
drivers release the TI-SCI processor control of a remote processor,
which is auto triggered upon device removal.

Refactor these functions into ti_k3_common.c driver as k3_release_tsp()
and use this common function throughout in R5, DSP and M4 drivers.

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-37-b-padhi@ti.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
drivers/remoteproc/ti_k3_common.c
drivers/remoteproc/ti_k3_common.h
drivers/remoteproc/ti_k3_dsp_remoteproc.c
drivers/remoteproc/ti_k3_m4_remoteproc.c
drivers/remoteproc/ti_k3_r5_remoteproc.c

index 92da2af2733d9841a9d48833d740c45681ce3ea7..d5dccc81d46040e4e384e773c474af814823c1c6 100644 (file)
@@ -539,5 +539,13 @@ int k3_reserved_mem_init(struct k3_rproc *kproc)
 }
 EXPORT_SYMBOL_GPL(k3_reserved_mem_init);
 
+void k3_release_tsp(void *data)
+{
+       struct ti_sci_proc *tsp = data;
+
+       ti_sci_proc_release(tsp);
+}
+EXPORT_SYMBOL_GPL(k3_release_tsp);
+
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("TI K3 common Remoteproc code");
index d304755990a9469761f8f46d1018a24226683ac8..aee3c28dbe510d3d6e8455a96d4dab6fdc35f033 100644 (file)
@@ -114,4 +114,5 @@ int k3_rproc_of_get_memories(struct platform_device *pdev,
                             struct k3_rproc *kproc);
 void k3_mem_release(void *data);
 int k3_reserved_mem_init(struct k3_rproc *kproc);
+void k3_release_tsp(void *data);
 #endif /* REMOTEPROC_TI_K3_COMMON_H */
index 45000b68260c10c6eadadd332eabd00ea2c2fffb..7a72933bd403b439d73be4736042b24343796f3c 100644 (file)
@@ -66,13 +66,6 @@ static const struct rproc_ops k3_dsp_rproc_ops = {
        .get_loaded_rsc_table   = k3_get_loaded_rsc_table,
 };
 
-static void k3_dsp_release_tsp(void *data)
-{
-       struct ti_sci_proc *tsp = data;
-
-       ti_sci_proc_release(tsp);
-}
-
 static int k3_dsp_rproc_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
@@ -136,7 +129,7 @@ static int k3_dsp_rproc_probe(struct platform_device *pdev)
                dev_err_probe(dev, ret, "ti_sci_proc_request failed\n");
                return ret;
        }
-       ret = devm_add_action_or_reset(dev, k3_dsp_release_tsp, kproc->tsp);
+       ret = devm_add_action_or_reset(dev, k3_release_tsp, kproc->tsp);
        if (ret)
                return ret;
 
index 41bca6b64517ac48ee677affb2db19f9ff647c79..3a11fd24eb52b514cdb1ac1ec1ee1b3825904c45 100644 (file)
 #include "ti_sci_proc.h"
 #include "ti_k3_common.h"
 
-static void k3_m4_release_tsp(void *data)
-{
-       struct ti_sci_proc *tsp = data;
-
-       ti_sci_proc_release(tsp);
-}
-
 static const struct rproc_ops k3_m4_rproc_ops = {
        .prepare = k3_rproc_prepare,
        .unprepare = k3_rproc_unprepare,
@@ -93,7 +86,7 @@ static int k3_m4_rproc_probe(struct platform_device *pdev)
        ret = ti_sci_proc_request(kproc->tsp);
        if (ret < 0)
                return dev_err_probe(dev, ret, "ti_sci_proc_request failed\n");
-       ret = devm_add_action_or_reset(dev, k3_m4_release_tsp, kproc->tsp);
+       ret = devm_add_action_or_reset(dev, k3_release_tsp, kproc->tsp);
        if (ret)
                return ret;
 
index 3cd8391212f7bdcbd68f6d6f039ac2749681e06b..e34c04c135fc90354086de83ab4c648dfb77fdc4 100644 (file)
@@ -1017,13 +1017,6 @@ static int k3_r5_core_of_get_sram_memories(struct platform_device *pdev,
        return 0;
 }
 
-static void k3_r5_release_tsp(void *data)
-{
-       struct ti_sci_proc *tsp = data;
-
-       ti_sci_proc_release(tsp);
-}
-
 static int k3_r5_cluster_rproc_init(struct platform_device *pdev)
 {
        struct k3_r5_cluster *cluster = platform_get_drvdata(pdev);
@@ -1109,7 +1102,7 @@ static int k3_r5_cluster_rproc_init(struct platform_device *pdev)
                        goto out;
                }
 
-               ret = devm_add_action_or_reset(cdev, k3_r5_release_tsp, kproc->tsp);
+               ret = devm_add_action_or_reset(cdev, k3_release_tsp, kproc->tsp);
                if (ret)
                        goto out;
        }