aboutsummaryrefslogtreecommitdiff
path: root/arch/i386/lib/board.c
diff options
context:
space:
mode:
authorGraeme Russ <graeme.russ@gmail.com>2011-02-12 15:12:10 +1100
committerGraeme Russ <graeme.russ@gmail.com>2011-02-12 15:12:10 +1100
commite4f78d78d7b710243c9953cc86fd75055d59ebf9 (patch)
tree4ca318804b24a54adbf643a6b78defb8e5b63e41 /arch/i386/lib/board.c
parenta3824142e764c2d85a6bda54c726f8bb07b28935 (diff)
x86: Convert board_init_f to use an init_sequence
Diffstat (limited to 'arch/i386/lib/board.c')
-rw-r--r--arch/i386/lib/board.c70
1 files changed, 29 insertions, 41 deletions
diff --git a/arch/i386/lib/board.c b/arch/i386/lib/board.c
index b33dd4278..e0f9803e5 100644
--- a/arch/i386/lib/board.c
+++ b/arch/i386/lib/board.c
@@ -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();
-
- /* 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();
+ init_fnc_t **init_fnc_ptr;
- 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);