[U-Boot] [PATCH 1/3] regmap: use fdt address translation
Simon Glass
sjg at chromium.org
Fri Feb 10 16:22:47 UTC 2017
+Stephen
On 7 February 2017 at 08:45, Jean-Jacques Hiblot <jjhiblot at ti.com> wrote:
> 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(-)
Reviewed-by: Simon Glass <sjg at chromium.org>
>
> 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