Commit 173d2c63 authored by Andrew Davis's avatar Andrew Davis Committed by Mathieu Poirier

remoteproc: st: Use devm_rproc_alloc() helper

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: default avatarAndrew Davis <afd@ti.com>
Link: https://lore.kernel.org/r/20240123184632.725054-8-afd@ti.comSigned-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
parent f1e05cc1
...@@ -347,23 +347,21 @@ static int st_rproc_probe(struct platform_device *pdev) ...@@ -347,23 +347,21 @@ static int st_rproc_probe(struct platform_device *pdev)
int enabled; int enabled;
int ret, i; int ret, i;
rproc = rproc_alloc(dev, np->name, &st_rproc_ops, NULL, sizeof(*ddata)); rproc = devm_rproc_alloc(dev, np->name, &st_rproc_ops, NULL, sizeof(*ddata));
if (!rproc) if (!rproc)
return -ENOMEM; return -ENOMEM;
rproc->has_iommu = false; rproc->has_iommu = false;
ddata = rproc->priv; ddata = rproc->priv;
ddata->config = (struct st_rproc_config *)device_get_match_data(dev); ddata->config = (struct st_rproc_config *)device_get_match_data(dev);
if (!ddata->config) { if (!ddata->config)
ret = -ENODEV; return -ENODEV;
goto free_rproc;
}
platform_set_drvdata(pdev, rproc); platform_set_drvdata(pdev, rproc);
ret = st_rproc_parse_dt(pdev); ret = st_rproc_parse_dt(pdev);
if (ret) if (ret)
goto free_rproc; return ret;
enabled = st_rproc_state(pdev); enabled = st_rproc_state(pdev);
if (enabled < 0) { if (enabled < 0) {
...@@ -439,8 +437,7 @@ static int st_rproc_probe(struct platform_device *pdev) ...@@ -439,8 +437,7 @@ static int st_rproc_probe(struct platform_device *pdev)
mbox_free_channel(ddata->mbox_chan[i]); mbox_free_channel(ddata->mbox_chan[i]);
free_clk: free_clk:
clk_unprepare(ddata->clk); clk_unprepare(ddata->clk);
free_rproc:
rproc_free(rproc);
return ret; return ret;
} }
...@@ -456,8 +453,6 @@ static void st_rproc_remove(struct platform_device *pdev) ...@@ -456,8 +453,6 @@ static void st_rproc_remove(struct platform_device *pdev)
for (i = 0; i < ST_RPROC_MAX_VRING * MBOX_MAX; i++) for (i = 0; i < ST_RPROC_MAX_VRING * MBOX_MAX; i++)
mbox_free_channel(ddata->mbox_chan[i]); mbox_free_channel(ddata->mbox_chan[i]);
rproc_free(rproc);
} }
static struct platform_driver st_rproc_driver = { static struct platform_driver st_rproc_driver = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment