diff mbox

[U-Boot,1/3] regmap: use fdt address translation

Message ID 1486482317-5798-2-git-send-email-jjhiblot@ti.com
State Superseded
Delegated to: Tom Rini
Headers show

Commit Message

Jean-Jacques Hiblot Feb. 7, 2017, 3:45 p.m. UTC
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(-)

Comments

Simon Glass Feb. 10, 2017, 4:22 p.m. UTC | #1
+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
>
Stephen Warren Feb. 10, 2017, 4:42 p.m. UTC | #2
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 mbox

Patch

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;