ARM: uniphier: parse device tree to determine DRAM base and size

Device tree specifies the available memory ranges in its "/memory"
node.  Use it to simplify the CONFIG defines.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
diff --git a/arch/arm/mach-uniphier/dram_init.c b/arch/arm/mach-uniphier/dram_init.c
index 4b8c938..32cc448 100644
--- a/arch/arm/mach-uniphier/dram_init.c
+++ b/arch/arm/mach-uniphier/dram_init.c
@@ -1,16 +1,59 @@
 /*
- * Copyright (C) 2012-2015 Panasonic Corporation
- *   Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
+ * Copyright (C) 2012-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
  *
  * SPDX-License-Identifier:	GPL-2.0+
  */
 
 #include <common.h>
+#include <libfdt.h>
+#include <linux/err.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static const void *get_memory_reg_prop(const void *fdt, int *lenp)
+{
+	int offset;
+
+	offset = fdt_path_offset(fdt, "/memory");
+	if (offset < 0)
+		return NULL;
+
+	return fdt_getprop(fdt, offset, "reg", lenp);
+}
 
 int dram_init(void)
 {
-	DECLARE_GLOBAL_DATA_PTR;
-	gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
+	const fdt32_t *val;
+	int len;
+
+	val = get_memory_reg_prop(gd->fdt_blob, &len);
+	if (len < sizeof(*val))
+		return -EINVAL;
+
+	gd->ram_size = fdt32_to_cpu(*(val + 1));
+
+	debug("DRAM size = %08lx\n", gd->ram_size);
 
 	return 0;
 }
+
+void dram_init_banksize(void)
+{
+	const fdt32_t *val;
+	int len, i;
+
+	val = get_memory_reg_prop(gd->fdt_blob, &len);
+	if (len < 0)
+		return;
+
+	len /= sizeof(*val);
+	len /= 2;
+
+	for (i = 0; i < len; i++) {
+		gd->bd->bi_dram[i].start = fdt32_to_cpu(*val++);
+		gd->bd->bi_dram[i].size = fdt32_to_cpu(*val++);
+
+		debug("DRAM bank %d: start = %08lx, size = %08lx\n",
+		      i, gd->bd->bi_dram[i].start, gd->bd->bi_dram[i].size);
+	}
+}