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 <[email protected]>
---

 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);
 }
-- 
2.8.0.rc3.226.g39d4020

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to