Message ID | 1486482317-5798-2-git-send-email-jjhiblot@ti.com |
---|---|
State | Superseded |
Delegated to: | Tom Rini |
Headers | show |
+Stephen On 7 February 2017 at 08:45, Jean-Jacques Hiblot <jjhiblot@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@ti.com> > --- > > to: sjg@chromium.org > > drivers/core/regmap.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) Reviewed-by: Simon Glass <sjg@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 >
On 02/10/2017 09:22 AM, Simon Glass wrote: > +Stephen > > On 7 February 2017 at 08:45, Jean-Jacques Hiblot <jjhiblot@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@ti.com> >> --- >> >> to: sjg@chromium.org >> >> drivers/core/regmap.c | 14 ++++++++------ >> 1 file changed, 8 insertions(+), 6 deletions(-) > > Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Stephen Warren <swarren@nvidia.com>
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;
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@ti.com> --- to: sjg@chromium.org drivers/core/regmap.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)