remoteproc: imx_dsp_rproc: Use devm_rproc_alloc() helper
authorAndrew Davis <afd@ti.com>
Tue, 23 Jan 2024 18:46:24 +0000 (12:46 -0600)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Fri, 2 Feb 2024 18:30:22 +0000 (11:30 -0700)
Use the device lifecycle managed allocation function. This helps prevent
mistakes like freeing out of order in cleanup functions and forgetting to
free on error paths.

Signed-off-by: Andrew Davis <afd@ti.com>
Link: https://lore.kernel.org/r/20240123184632.725054-1-afd@ti.com
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
drivers/remoteproc/imx_dsp_rproc.c

index a1c62d15f16c6ba00a9edd6edbe2fac490b61b16..56a799cb8b363adbcbc435e617434f9f1df4859e 100644 (file)
@@ -1104,8 +1104,8 @@ static int imx_dsp_rproc_probe(struct platform_device *pdev)
                return ret;
        }
 
-       rproc = rproc_alloc(dev, "imx-dsp-rproc", &imx_dsp_rproc_ops, fw_name,
-                           sizeof(*priv));
+       rproc = devm_rproc_alloc(dev, "imx-dsp-rproc", &imx_dsp_rproc_ops,
+                                fw_name, sizeof(*priv));
        if (!rproc)
                return -ENOMEM;
 
@@ -1125,14 +1125,14 @@ static int imx_dsp_rproc_probe(struct platform_device *pdev)
        ret = imx_dsp_rproc_detect_mode(priv);
        if (ret) {
                dev_err(dev, "failed on imx_dsp_rproc_detect_mode\n");
-               goto err_put_rproc;
+               return ret;
        }
 
        /* There are multiple power domains required by DSP on some platform */
        ret = imx_dsp_attach_pm_domains(priv);
        if (ret) {
                dev_err(dev, "failed on imx_dsp_attach_pm_domains\n");
-               goto err_put_rproc;
+               return ret;
        }
        /* Get clocks */
        ret = imx_dsp_rproc_clk_get(priv);
@@ -1155,8 +1155,6 @@ static int imx_dsp_rproc_probe(struct platform_device *pdev)
 
 err_detach_domains:
        imx_dsp_detach_pm_domains(priv);
-err_put_rproc:
-       rproc_free(rproc);
 
        return ret;
 }
@@ -1169,7 +1167,6 @@ static void imx_dsp_rproc_remove(struct platform_device *pdev)
        pm_runtime_disable(&pdev->dev);
        rproc_del(rproc);
        imx_dsp_detach_pm_domains(priv);
-       rproc_free(rproc);
 }
 
 /* pm runtime functions */