From 57af3cc32a7b39bc26987780fbca109e206d1c34 Mon Sep 17 00:00:00 2001 From: Vikas Manocha Date: Mon, 10 Apr 2017 15:03:01 -0700 Subject: [PATCH] stm32f7: stm32f746-disco: read memory info from device tree Signed-off-by: Vikas Manocha cc: Christophe KERELLO --- board/st/stm32f746-disco/stm32f746-disco.c | 42 +++++++++++++++++++++--------- drivers/ram/stm32_sdram.c | 1 - include/configs/stm32f746-disco.h | 6 +---- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/board/st/stm32f746-disco/stm32f746-disco.c b/board/st/stm32f746-disco/stm32f746-disco.c index 52c1900..dc3a9dc 100644 --- a/board/st/stm32f746-disco/stm32f746-disco.c +++ b/board/st/stm32f746-disco/stm32f746-disco.c @@ -21,32 +21,51 @@ DECLARE_GLOBAL_DATA_PTR; +int get_memory_base_size(fdt_addr_t *mr_base, fdt_addr_t *mr_size) +{ + int mr_node; + + mr_node = fdt_path_offset(gd->fdt_blob, "/memory"); + if (mr_node < 0) + return mr_node; + *mr_base = fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, mr_node, + "reg", 0, mr_size, false); + debug("mr_base = %lx, mr_size= %lx\n", *mr_base, *mr_size); + + return 0; +} int dram_init(void) { struct udevice *dev; - struct ram_info ram; int rv; + fdt_addr_t mr_base, mr_size; rv = uclass_get_device(UCLASS_RAM, 0, &dev); if (rv) { debug("DRAM init failed: %d\n", rv); return rv; } - rv = ram_get_info(dev, &ram); - if (rv) { - debug("Cannot get DRAM size: %d\n", rv); + + rv = get_memory_base_size(&mr_base, &mr_size); + if (rv) return rv; - } - debug("SDRAM base=%lx, size=%x\n", ram.base, ram.size); - gd->ram_size = ram.size; + gd->ram_size = mr_size; + gd->ram_top = mr_base; + return rv; +} + +int dram_init_banksize(void) +{ + fdt_addr_t mr_base, mr_size; + get_memory_base_size(&mr_base, &mr_size); /* * Fill in global info with description of SRAM configuration */ - gd->bd->bi_dram[0].start = CONFIG_SYS_RAM_BASE; - gd->bd->bi_dram[0].size = ram.size; + gd->bd->bi_dram[0].start = mr_base; + gd->bd->bi_dram[0].size = mr_size; - return rv; + return 0; } #ifdef CONFIG_ETH_DESIGNWARE @@ -111,7 +130,6 @@ int board_late_init(void) int board_init(void) { - gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; - + gd->bd->bi_boot_params = gd->bd->bi_dram[0].start + 0x100; return 0; } diff --git a/drivers/ram/stm32_sdram.c b/drivers/ram/stm32_sdram.c index eb1ab94..5e09f35 100644 --- a/drivers/ram/stm32_sdram.c +++ b/drivers/ram/stm32_sdram.c @@ -179,7 +179,6 @@ static int stm32_fmc_probe(struct udevice *dev) static int stm32_fmc_get_info(struct udevice *dev, struct ram_info *info) { - info->size = CONFIG_SYS_RAM_SIZE; return 0; } diff --git a/include/configs/stm32f746-disco.h b/include/configs/stm32f746-disco.h index 48ac441..349ee3a 100644 --- a/include/configs/stm32f746-disco.h +++ b/include/configs/stm32f746-disco.h @@ -16,11 +16,7 @@ * Configuration of the external SDRAM memory */ #define CONFIG_NR_DRAM_BANKS 1 -#define CONFIG_SYS_RAM_SIZE (8 * 1024 * 1024) -#define CONFIG_SYS_RAM_CS 1 -#define CONFIG_SYS_RAM_FREQ_DIV 2 -#define CONFIG_SYS_RAM_BASE 0xC0000000 -#define CONFIG_SYS_SDRAM_BASE CONFIG_SYS_RAM_BASE +#define CONFIG_SYS_RAM_FREQ_DIV 2 #define CONFIG_SYS_LOAD_ADDR 0xC0400000 #define CONFIG_LOADADDR 0xC0400000