From: Przemyslaw Marczak
Date: Thu, 18 Sep 2014 14:20:29 +0000 (+0200)
Subject: samsung:board: dram_init(): alloc memory to store fdt dram info
X-Git-Tag: accepted/tizen/unified/20191107.062134~229
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=50b6d235201981371761814015e4c250735b7bc0;p=platform%2Fkernel%2Fu-boot.git
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
---
diff --git a/board/samsung/common/board.c b/board/samsung/common/board.c
index fdd13c4..ae0b8d4 100644
--- a/board/samsung/common/board.c
+++ b/board/samsung/common/board.c
@@ -20,6 +20,8 @@
#include
#include
#include
+#include
+#include
#include
#include
#include
@@ -28,6 +30,7 @@
#include
#include
#include
+#include
DECLARE_GLOBAL_DATA_PTR;
@@ -99,15 +102,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;
@@ -123,17 +130,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 8199647..63b5931 100644
--- a/board/samsung/common/misc.c
+++ b/board/samsung/common/misc.c
@@ -101,6 +101,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