[U-Boot] [PATCH 1/3] regmap: use fdt address translation
Jean-Jacques Hiblot
jjhiblot at ti.com
Tue Feb 7 15:45:15 UTC 2017
In the DTS, the addresses are defined relative to the parent bus. We need
to translate them to get the address as seen by the CPU core.
Signed-off-by: Jean-Jacques Hiblot <jjhiblot at ti.com>
---
to: sjg at chromium.org
drivers/core/regmap.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/core/regmap.c b/drivers/core/regmap.c
index c68bcba..07a6614 100644
--- a/drivers/core/regmap.c
+++ b/drivers/core/regmap.c
@@ -70,6 +70,7 @@ int regmap_init_mem(struct udevice *dev, struct regmap **mapp)
int addr_len, size_len, both_len;
int parent;
int len;
+ int index;
parent = dev->parent->of_offset;
addr_len = fdt_address_cells(blob, parent);
@@ -86,13 +87,14 @@ int regmap_init_mem(struct udevice *dev, struct regmap **mapp)
if (!map)
return -ENOMEM;
- map->base = fdtdec_get_number(cell, addr_len);
-
- for (range = map->range; count > 0;
- count--, cell += both_len, range++) {
- range->start = fdtdec_get_number(cell, addr_len);
- range->size = fdtdec_get_number(cell + addr_len, size_len);
+ for (range = map->range, index = 0; count > 0;
+ count--, cell += both_len, range++, index++) {
+ fdt_size_t sz;
+ range->start = fdtdec_get_addr_size_fixed(blob, dev->of_offset,
+ "reg", index, addr_len, size_len, &sz, true);
+ range->size = sz;
}
+ map->base = map->range[0].start;
*mapp = map;
--
1.9.1
More information about the U-Boot
mailing list