Message ID | 20230722133012.1838083-2-jonas@kwiboo.se |
---|---|
State | Accepted |
Commit | 5e030632d49367944879e17a6d73828be22edd55 |
Delegated to: | Kever Yang |
Headers | show |
Series | rockchip: Fix PCIe and NVMe support on RK3568 | expand |
Hi Jonas, On Sat, 22 Jul 2023 at 07:30, Jonas Karlman <jonas@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 <jonas@kwiboo.se> > Reviewed-by: Kever Yang <kever.yang@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
Hi Simon, On 2023-07-24 04:28, Simon Glass wrote: > Hi Jonas, > > On Sat, 22 Jul 2023 at 07:30, Jonas Karlman <jonas@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 <jonas@kwiboo.se> >> Reviewed-by: Kever Yang <kever.yang@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 ? I can take a look at adding tests for the three dev_read_addr ptr related functions in a separate series/patch. Would really not like to delay this 3 month old fixes series, and this 2 month old patch more than what is absolutely necessary ;-) Regards, Jonas > [...] > > Regards, > Simon
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) {