x86: Convert board_init_f to use an init_sequence

This commit is contained in:
Graeme Russ 2011-02-12 15:12:10 +11:00
parent a3824142e7
commit e4f78d78d7
1 changed files with 29 additions and 41 deletions

View File

@ -156,7 +156,28 @@ static void display_flash_config (ulong size)
*/
typedef int (init_fnc_t) (void);
init_fnc_t *init_sequence[] = {
static int calculate_relocation_address(void);
static int copy_uboot_to_ram(void);
static int clear_bss(void);
static int do_elf_reloc_fixups(void);
init_fnc_t *init_sequence_f[] = {
cpu_init_f,
board_early_init_f,
env_init,
init_baudrate,
serial_init,
console_init_f,
dram_init_f,
calculate_relocation_address,
copy_uboot_to_ram,
clear_bss,
do_elf_reloc_fixups,
NULL,
};
init_fnc_t *init_sequence_r[] = {
cpu_init_r, /* basic cpu dependent setup */
board_early_init_r, /* basic board dependent setup */
dram_init, /* configure available RAM banks */
@ -235,41 +256,12 @@ static int do_elf_reloc_fixups(void)
*/
void board_init_f(ulong boot_flags)
{
/* First stage CPU initialization */
if (cpu_init_f() != 0)
hang();
init_fnc_t **init_fnc_ptr;
/* First stage Board initialization */
if (board_early_init_f() != 0)
hang();
if (env_init() != 0)
hang();
if (init_baudrate() != 0)
hang();
if (serial_init() != 0)
hang();
if (console_init_f() != 0)
hang();
if (dram_init_f() != 0)
hang();
if (calculate_relocation_address() != 0)
hang();
/* Copy U-Boot into RAM */
if (copy_uboot_to_ram() != 0)
hang();
if (clear_bss() != 0)
hang();
if (do_elf_reloc_fixups() != 0)
hang();
for (init_fnc_ptr = init_sequence_f; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0)
hang();
}
gd->flags |= GD_FLG_RELOC;
@ -283,7 +275,6 @@ void board_init_f(ulong boot_flags)
void board_init_r(gd_t *id, ulong dest_addr)
{
char *s;
int i;
ulong size;
static bd_t bd_data;
static gd_t gd_data;
@ -307,12 +298,9 @@ void board_init_r(gd_t *id, ulong dest_addr)
mem_malloc_init((((ulong)dest_addr - CONFIG_SYS_MALLOC_LEN)+3)&~3,
CONFIG_SYS_MALLOC_LEN);
for (init_fnc_ptr = init_sequence, i=0; *init_fnc_ptr; ++init_fnc_ptr, i++) {
show_boot_progress(0xa130|i);
if ((*init_fnc_ptr)() != 0) {
for (init_fnc_ptr = init_sequence_r; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0)
hang ();
}
}
show_boot_progress(0x23);