
At present bd_info is set up very early in boot, before board_init_f() is called. But the board info is supposed to be allocated in board_init_f(), with a call to reserve_board().
To fix this, drop the current static variable for board info and set up the information at the end of the board_init_f() init sequence, just before relocating.
Signed-off-by: Simon Glass sjg@chromium.org ---
arch/blackfin/cpu/cpu.c | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-)
diff --git a/arch/blackfin/cpu/cpu.c b/arch/blackfin/cpu/cpu.c index afb2b0a..a8aaee4 100644 --- a/arch/blackfin/cpu/cpu.c +++ b/arch/blackfin/cpu/cpu.c @@ -65,24 +65,8 @@ static inline void serial_early_puts(const char *s) #endif }
-static int global_board_data_init(void) +static int board_data_init(bd_t *bd) { -#ifndef CONFIG_SYS_BD_INFO_ADDR -# define CONFIG_SYS_BD_INFO_ADDR 0 -#endif - - bd_t *bd; - - if (CONFIG_SYS_BD_INFO_ADDR) { - bd = (bd_t *)(CONFIG_SYS_BD_INFO_ADDR); - memset(bd, 0, GENERATED_BD_INFO_SIZE); - } else { - static bd_t _bfin_bd; - bd = &_bfin_bd; - } - - gd->bd = bd; - bd->bi_r_version = version_string; bd->bi_cpu = __stringify(CONFIG_BFIN_CPU); bd->bi_board_name = CONFIG_SYS_BOARD; @@ -347,11 +331,13 @@ void cpu_init_f(ulong bootflag, ulong loaded_from_ldr)
serial_early_puts("Init global data\n"); gd->ram_size = CONFIG_SYS_MAX_RAM_SIZE; - global_board_data_init(); }
void relocate_code(ulong sp, gd_t *new_gd, ulong relocaddr) { + /* Set up the board data now, since we have a valid bd pointer */ + board_data_init(new_gd->bd); + /* Jump to board_init_r() with a new stack */ asm_relocate_code(sp, new_gd); }