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)
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",
* *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");