On Fri, May 22, 2026 at 04:18:46AM -0700, Laurentiu Mihalcea wrote:
>From: Laurentiu Mihalcea <[email protected]>
>
>The imx remoteproc driver assumes that the names of the reserved memory
>regions reflect their usage (e.g. "vdevbuffer", "vdev0vring0", etc.). This
>conflicts with the devicetree specification's recommendation, which states
>that the names of the devicetree nodes should be generic.
>
>Therefore, instead of relying on the node names, use the names passed via
>the "memory-region-names" property if present. Otherwise, keep the old
>behavior.
>
>The definition of imx_rproc_rmem_to_resource() is added to a common place
>as imx_dsp_rproc.c can also use it given that it suffers from the same
>aforementioned problem.
>
>Signed-off-by: Laurentiu Mihalcea <[email protected]>
>---
> drivers/remoteproc/imx_rproc.c |  7 +++++--
> drivers/remoteproc/imx_rproc.h | 19 +++++++++++++++++++
> 2 files changed, 24 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c
>index 7f54322244ac..1ee1c658dcc1 100644
>--- a/drivers/remoteproc/imx_rproc.c
>+++ b/drivers/remoteproc/imx_rproc.c
>@@ -672,7 +672,7 @@ static int imx_rproc_prepare(struct rproc *rproc)
>               int err;
>               struct resource res;
> 
>-              err = of_reserved_mem_region_to_resource(np, i++, &res);
>+              err = imx_rproc_rmem_to_resource(np, i++, &res);
>               if (err)
>                       break;
> 
>@@ -850,11 +850,14 @@ static int imx_rproc_addr_init(struct imx_rproc *priv,
>       if (nph <= 0)
>               return 0;
> 
>+      if (!of_property_present(np, "memory-region-names"))
>+              dev_warn(dev, "using node names for carveouts should be 
>avoided\n");

Please check 'memory-regions && !memory-region-names', some demos may not
need to use memory regions.

Regards
Peng

>+
>       /* remap optional addresses */
>       for (a = 0; a < nph; a++) {
>               struct resource res;
> 
>-              err = of_reserved_mem_region_to_resource(np, a, &res);
>+              err = imx_rproc_rmem_to_resource(np, a, &res);
>               if (err) {
>                       dev_err(dev, "unable to resolve memory region\n");
>                       return err;
>diff --git a/drivers/remoteproc/imx_rproc.h b/drivers/remoteproc/imx_rproc.h
>index 0d7d48352a10..58e9daa41afe 100644
>--- a/drivers/remoteproc/imx_rproc.h
>+++ b/drivers/remoteproc/imx_rproc.h
>@@ -45,4 +45,23 @@ struct imx_rproc_dcfg {
>       u32                             reset_vector_mask;
> };
> 
>+static inline int imx_rproc_rmem_to_resource(struct device_node *np,
>+                                           int index,
>+                                           struct resource *res)
>+{
>+      int ret;
>+
>+      ret = of_reserved_mem_region_to_resource(np, index, res);
>+      if (ret)
>+              return ret;
>+
>+      /* "memory-region-names" is optional */
>+      ret = of_property_read_string_index(np, "memory-region-names",
>+                                          index, &res->name);
>+      if (ret == -EINVAL)
>+              return 0;
>+
>+      return ret;
>+}
>+
> #endif /* _IMX_RPROC_H */
>-- 
>2.43.0
>

Reply via email to