[U-Boot] [PATCH 3/3] Consolidate arch-specific mem_malloc_init() implementations

Peter Tyser
2009-08-22T04:05:21Z

Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
---
common/dlmalloc.c | 15 +++++++++++++++
include/malloc.h | 2 ++
lib_arm/board.c | 10 ----------
lib_avr32/board.c | 15 ++-------------
lib_blackfin/board.c | 9 ---------
lib_m68k/board.c | 14 +-------------
lib_microblaze/board.c | 20 +++++---------------
lib_mips/board.c | 14 +-------------
lib_nios/board.c | 14 ++------------
lib_nios2/board.c | 14 ++------------
lib_ppc/board.c | 14 +-------------
lib_sh/board.c | 9 ---------
lib_sparc/board.c | 21 +--------------------
13 files changed, 32 insertions(+), 139 deletions(-)

diff --git a/common/dlmalloc.c b/common/dlmalloc.c
index f3bced4..241db8c 100644
--- a/common/dlmalloc.c
+++ b/common/dlmalloc.c
@@ -1520,6 +1520,21 @@ void *sbrk(ptrdiff_t increment)
return (void *)old;
}

+#ifndef CONFIG_X86
+/*
+ * x86 boards use a slightly different init sequence thus they implement
+ * their own version of mem_malloc_init()
+ */
+void mem_malloc_init(ulong start, ulong size)
+{
+ mem_malloc_start = start;
+ mem_malloc_end = start + size;
+ mem_malloc_brk = start;
+
+ memset((void *)mem_malloc_start, 0, size);
+}
+#endif
+
/* field-extraction macros */

#define first(b) ((b)->fd)
diff --git a/include/malloc.h b/include/malloc.h
index 0382169..3e145ad 100644
--- a/include/malloc.h
+++ b/include/malloc.h
@@ -944,6 +944,8 @@ extern ulong mem_malloc_start;
extern ulong mem_malloc_end;
extern ulong mem_malloc_brk;

+void mem_malloc_init(ulong start, ulong size);
+
#ifdef __cplusplus
}; /* end of extern "C" */
#endif
diff --git a/lib_arm/board.c b/lib_arm/board.c
index a923ddc..d38db7a 100644
--- a/lib_arm/board.c
+++ b/lib_arm/board.c
@@ -86,16 +86,6 @@ extern void rtl8019_get_enetaddr (uchar * addr);
#include <i2c.h>
#endif

-static
-void mem_malloc_init (ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start;
-
- memset ((void *)mem_malloc_start, 0, size);
-}
-

/************************************************************************
* Coloured LED functionality
diff --git a/lib_avr32/board.c b/lib_avr32/board.c
index ca1bd6f..29999d8 100644
--- a/lib_avr32/board.c
+++ b/lib_avr32/board.c
@@ -49,19 +49,6 @@ static int __do_nothing(void)
int board_postclk_init(void) __attribute__((weak, alias("__do_nothing")));
int board_early_init_r(void) __attribute__((weak, alias("__do_nothing")));

-/* The malloc area is right below the monitor image in RAM */
-static void mem_malloc_init(ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start;
-
- printf("malloc: Using memory from 0x%08lx to 0x%08lx\n",
- mem_malloc_start, mem_malloc_end);
-
- memset((void *)mem_malloc_start, 0, size);
-}
-
#ifdef CONFIG_SYS_DMA_ALLOC_LEN
#include <asm/arch/cacheflush.h>
#include <asm/io.h>
@@ -308,6 +295,8 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
#endif

timer_init();
+
+ /* The malloc area is right below the monitor image in RAM */
mem_malloc_init(CONFIG_SYS_MONITOR_BASE + gd->reloc_off -
CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN);
malloc_bin_reloc();
diff --git a/lib_blackfin/board.c b/lib_blackfin/board.c
index 80f70ca..0ab10ed 100644
--- a/lib_blackfin/board.c
+++ b/lib_blackfin/board.c
@@ -44,15 +44,6 @@ static inline void serial_early_puts(const char *s)
#endif
}

-static void mem_malloc_init(ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start;
-
- memset((void*)mem_malloc_start, 0, size);
-}
-
static int display_banner(void)
{
printf("\n\n%s\n\n", version_string);
diff --git a/lib_m68k/board.c b/lib_m68k/board.c
index cbc6b50..3d88530 100644
--- a/lib_m68k/board.c
+++ b/lib_m68k/board.c
@@ -107,18 +107,6 @@ ulong monitor_flash_len;
*/

/*
- * The Malloc area is immediately below the monitor copy in DRAM
- */
-static void mem_malloc_init(ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start;
-
- memset ((void *)mem_malloc_start, 0, size);
-}
-
-/*
* All attempts to come up with a "common" initialization sequence
* that works for all boards and architectures failed: some of the
* requirements are just _too_ different. To get rid of the resulting
@@ -494,7 +482,7 @@ void board_init_r (gd_t *id, ulong dest_addr)
*/
trap_init (CONFIG_SYS_SDRAM_BASE);

- /* initialize malloc() area */
+ /* The Malloc area is immediately below the monitor copy in DRAM */
mem_malloc_init (CONFIG_SYS_MONITOR_BASE + gd->reloc_off -
TOTAL_MALLOC_LEN, TOTAL_MALLOC_LEN);
malloc_bin_reloc ();
diff --git a/lib_microblaze/board.c b/lib_microblaze/board.c
index a5d924a..200ea5d 100644
--- a/lib_microblaze/board.c
+++ b/lib_microblaze/board.c
@@ -47,20 +47,6 @@ extern int getenv_IPaddr (char *);
#endif

/*
- * The Malloc area is immediately below the monitor copy in DRAM
- * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
- * as our monitory code is run from SDRAM
- */
-static void mem_malloc_init(ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start;
-
- memset ((void *)mem_malloc_start, 0, size);
-}
-
-/*
* All attempts to come up with a "common" initialization sequence
* that works for all boards and architectures failed: some of the
* requirements are just _too_ different. To get rid of the resulting
@@ -104,7 +90,11 @@ void board_init (void)
bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */

- /* Initialise malloc() area */
+ /*
+ * The Malloc area is immediately below the monitor copy in DRAM
+ * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
+ * as our monitory code is run from SDRAM
+ */
mem_malloc_init (CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN);

for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
diff --git a/lib_mips/board.c b/lib_mips/board.c
index b233a6c..f62a46a 100644
--- a/lib_mips/board.c
+++ b/lib_mips/board.c
@@ -74,18 +74,6 @@ int __board_early_init_f(void)
}
int board_early_init_f(void) __attribute__((weak, alias("__board_early_init_f")));

-/*
- * The Malloc area is immediately below the monitor copy in DRAM
- */
-static void mem_malloc_init(ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start;
-
- memset ((void *)mem_malloc_start, 0, size);
-}
-

static int init_func_ram (void)
{
@@ -347,7 +335,7 @@ void board_init_r (gd_t *id, ulong dest_addr)

bd = gd->bd;

- /* initialize malloc() area */
+ /* The Malloc area is immediately below the monitor copy in DRAM */
mem_malloc_init(CONFIG_SYS_MONITOR_BASE + gd->reloc_off -
TOTAL_MALLOC_LEN, TOTAL_MALLOC_LEN);
malloc_bin_reloc();
diff --git a/lib_nios/board.c b/lib_nios/board.c
index 745e0a4..72713a8 100644
--- a/lib_nios/board.c
+++ b/lib_nios/board.c
@@ -52,18 +52,6 @@ DECLARE_GLOBAL_DATA_PTR;
extern void malloc_bin_reloc (void);
typedef int (init_fnc_t) (void);

-/*
- * The Malloc area is immediately below the monitor copy in RAM
- */
-static void mem_malloc_init(ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start;
-
- memset ((void *)mem_malloc_start, 0, size);
-}
-

/************************************************************************
* Initialization sequence *
@@ -124,6 +112,8 @@ void board_init (void)
}

WATCHDOG_RESET ();
+
+ /* The Malloc area is immediately below the monitor copy in RAM */
mem_malloc_init(CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN);
malloc_bin_reloc();

diff --git a/lib_nios2/board.c b/lib_nios2/board.c
index 2c470dd..c6b36f4 100644
--- a/lib_nios2/board.c
+++ b/lib_nios2/board.c
@@ -55,18 +55,6 @@ DECLARE_GLOBAL_DATA_PTR;
extern void malloc_bin_reloc (void);
typedef int (init_fnc_t) (void);

-/*
- * The Malloc area is immediately below the monitor copy in RAM
- */
-static void mem_malloc_init (void)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start
-
- memset((void *)mem_malloc_start, 0, size);
-}
-

/************************************************************************
* Initialization sequence *
@@ -130,6 +118,8 @@ void board_init (void)
}

WATCHDOG_RESET ();
+
+ /* The Malloc area is immediately below the monitor copy in RAM */
mem_malloc_init(CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN);
malloc_bin_reloc();

diff --git a/lib_ppc/board.c b/lib_ppc/board.c
index a49b896..5c099aa 100644
--- a/lib_ppc/board.c
+++ b/lib_ppc/board.c
@@ -142,18 +142,6 @@ ulong monitor_flash_len;
*/

/*
- * The Malloc area is immediately below the monitor copy in DRAM
- */
-static void mem_malloc_init(ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start;
-
- memset ((void *)mem_malloc_start, 0, size);
-}
-
-/*
* All attempts to come up with a "common" initialization sequence
* that works for all boards and architectures failed: some of the
* requirements are just _too_ different. To get rid of the resulting
@@ -654,6 +642,7 @@ void board_init_r (gd_t *id, ulong dest_addr)

gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */

+ /* The Malloc area is immediately below the monitor copy in DRAM */
#if defined(CONFIG_RELOC_FIXUP_WORKS)
gd->reloc_off = 0;
malloc_start = dest_addr - TOTAL_MALLOC_LEN;
@@ -755,7 +744,6 @@ void board_init_r (gd_t *id, ulong dest_addr)

asm ("sync ; isync");

- /* initialize malloc() area */
mem_malloc_init (malloc_start, TOTAL_MALLOC_LEN);
malloc_bin_reloc ();

diff --git a/lib_sh/board.c b/lib_sh/board.c
index 2691316..5d61f0d 100644
--- a/lib_sh/board.c
+++ b/lib_sh/board.c
@@ -38,15 +38,6 @@ const char version_string[] = U_BOOT_VERSION" ("U_BOOT_DATE" - "U_BOOT_TIME")";

unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN;

-static void mem_malloc_init(ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start;
-
- memset((void *)mem_malloc_start, 0, size);
-}
-
static int sh_flash_init(void)
{
DECLARE_GLOBAL_DATA_PTR;
diff --git a/lib_sparc/board.c b/lib_sparc/board.c
index e69431f..6aadb56 100644
--- a/lib_sparc/board.c
+++ b/lib_sparc/board.c
@@ -75,25 +75,6 @@ static char *failed = "*** failed ***\n";
ulong monitor_flash_len;

/************************************************************************
- * Utilities *
- ************************************************************************
- */
-
-/*
- * The Malloc area is immediately below the monitor copy in RAM
- */
-static void mem_malloc_init(ulong start, ulong size)
-{
- mem_malloc_start = start;
- mem_malloc_end = start + size;
- mem_malloc_brk = start
-
- memset((void *)mem_malloc_start, 0, size);
-}
-
-/***********************************************************************/
-
-/************************************************************************
* Init Utilities *
************************************************************************
* Some of this code should be moved into the core functions,
@@ -313,7 +294,7 @@ void board_init_f(ulong bootflag)
*/
interrupt_init();

- /* initialize malloc() area */
+ /* The Malloc area is immediately below the monitor copy in RAM */
mem_malloc_init(CONFIG_SYS_MALLOC_BASE,
CONFIG_SYS_MALLOC_END - CONFIG_SYS_MALLOC_BASE);
malloc_bin_reloc();
--
1.6.2.1