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