@@ -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);
}
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(-)