From 87e4f2b3392c2b68d34cdada8b3f3fbe76e22221 Mon Sep 17 00:00:00 2001 From: Przemyslaw Marczak Date: Thu, 18 Sep 2014 16:20:29 +0200 Subject: [PATCH] samsung:board: dram_init(): alloc memory to store fdt dram info For CONFIG_OF_MULTI the dram_init() function gets memory information from the device tree blob by the call to fdtdec_decode_memory(). The same is done second time in dram_init_banksize() - this was the simplest because board info structure is not initialized at dram_init() stage. This change uses malloc and gd->priv pointer to store the memory banks parameters and next uses it in dram_init_banksize(). Thanks to this change, the boot time decreases, because, the function fdtdec_decode_memory() is called only once. Change-Id: I8f357c6a641d4440f32d2fe24d7e1e2dc5bc4a3d Signed-off-by: Przemyslaw Marczak --- board/samsung/common/board.c | 31 ++++++++++++++++--------------- board/samsung/common/misc.c | 3 +++ include/samsung/misc.h | 5 +++++ include/samsung/multi-plat.h | 13 +++++++++++++ 4 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 include/samsung/multi-plat.h diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c index c5aa084..de245f3 100644 --- a/board/samsung/common/board.c +++ b/board/samsung/common/board.c @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include #include #include @@ -36,6 +38,7 @@ #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -121,15 +124,19 @@ int dram_init(void) { unsigned int i; #ifdef CONFIG_FDTDEC_MEMORY - int dram_banks; + struct memory_info *mem; - uint64_t mem_size[CONFIG_NR_DRAM_BANKS]; + mem = malloc(sizeof(struct memory_info)); - dram_banks = fdtdec_decode_memory(gd->fdt_blob, NULL, mem_size, + mem->banks = fdtdec_decode_memory(gd->fdt_blob, &mem->addr[0], + &mem->size[0], CONFIG_NR_DRAM_BANKS); - for (i = 0; i < dram_banks; i++) - gd->ram_size += (uint32_t)mem_size[i]; + for (i = 0; i < mem->banks; i++) + gd->ram_size += (uint32_t)mem->size[i]; + + /* Save the mem_info for dram_init_banksize() */ + gd->priv = mem; #else unsigned long addr; @@ -145,17 +152,11 @@ int dram_init_banksize(void) { unsigned int i; #ifdef CONFIG_FDTDEC_MEMORY - int dram_banks; - - uint64_t mem_addr[CONFIG_NR_DRAM_BANKS]; - uint64_t mem_size[CONFIG_NR_DRAM_BANKS]; - - dram_banks = fdtdec_decode_memory(gd->fdt_blob, mem_addr, mem_size, - CONFIG_NR_DRAM_BANKS); + struct memory_info *mem = gd->priv; - for (i = 0; i < dram_banks; i++) { - gd->bd->bi_dram[i].start = (uint32_t)mem_addr[i]; - gd->bd->bi_dram[i].size = (uint32_t)mem_size[i]; + for (i = 0; i < mem->banks ; i++) { + gd->bd->bi_dram[i].start = (uint32_t)mem->addr[i]; + gd->bd->bi_dram[i].size = (uint32_t)mem->size[i]; } #else unsigned long addr, size; diff --git a/board/samsung/common/misc.c b/board/samsung/common/misc.c index f8a035b..d34ff2e 100644 --- a/board/samsung/common/misc.c +++ b/board/samsung/common/misc.c @@ -103,6 +103,9 @@ void set_board_info(void) if (!bdtype) bdtype = ""; +#ifdef CONFIG_OF_MULTI + bdname = get_board_name(); +#endif sprintf(info, "%s%s", bdname, bdtype); env_set("board_name", info); #endif diff --git a/include/samsung/misc.h b/include/samsung/misc.h index a61b099..d39f3e1 100644 --- a/include/samsung/misc.h +++ b/include/samsung/misc.h @@ -63,8 +63,13 @@ void draw_logo(void); char *get_dfu_alt_system(char *interface, char *devstr); char *get_dfu_alt_boot(char *interface, char *devstr); #endif +#ifdef CONFIG_BOARD_TYPES void set_board_type(void); void set_board_revision(void); const char *get_board_type(void); +#ifdef CONFIG_OF_MULTI +const char *get_board_name(void); +#endif +#endif #endif /* __SAMSUNG_MISC_COMMON_H__ */ diff --git a/include/samsung/multi-plat.h b/include/samsung/multi-plat.h new file mode 100644 index 0000000..29f5f50 --- /dev/null +++ b/include/samsung/multi-plat.h @@ -0,0 +1,13 @@ +#ifndef __INCLUDE__MULTI_PLAT__H__ +#define __INCLUDE__MULTI_PLAT__H__ + +#include + +#ifdef CONFIG_OF_MULTI +struct memory_info { + uint64_t addr[CONFIG_NR_DRAM_BANKS]; + uint64_t size[CONFIG_NR_DRAM_BANKS]; + uint32_t banks; +}; +#endif +#endif \ No newline at end of file -- 2.7.4