[U-Boot] [RFC][PATCH 34/36] x86 - Convert board_init_f to use an init_sequence
Graeme Russ
graeme.russ at gmail.com
Mon Jan 3 20:46:54 CET 2011
---
arch/i386/lib/board.c | 68 +++++++++++++++++++++---------------------------
1 files changed, 30 insertions(+), 38 deletions(-)
diff --git a/arch/i386/lib/board.c b/arch/i386/lib/board.c
index 35d7afd..6888d53 100644
--- a/arch/i386/lib/board.c
+++ b/arch/i386/lib/board.c
@@ -156,7 +156,29 @@ static void display_flash_config (ulong size)
*/
typedef int (init_fnc_t) (void);
-init_fnc_t *init_sequence[] = {
+int dram_init_f(void);
+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 */
@@ -170,8 +192,6 @@ init_fnc_t *init_sequence[] = {
gd_t *gd;
-int dram_init_f(void);
-
static int calculate_relocation_address(void)
{
void *text_start = &__text_start;
@@ -237,41 +257,13 @@ 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;
@@ -309,7 +301,7 @@ 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++) {
+ for (init_fnc_ptr = init_sequence_r, i=0; *init_fnc_ptr; ++init_fnc_ptr, i++) {
show_boot_progress(0xa130|i);
if ((*init_fnc_ptr)() != 0) {
--
1.7.1.422.g049e9
More information about the U-Boot
mailing list