瀏覽代碼

regmap: use fdt address translation

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>
Jean-Jacques Hiblot 8 年之前
父節點
當前提交
1804044f30
共有 1 個文件被更改,包括 8 次插入6 次删除
  1. 8 6
      drivers/core/regmap.c

+ 8 - 6
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 addr_len, size_len, both_len;
 	int parent;
 	int parent;
 	int len;
 	int len;
+	int index;
 
 
 	parent = dev_of_offset(dev->parent);
 	parent = dev_of_offset(dev->parent);
 	addr_len = fdt_address_cells(blob, parent);
 	addr_len = fdt_address_cells(blob, parent);
@@ -86,13 +87,14 @@ int regmap_init_mem(struct udevice *dev, struct regmap **mapp)
 	if (!map)
 	if (!map)
 		return -ENOMEM;
 		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;
 	*mapp = map;