diff options
author | Tom Rini <trini@konsulko.com> | 2015-09-24 12:28:02 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2015-09-24 12:28:02 -0400 |
commit | 7bb839d672ed3b28c7740429df4a307482868c5b (patch) | |
tree | 0713c473994463c67c13cd80c6206886509b98d6 /arch/arm/mach-uniphier/dram_init.c | |
parent | ce50916ca1415da2f44931d93397d36ac0d208a2 (diff) | |
parent | a4bb44b027705f8c05fc525180cabaa3769247bb (diff) | |
download | u-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.c | 51 |
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); + } +} |