On Thu, Jul 30, 2026 at 09:34:10AM -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.
This relies on a hidden ABI by parsing the remote node's name, and also bypasses the DT binding check since there is no way to restrict the node name of a memory region. Frank > > 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 | 13 +++++++++++-- > drivers/remoteproc/imx_rproc.h | 21 +++++++++++++++++++++ > 2 files changed, 32 insertions(+), 2 deletions(-) > > diff --git a/drivers/remoteproc/imx_rproc.c b/drivers/remoteproc/imx_rproc.c > index 745ce52cd822..ce9bdfc1fa98 100644 > --- a/drivers/remoteproc/imx_rproc.c > +++ b/drivers/remoteproc/imx_rproc.c > @@ -643,7 +643,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; > > @@ -818,11 +818,20 @@ 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"); > + } else { > + if (nph != of_property_count_strings(np, > "memory-region-names")) { > + dev_err(dev, "invalid reserved memory name count\n"); > + return -EINVAL; > + } > + } > + > /* 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..3632bc375c71 100644 > --- a/drivers/remoteproc/imx_rproc.h > +++ b/drivers/remoteproc/imx_rproc.h > @@ -7,6 +7,8 @@ > #ifndef _IMX_RPROC_H > #define _IMX_RPROC_H > > +#include <linux/of_reserved_mem.h> > + > /* address translation table */ > struct imx_rproc_att { > u32 da; /* device address (From Cortex M4 view)*/ > @@ -45,4 +47,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.53.0 >

