Message ID | 20161130062447.3708-1-sr@denx.de |
---|---|
State | Accepted |
Commit | 13f3fcac533ae7d86083ed9eefb36f78ee851f10 |
Delegated to: | Simon Glass |
Headers | show |
On 29 November 2016 at 23:24, Stefan Roese <sr@denx.de> wrote: > The currently available functions accessing the 'reg' property of a > device only retrieve the address. Sometimes its also necessary to > retrieve the size described by the 'reg' property. This patch adds > the new function dev_get_addr_size_index() which retrieves both, > the address and the size described by the 'reg' property. > > Signed-off-by: Stefan Roese <sr@denx.de> > Cc: Simon Glass <sjg@chromium.org> > --- > v2: > - Account 'index' in fdtdec_get_addr_size_auto_noparent() as > spotted by Simon > > drivers/core/device.c | 22 ++++++++++++++++++++++ > include/dm/device.h | 16 ++++++++++++++++ > 2 files changed, 38 insertions(+) > Acked-by: Simon Glass <sjg@chromium.org> But please check below. > diff --git a/drivers/core/device.c b/drivers/core/device.c > index dcf5d9df7d..ed553d70a6 100644 > --- a/drivers/core/device.c > +++ b/drivers/core/device.c > @@ -693,6 +693,28 @@ fdt_addr_t dev_get_addr_index(struct udevice *dev, int index) > #endif > } > > +fdt_addr_t dev_get_addr_size_index(struct udevice *dev, int index, > + fdt_size_t *size) > +{ > +#if CONFIG_IS_ENABLED(OF_CONTROL) > + /* > + * Only get the size in this first call. We'll get the addr in the > + * next call to the exisiting dev_get_xxx function which handles > + * all config options. > + */ > + fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, dev->of_offset, > + "reg", index, size, false); The return value is not checked here. Is this because the dev_get_addr_index() function will return the same error? > + > + /* > + * Get the base address via the existing function which handles > + * all Kconfig cases > + */ > + return dev_get_addr_index(dev, index); > +#else > + return FDT_ADDR_T_NONE; > +#endif > +} > + [...] Regards, Simon
Hi Simon, On 01.12.2016 03:19, Simon Glass wrote: > On 29 November 2016 at 23:24, Stefan Roese <sr@denx.de> wrote: >> The currently available functions accessing the 'reg' property of a >> device only retrieve the address. Sometimes its also necessary to >> retrieve the size described by the 'reg' property. This patch adds >> the new function dev_get_addr_size_index() which retrieves both, >> the address and the size described by the 'reg' property. >> >> Signed-off-by: Stefan Roese <sr@denx.de> >> Cc: Simon Glass <sjg@chromium.org> >> --- >> v2: >> - Account 'index' in fdtdec_get_addr_size_auto_noparent() as >> spotted by Simon >> >> drivers/core/device.c | 22 ++++++++++++++++++++++ >> include/dm/device.h | 16 ++++++++++++++++ >> 2 files changed, 38 insertions(+) >> > > Acked-by: Simon Glass <sjg@chromium.org> > > But please check below. > >> diff --git a/drivers/core/device.c b/drivers/core/device.c >> index dcf5d9df7d..ed553d70a6 100644 >> --- a/drivers/core/device.c >> +++ b/drivers/core/device.c >> @@ -693,6 +693,28 @@ fdt_addr_t dev_get_addr_index(struct udevice *dev, int index) >> #endif >> } >> >> +fdt_addr_t dev_get_addr_size_index(struct udevice *dev, int index, >> + fdt_size_t *size) >> +{ >> +#if CONFIG_IS_ENABLED(OF_CONTROL) >> + /* >> + * Only get the size in this first call. We'll get the addr in the >> + * next call to the exisiting dev_get_xxx function which handles >> + * all config options. >> + */ >> + fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, dev->of_offset, >> + "reg", index, size, false); > > The return value is not checked here. Is this because the > dev_get_addr_index() function will return the same error? Exactly. I didn't check the return value deliberately, as mentioned in the comment above. I thought this would be clear enough but if you don't think so, I can extend the comment a bit more. Thanks, Stefan
On 30 November 2016 at 22:54, Stefan Roese <sr@denx.de> wrote: > Hi Simon, > > > On 01.12.2016 03:19, Simon Glass wrote: >> >> On 29 November 2016 at 23:24, Stefan Roese <sr@denx.de> wrote: >>> >>> The currently available functions accessing the 'reg' property of a >>> device only retrieve the address. Sometimes its also necessary to >>> retrieve the size described by the 'reg' property. This patch adds >>> the new function dev_get_addr_size_index() which retrieves both, >>> the address and the size described by the 'reg' property. >>> >>> Signed-off-by: Stefan Roese <sr@denx.de> >>> Cc: Simon Glass <sjg@chromium.org> >>> --- >>> v2: >>> - Account 'index' in fdtdec_get_addr_size_auto_noparent() as >>> spotted by Simon >>> >>> drivers/core/device.c | 22 ++++++++++++++++++++++ >>> include/dm/device.h | 16 ++++++++++++++++ >>> 2 files changed, 38 insertions(+) >>> >> >> Acked-by: Simon Glass <sjg@chromium.org> >> >> But please check below. >> >>> diff --git a/drivers/core/device.c b/drivers/core/device.c >>> index dcf5d9df7d..ed553d70a6 100644 >>> --- a/drivers/core/device.c >>> +++ b/drivers/core/device.c >>> @@ -693,6 +693,28 @@ fdt_addr_t dev_get_addr_index(struct udevice *dev, >>> int index) >>> #endif >>> } >>> >>> +fdt_addr_t dev_get_addr_size_index(struct udevice *dev, int index, >>> + fdt_size_t *size) >>> +{ >>> +#if CONFIG_IS_ENABLED(OF_CONTROL) >>> + /* >>> + * Only get the size in this first call. We'll get the addr in >>> the >>> + * next call to the exisiting dev_get_xxx function which handles >>> + * all config options. >>> + */ >>> + fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, dev->of_offset, >>> + "reg", index, size, false); >> >> >> The return value is not checked here. Is this because the >> dev_get_addr_index() function will return the same error? > > > Exactly. I didn't check the return value deliberately, as mentioned > in the comment above. I thought this would be clear enough but if > you don't think so, I can extend the comment a bit more. > > Thanks, > Stefan Applied to u-boot-dm, thanks!
diff --git a/drivers/core/device.c b/drivers/core/device.c index dcf5d9df7d..ed553d70a6 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -693,6 +693,28 @@ fdt_addr_t dev_get_addr_index(struct udevice *dev, int index) #endif } +fdt_addr_t dev_get_addr_size_index(struct udevice *dev, int index, + fdt_size_t *size) +{ +#if CONFIG_IS_ENABLED(OF_CONTROL) + /* + * Only get the size in this first call. We'll get the addr in the + * next call to the exisiting dev_get_xxx function which handles + * all config options. + */ + fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, dev->of_offset, + "reg", index, size, false); + + /* + * Get the base address via the existing function which handles + * all Kconfig cases + */ + return dev_get_addr_index(dev, index); +#else + return FDT_ADDR_T_NONE; +#endif +} + fdt_addr_t dev_get_addr_name(struct udevice *dev, const char *name) { #if CONFIG_IS_ENABLED(OF_CONTROL) diff --git a/include/dm/device.h b/include/dm/device.h index babf8ac8f0..9948bd49fa 100644 --- a/include/dm/device.h +++ b/include/dm/device.h @@ -497,6 +497,22 @@ void *dev_map_physmem(struct udevice *dev, unsigned long size); fdt_addr_t dev_get_addr_index(struct udevice *dev, int index); /** + * dev_get_addr_size_index() - Get the indexed reg property of a device + * + * Returns the address and size specified in the 'reg' property of a device. + * + * @dev: Pointer to a device + * @index: the 'reg' property can hold a list of <addr, size> pairs + * and @index is used to select which one is required + * @size: Pointer to size varible - this function returns the size + * specified in the 'reg' property here + * + * @return addr + */ +fdt_addr_t dev_get_addr_size_index(struct udevice *dev, int index, + fdt_size_t *size); + +/** * dev_get_addr_name() - Get the reg property of a device, indexed by name * * @dev: Pointer to a device
The currently available functions accessing the 'reg' property of a device only retrieve the address. Sometimes its also necessary to retrieve the size described by the 'reg' property. This patch adds the new function dev_get_addr_size_index() which retrieves both, the address and the size described by the 'reg' property. Signed-off-by: Stefan Roese <sr@denx.de> Cc: Simon Glass <sjg@chromium.org> --- v2: - Account 'index' in fdtdec_get_addr_size_auto_noparent() as spotted by Simon drivers/core/device.c | 22 ++++++++++++++++++++++ include/dm/device.h | 16 ++++++++++++++++ 2 files changed, 38 insertions(+)