Message ID | 1461215494-8613-1-git-send-email-sr@denx.de |
---|---|
State | Accepted |
Commit | 28027521be95d27fcb83669e09ce3563bb4dd977 |
Delegated to: | Heiko Schocher |
Headers | show |
On Thu, Apr 21, 2016 at 1:11 PM, Stefan Roese <sr@denx.de> wrote: > On some platforms (e.g. x86), the return value of dev_get_addr() can't > be assigned to a pointer type variable directly. As there might be a > difference between the size of fdt_addr_t and the pointer type. On > x86 for example, "fdt_addr_t" is 64bit but "void *" only 32bit. So > assigning the register base directly in dev_get_addr() results in this > compilation warning: > warning: cast to pointer from integer of different size > > This patch introduces the new function dev_get_addr_ptr() that > returns a pointer to the 'reg' address that can be used by drivers > in this case. > > Signed-off-by: Stefan Roese <sr@denx.de> > Reviewed-by: Simon Glass <sjg@chromium.org> > --- > v2: > - Mention error condition in function prototype as suggested by Simon > > drivers/core/device.c | 5 +++++ > include/dm/device.h | 10 ++++++++++ > 2 files changed, 15 insertions(+) > Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
On 20 April 2016 at 23:11, Stefan Roese <sr@denx.de> wrote: > On some platforms (e.g. x86), the return value of dev_get_addr() can't > be assigned to a pointer type variable directly. As there might be a > difference between the size of fdt_addr_t and the pointer type. On > x86 for example, "fdt_addr_t" is 64bit but "void *" only 32bit. So > assigning the register base directly in dev_get_addr() results in this > compilation warning: > warning: cast to pointer from integer of different size > > This patch introduces the new function dev_get_addr_ptr() that > returns a pointer to the 'reg' address that can be used by drivers > in this case. > > Signed-off-by: Stefan Roese <sr@denx.de> > Reviewed-by: Simon Glass <sjg@chromium.org> > --- > v2: > - Mention error condition in function prototype as suggested by Simon > > drivers/core/device.c | 5 +++++ > include/dm/device.h | 10 ++++++++++ > 2 files changed, 15 insertions(+) Acked-by: Simon Glass <sjg@chromium.org>
diff --git a/drivers/core/device.c b/drivers/core/device.c index 269087a..1322991 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -673,6 +673,11 @@ fdt_addr_t dev_get_addr(struct udevice *dev) return dev_get_addr_index(dev, 0); } +void *dev_get_addr_ptr(struct udevice *dev) +{ + return (void *)(uintptr_t)dev_get_addr_index(dev, 0); +} + bool device_has_children(struct udevice *dev) { return !list_empty(&dev->child_head); diff --git a/include/dm/device.h b/include/dm/device.h index dad7591..8970fc0 100644 --- a/include/dm/device.h +++ b/include/dm/device.h @@ -454,6 +454,16 @@ int device_find_next_child(struct udevice **devp); fdt_addr_t dev_get_addr(struct udevice *dev); /** + * dev_get_addr_ptr() - Return pointer to the address of the reg property + * of a device + * + * @dev: Pointer to a device + * + * @return Pointer to addr, or NULL if there is no such property + */ +void *dev_get_addr_ptr(struct udevice *dev); + +/** * dev_get_addr_index() - Get the indexed reg property of a device * * @dev: Pointer to a device