X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib_i386%2Fboard.c;h=47fbab4ccb4dd9d96a00e5b1bd81d1d3effa69da;hb=9a042e9ca512beaaa2cb450274313fc477141241;hp=85d7d7fb8c6e23a36162467053252ab01ce7c6d5;hpb=7a8e9bed17d7924a9c5c4699b1f6a3a0359524ed;p=u-boot diff --git a/lib_i386/board.c b/lib_i386/board.c index 85d7d7fb8c..47fbab4ccb 100644 --- a/lib_i386/board.c +++ b/lib_i386/board.c @@ -1,10 +1,10 @@ /* * (C) Copyright 2002 * Daniel Engström, Omicron Ceti AB, daniel@omicron.se - * + * * (C) Copyright 2002 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * + * * (C) Copyright 2002 * Sysgo Real-Time Solutions, GmbH * Marius Groeger @@ -34,23 +34,24 @@ #include #include #include -#include #include #include #include -extern long _i386boot_start; -extern long _i386boot_end; +DECLARE_GLOBAL_DATA_PTR; + +extern long _i386boot_start; +extern long _i386boot_end; extern long _i386boot_romdata_start; -extern long _i386boot_romdata_dest; -extern long _i386boot_romdata_size; -extern long _i386boot_bss_start; -extern long _i386boot_bss_size; +extern long _i386boot_romdata_dest; +extern long _i386boot_romdata_size; +extern long _i386boot_bss_start; +extern long _i386boot_bss_size; -extern long _i386boot_realmode; +extern long _i386boot_realmode; extern long _i386boot_realmode_size; -extern long _i386boot_bios; -extern long _i386boot_bios_size; +extern long _i386boot_bios; +extern long _i386boot_bios_size; /* The symbols defined by the linker script becomes pointers * which is somewhat inconveient ... */ @@ -81,16 +82,14 @@ static ulong mem_malloc_brk = 0; static int mem_malloc_init(void) { - DECLARE_GLOBAL_DATA_PTR; - /* start malloc area right after the stack */ - mem_malloc_start = i386boot_bss_start + + mem_malloc_start = i386boot_bss_start + i386boot_bss_size + CFG_STACK_SIZE; mem_malloc_start = (mem_malloc_start+3)&~3; - + /* Use all available RAM for malloc() */ mem_malloc_end = gd->ram_size; - + mem_malloc_brk = mem_malloc_start; return 0; @@ -129,20 +128,8 @@ char *strmhz (char *buf, long hz) * or dropped completely, * but let's get it working (again) first... */ -static void syscalls_init (void) -{ - syscall_tbl[SYSCALL_MALLOC] = (void *) malloc; - syscall_tbl[SYSCALL_FREE] = (void *) free; - - syscall_tbl[SYSCALL_INSTALL_HDLR] = (void *) irq_install_handler; - syscall_tbl[SYSCALL_FREE_HDLR] = (void *) irq_free_handler; - -} - static int init_baudrate (void) { - DECLARE_GLOBAL_DATA_PTR; - char tmp[64]; /* long enough for environment variables */ int i = getenv_r("baudrate", tmp, 64); @@ -162,9 +149,9 @@ static int display_banner (void) i386boot_start, i386boot_romdata_start-1, i386boot_romdata_dest, i386boot_romdata_dest+i386boot_romdata_size-1, i386boot_bss_start, i386boot_bss_start+i386boot_bss_size-1, - i386boot_bss_start+i386boot_bss_size, + i386boot_bss_start+i386boot_bss_size, i386boot_bss_start+i386boot_bss_size+CFG_STACK_SIZE-1); - + return (0); } @@ -178,7 +165,6 @@ static int display_banner (void) */ static int display_dram_config (void) { - DECLARE_GLOBAL_DATA_PTR; int i; puts ("DRAM Configuration:\n"); @@ -187,7 +173,7 @@ static int display_dram_config (void) printf ("Bank #%d: %08lx ", i, gd->bd->bi_dram[i].start); print_size (gd->bd->bi_dram[i].size, "\n"); } - + return (0); } @@ -198,7 +184,6 @@ static void display_flash_config (ulong size) } - /* * Breath some life into the board... * @@ -230,7 +215,7 @@ init_fnc_t *init_sequence[] = { dram_init, /* configure available RAM banks */ mem_malloc_init, /* dependant on dram_init */ interrupt_init, /* set up exceptions */ - timer_init, + timer_init, serial_init, env_init, /* initialize environment */ init_baudrate, /* initialze baudrate settings */ @@ -245,25 +230,26 @@ gd_t *global_data; void start_i386boot (void) { - DECLARE_GLOBAL_DATA_PTR; char *s; int i; ulong size; static gd_t gd_data; static bd_t bd_data; init_fnc_t **init_fnc_ptr; - + show_boot_progress(0x21); gd = global_data = &gd_data; - + /* compiler optimization barrier needed for GCC >= 3.4 */ + __asm__ __volatile__("": : :"memory"); + memset (gd, 0, sizeof (gd_t)); gd->bd = &bd_data; memset (gd->bd, 0, sizeof (bd_t)); show_boot_progress(0x22); gd->baudrate = CONFIG_BAUDRATE; - + for (init_fnc_ptr = init_sequence, i=0; *init_fnc_ptr; ++init_fnc_ptr, i++) { show_boot_progress(0xa130|i); @@ -317,35 +303,23 @@ void start_i386boot (void) devices_init (); - /* allocate syscalls table (console_init_r will fill it in */ - syscall_tbl = (void **) malloc (NR_SYSCALLS * sizeof (void *)); - memset(syscall_tbl, 0, NR_SYSCALLS * sizeof (void *)); - + jumptable_init (); + /* Initialize the console (after the relocation and devices init) */ console_init_r(); - syscalls_init(); #ifdef CONFIG_MISC_INIT_R /* miscellaneous platform dependent initialisations */ misc_init_r(); #endif - -#if (CONFIG_COMMANDS & CFG_CMD_NET) && (0) - WATCHDOG_RESET(); -# ifdef DEBUG - puts ("Reset Ethernet PHY\n"); -# endif - reset_phy(); -#endif - -#if (CONFIG_COMMANDS & CFG_CMD_PCMCIA) && !(CONFIG_COMMANDS & CFG_CMD_IDE) +#if defined(CONFIG_CMD_PCMCIA) && !defined(CONFIG_CMD_IDE) WATCHDOG_RESET(); puts ("PCMCIA:"); pcmcia_init(); #endif -#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#if defined(CONFIG_CMD_KGDB) WATCHDOG_RESET(); puts("KGDB: "); kgdb_init(); @@ -361,7 +335,7 @@ void start_i386boot (void) #ifdef CONFIG_SERIAL_SOFTWARE_FIFO serial_buffered_init(); #endif - + #ifdef CONFIG_STATUS_LED status_led_set (STATUS_LED_BOOT, STATUS_LED_BLINKING); #endif @@ -374,38 +348,48 @@ void start_i386boot (void) if ((s = getenv ("loadaddr")) != NULL) { load_addr = simple_strtoul (s, NULL, 16); } -#if (CONFIG_COMMANDS & CFG_CMD_NET) +#if defined(CONFIG_CMD_NET) if ((s = getenv ("bootfile")) != NULL) { copy_filename (BootFile, s, sizeof (BootFile)); } -#endif /* CFG_CMD_NET */ +#endif WATCHDOG_RESET(); -#if (CONFIG_COMMANDS & CFG_CMD_IDE) +#if defined(CONFIG_CMD_IDE) WATCHDOG_RESET(); puts("IDE: "); ide_init(); -#endif /* CFG_CMD_IDE */ +#endif -#if (CONFIG_COMMANDS & CFG_CMD_SCSI) +#if defined(CONFIG_CMD_SCSI) WATCHDOG_RESET(); puts("SCSI: "); scsi_init(); #endif -#if (CONFIG_COMMANDS & CFG_CMD_DOC) +#if defined(CONFIG_CMD_DOC) WATCHDOG_RESET(); puts("DOC: "); doc_init(); #endif -#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI) +#if defined(CONFIG_CMD_NET) +#if defined(CONFIG_NET_MULTI) WATCHDOG_RESET(); puts("Net: "); +#endif eth_initialize(gd->bd); #endif +#if ( defined(CONFIG_CMD_NET)) && (0) + WATCHDOG_RESET(); +# ifdef DEBUG + puts ("Reset Ethernet PHY\n"); +# endif + reset_phy(); +#endif + #ifdef CONFIG_LAST_STAGE_INIT WATCHDOG_RESET(); /* @@ -417,18 +401,13 @@ void start_i386boot (void) #endif - #ifdef CONFIG_POST post_run (NULL, POST_RAM | post_bootmode_get(0)); - if (post_bootmode_get(0) & POST_POWERFAIL) { - post_bootmode_clear(); - board_poweroff(); - } #endif - - + + show_boot_progress(0x29); - + /* main_loop() can return to retry autoboot, if so just run it again. */ for (;;) { main_loop(); @@ -442,5 +421,3 @@ void hang (void) puts ("### ERROR ### Please RESET the board ###\n"); for (;;); } - -