Hi Jonas, On Sat, 22 Jul 2023 at 07:30, Jonas Karlman <jo...@kwiboo.se> wrote: > > Add dev_read_addr_size_index_ptr function with the same functionality as > dev_read_addr_size_index, but instead a return pointer is given. > Use map_sysmem() function as cast for the return. > > Signed-off-by: Jonas Karlman <jo...@kwiboo.se> > Reviewed-by: Kever Yang <kever.y...@rock-chips.com> > --- > v4: > - No change > > v3: > - Collect r-b tag > > v2: > - New patch > > drivers/core/read.c | 11 +++++++++++ > include/dm/read.h | 21 +++++++++++++++++++++ > 2 files changed, 32 insertions(+) >
So how about a test in test/dm/read.c ? > diff --git a/drivers/core/read.c b/drivers/core/read.c > index 5749473a6cae..49066b59cdaf 100644 > --- a/drivers/core/read.c > +++ b/drivers/core/read.c > @@ -150,6 +150,17 @@ fdt_addr_t dev_read_addr_size_index(const struct udevice > *dev, int index, > return devfdt_get_addr_size_index(dev, index, size); > } > > +void *dev_read_addr_size_index_ptr(const struct udevice *dev, int index, > + fdt_size_t *size) > +{ > + fdt_addr_t addr = dev_read_addr_size_index(dev, index, size); > + > + if (addr == FDT_ADDR_T_NONE) > + return NULL; > + > + return map_sysmem(addr, 0); > +} > + > void *dev_remap_addr_index(const struct udevice *dev, int index) > { > fdt_addr_t addr = dev_read_addr_index(dev, index); > diff --git a/include/dm/read.h b/include/dm/read.h > index 137f2a52a298..c2615f72f405 100644 > --- a/include/dm/read.h > +++ b/include/dm/read.h > @@ -246,6 +246,20 @@ void *dev_read_addr_index_ptr(const struct udevice *dev, > int index); > fdt_addr_t dev_read_addr_size_index(const struct udevice *dev, int index, > fdt_size_t *size); > > +/** > + * dev_read_addr_size_index_ptr() - Get the indexed reg property of a device > + * as a pointer > + * > + * @dev: Device to read from > + * @index: the 'reg' property can hold a list of <addr, size> pairs > + * and @index is used to select which one is required > + * @size: place to put size value (on success) > + * > + * Return: pointer or NULL if not found > + */ > +void *dev_read_addr_size_index_ptr(const struct udevice *dev, int index, > + fdt_size_t *size); > + > /** > * dev_remap_addr_index() - Get the indexed reg property of a device > * as a memory-mapped I/O pointer > @@ -952,6 +966,13 @@ static inline fdt_addr_t dev_read_addr_size_index(const > struct udevice *dev, > return devfdt_get_addr_size_index(dev, index, size); > } > > +static inline void *dev_read_addr_size_index_ptr(const struct udevice *dev, > + int index, > + fdt_size_t *size) > +{ > + return devfdt_get_addr_size_index_ptr(dev, index, size); > +} > + > static inline fdt_addr_t dev_read_addr_name(const struct udevice *dev, > const char *name) > { > -- > 2.41.0 > Regards, Simon