summaryrefslogtreecommitdiff
path: root/arch/arm/mach-uniphier/dram_init.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2015-09-24 12:28:02 -0400
committerTom Rini <trini@konsulko.com>2015-09-24 12:28:02 -0400
commit7bb839d672ed3b28c7740429df4a307482868c5b (patch)
tree0713c473994463c67c13cd80c6206886509b98d6 /arch/arm/mach-uniphier/dram_init.c
parentce50916ca1415da2f44931d93397d36ac0d208a2 (diff)
parenta4bb44b027705f8c05fc525180cabaa3769247bb (diff)
downloadu-boot-imx-7bb839d672ed3b28c7740429df4a307482868c5b.zip
u-boot-imx-7bb839d672ed3b28c7740429df4a307482868c5b.tar.gz
u-boot-imx-7bb839d672ed3b28c7740429df4a307482868c5b.tar.bz2
Merge branch 'master' of git://git.denx.de/u-boot-uniphier
Diffstat (limited to 'arch/arm/mach-uniphier/dram_init.c')
-rw-r--r--arch/arm/mach-uniphier/dram_init.c51
1 files changed, 47 insertions, 4 deletions
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);
+ }
+}