From: Andrew Davis <afd@ti.com>
To: Bjorn Andersson <andersson@kernel.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: <linux-remoteproc@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, "Andrew Davis" <afd@ti.com>
Subject: [PATCH 3/3] remoteproc: da8xx: Reorder resource fetching in probe()
Date: Mon, 2 Mar 2026 13:56:16 -0600 [thread overview]
Message-ID: <20260302195616.312378-3-afd@ti.com> (raw)
In-Reply-To: <20260302195616.312378-1-afd@ti.com>
Currently several resource are fetched before we allocate our instance
data struct. The is unlike most other drivers that fill in the instance
data with resources as they are fetched. Move these down which is more
natural and also removes the need for several temporarily locals.
Signed-off-by: Andrew Davis <afd@ti.com>
---
drivers/remoteproc/da8xx_remoteproc.c | 75 ++++++++++++---------------
1 file changed, 32 insertions(+), 43 deletions(-)
diff --git a/drivers/remoteproc/da8xx_remoteproc.c b/drivers/remoteproc/da8xx_remoteproc.c
index f44bee303eb5e..ea82500165cb6 100644
--- a/drivers/remoteproc/da8xx_remoteproc.c
+++ b/drivers/remoteproc/da8xx_remoteproc.c
@@ -242,45 +242,9 @@ static int da8xx_rproc_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev;
struct da8xx_rproc *drproc;
struct rproc *rproc;
- struct irq_data *irq_data;
- struct clk *dsp_clk;
- struct reset_control *dsp_reset;
- void __iomem *chipsig;
- void __iomem *bootreg;
int irq;
int ret;
- irq = platform_get_irq(pdev, 0);
- if (irq < 0)
- return irq;
-
- irq_data = irq_get_irq_data(irq);
- if (!irq_data)
- return dev_err_probe(dev, -EINVAL, "irq_get_irq_data(%d): NULL\n", irq);
-
- bootreg = devm_platform_ioremap_resource_byname(pdev, "host1cfg");
- if (IS_ERR(bootreg))
- return PTR_ERR(bootreg);
-
- chipsig = devm_platform_ioremap_resource_byname(pdev, "chipsig");
- if (IS_ERR(chipsig))
- return PTR_ERR(chipsig);
-
- dsp_clk = devm_clk_get(dev, NULL);
- if (IS_ERR(dsp_clk))
- return dev_err_probe(dev, PTR_ERR(dsp_clk), "clk_get error\n");
-
- dsp_reset = devm_reset_control_get_exclusive(dev, NULL);
- if (IS_ERR(dsp_reset))
- return dev_err_probe(dev, PTR_ERR(dsp_reset), "unable to get reset control\n");
-
- if (dev->of_node) {
- ret = of_reserved_mem_device_init(dev);
- if (ret)
- return dev_err_probe(dev, ret, "device does not have specific CMA pool\n");
- devm_add_action_or_reset(&pdev->dev, da8xx_rproc_mem_release, &pdev->dev);
- }
-
rproc = devm_rproc_alloc(dev, "dsp", &da8xx_rproc_ops, da8xx_fw_name,
sizeof(*drproc));
if (!rproc)
@@ -291,14 +255,43 @@ static int da8xx_rproc_probe(struct platform_device *pdev)
drproc = rproc->priv;
drproc->rproc = rproc;
- drproc->dsp_clk = dsp_clk;
- drproc->dsp_reset = dsp_reset;
rproc->has_iommu = false;
+ drproc->dsp_clk = devm_clk_get(dev, NULL);
+ if (IS_ERR(drproc->dsp_clk))
+ return dev_err_probe(dev, PTR_ERR(drproc->dsp_clk), "clk_get error\n");
+
+ drproc->dsp_reset = devm_reset_control_get_exclusive(dev, NULL);
+ if (IS_ERR(drproc->dsp_reset))
+ return dev_err_probe(dev, PTR_ERR(drproc->dsp_reset), "unable to get reset control\n");
+
+ if (dev->of_node) {
+ ret = of_reserved_mem_device_init(dev);
+ if (ret)
+ return dev_err_probe(dev, ret, "device does not have specific CMA pool\n");
+ devm_add_action_or_reset(&pdev->dev, da8xx_rproc_mem_release, &pdev->dev);
+ }
+
ret = da8xx_rproc_get_internal_memories(pdev, drproc);
if (ret)
return ret;
+ irq = platform_get_irq(pdev, 0);
+ if (irq < 0)
+ return irq;
+
+ drproc->irq_data = irq_get_irq_data(irq);
+ if (!drproc->irq_data)
+ return dev_err_probe(dev, -EINVAL, "irq_get_irq_data(%d): NULL\n", irq);
+
+ drproc->chipsig = devm_platform_ioremap_resource_byname(pdev, "chipsig");
+ if (IS_ERR(drproc->chipsig))
+ return PTR_ERR(drproc->chipsig);
+
+ drproc->bootreg = devm_platform_ioremap_resource_byname(pdev, "host1cfg");
+ if (IS_ERR(drproc->bootreg))
+ return PTR_ERR(drproc->bootreg);
+
/* everything the ISR needs is now setup, so hook it up */
ret = devm_request_threaded_irq(dev, irq, da8xx_rproc_callback,
handle_event, 0, "da8xx-remoteproc",
@@ -311,14 +304,10 @@ static int da8xx_rproc_probe(struct platform_device *pdev)
* *not* in reset, but da8xx_rproc_start() needs the DSP to be
* held in reset at the time it is called.
*/
- ret = reset_control_assert(dsp_reset);
+ ret = reset_control_assert(drproc->dsp_reset);
if (ret)
return ret;
- drproc->chipsig = chipsig;
- drproc->bootreg = bootreg;
- drproc->irq_data = irq_data;
-
ret = devm_rproc_add(dev, rproc);
if (ret)
return dev_err_probe(dev, ret, "rproc_add failed\n");
--
2.39.2
next prev parent reply other threads:[~2026-03-02 19:56 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-02 19:56 [PATCH 1/3] remoteproc: da8xx: Use dev_err_probe() Andrew Davis
2026-03-02 19:56 ` [PATCH 2/3] remoteproc: da8xx: Remove unused local struct data Andrew Davis
2026-03-02 19:56 ` Andrew Davis [this message]
2026-03-06 17:34 ` [PATCH 1/3] remoteproc: da8xx: Use dev_err_probe() Mathieu Poirier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260302195616.312378-3-afd@ti.com \
--to=afd@ti.com \
--cc=andersson@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=mathieu.poirier@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox