diff options
author | Stefano Babic <sbabic@denx.de> | 2015-10-23 12:35:42 +0200 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2015-10-23 12:35:42 +0200 |
commit | a69fdc7787bfa2f27eed74c2ee58c28ce932d502 (patch) | |
tree | 4731dbe1c7371c0c797641d9e755a93e614ec930 /drivers/core/device.c | |
parent | 42e550d44bc2335a18065b155cc408f30f0502ef (diff) | |
parent | 9f13b6d147dc74f2400ce18d9d4005ba53f21fd3 (diff) |
Merge branch 'master' of git://git.denx.de/u-boot
Diffstat (limited to 'drivers/core/device.c')
-rw-r--r-- | drivers/core/device.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/core/device.c b/drivers/core/device.c index 833a803696..a3dc2ca679 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -11,6 +11,7 @@ #include <common.h> #include <fdtdec.h> +#include <fdt_support.h> #include <malloc.h> #include <dm/device.h> #include <dm/device-internal.h> @@ -585,6 +586,25 @@ fdt_addr_t dev_get_addr(struct udevice *dev) #if CONFIG_IS_ENABLED(OF_CONTROL) fdt_addr_t addr; + if (CONFIG_IS_ENABLED(OF_TRANSLATE)) { + const fdt32_t *reg; + + reg = fdt_getprop(gd->fdt_blob, dev->of_offset, "reg", NULL); + if (!reg) + return FDT_ADDR_T_NONE; + + /* + * Use the full-fledged translate function for complex + * bus setups. + */ + return fdt_translate_address((void *)gd->fdt_blob, + dev->of_offset, reg); + } + + /* + * Use the "simple" translate function for less complex + * bus setups. + */ addr = fdtdec_get_addr_size_auto_parent(gd->fdt_blob, dev->parent->of_offset, dev->of_offset, "reg", |