
From: Stefan Roese sr@denx.de
(NOT TO APPLY)
I'm really not sure why this doesn't work in the RAMBOOT case. But BSS is not cleared and because of this booting crashed / hangs at some stage later. Something with the GOT calculation / handling is incorrect.
To get this going for now, just clear the BSS again in the C code.
Signed-off-by: Stefan Roese sr@denx.de Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: None
arch/powerpc/lib/board.c | 3 +++ common/board_r.c | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/lib/board.c b/arch/powerpc/lib/board.c index 91645d3..47654fa 100644 --- a/arch/powerpc/lib/board.c +++ b/arch/powerpc/lib/board.c @@ -108,6 +108,7 @@ DECLARE_GLOBAL_DATA_PTR; extern ulong __init_end; extern ulong __bss_end; ulong monitor_flash_len; +extern ulong __bss_start;
#if defined(CONFIG_CMD_BEDBUG) #include <bedbug/type.h> @@ -590,6 +591,8 @@ void board_init_r(gd_t *id, ulong dest_addr) /* The Malloc area is immediately below the monitor copy in DRAM */ malloc_start = dest_addr - TOTAL_MALLOC_LEN;
+ memset(&__bss_start, 0, &__bss_end - &__bss_start); + #if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx) /* * The gd->arch.cpu pointer is set to an address in flash before diff --git a/common/board_r.c b/common/board_r.c index 68a9448..6900374 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -1,4 +1,4 @@ -/* + /* * Copyright (c) 2011 The Chromium OS Authors. * (C) Copyright 2002-2006 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. @@ -870,6 +870,12 @@ void board_init_r(gd_t *new_gd, ulong dest_addr) gd = new_gd; #endif
+#ifdef CONFIG_GLACIER + ulong bss_start = (ulong)&__bss_start; + ulong bss_end = (ulong)&__bss_end; + memset((void *)bss_start, 0, bss_end - bss_start); +#endif + #ifdef CONFIG_NEEDS_MANUAL_RELOC for (i = 0; i < ARRAY_SIZE(init_sequence_r); i++) init_sequence_r[i] += gd->reloc_off;