X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib_nios%2Fboard.c;h=0a0d2e38fdacb72e7c070ac896c703712f7f6871;hb=758c037aeead34b49631b8da3a90b1bba14c0410;hp=fb477e94e0cfc537837127fffba43fa524053d1f;hpb=ec4c544bed9b026cdf93084fb0daa73ec53a9cda;p=u-boot diff --git a/lib_nios/board.c b/lib_nios/board.c index fb477e94e0..0a0d2e38fd 100644 --- a/lib_nios/board.c +++ b/lib_nios/board.c @@ -32,6 +32,7 @@ #include #endif +DECLARE_GLOBAL_DATA_PTR; /* * All attempts to come up with a "common" initialization sequence @@ -49,7 +50,6 @@ extern void malloc_bin_reloc (void); typedef int (init_fnc_t) (void); -extern unsigned _vectors[]; /* * Begin and End of memory area for malloc(), and current "brk" @@ -107,8 +107,6 @@ init_fnc_t *init_sequence[] = { /***********************************************************************/ void board_init (void) { - DECLARE_GLOBAL_DATA_PTR; - bd_t *bd; init_fnc_t **init_fnc_ptr; char *s, *e; @@ -118,11 +116,10 @@ void board_init (void) * Nios treats CFG_GBL_DATA_OFFSET as an address. */ gd = (gd_t *)CFG_GBL_DATA_OFFSET; - memset( gd, 0, CFG_GBL_DATA_SIZE ); + /* compiler optimization barrier needed for GCC >= 3.4 */ + __asm__ __volatile__("": : :"memory"); - /* Copy exception vectors to the correct location. - */ - memcpy( (void *)CFG_VECT_BASE, _vectors, 256 ); + memset( gd, 0, CFG_GBL_DATA_SIZE ); gd->bd = (bd_t *)(gd+1); /* At end of global data */ gd->baudrate = CONFIG_BAUDRATE; @@ -139,13 +136,16 @@ void board_init (void) bd->bi_baudrate = CONFIG_BAUDRATE; for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { + WATCHDOG_RESET (); if ((*init_fnc_ptr) () != 0) { hang (); } } + WATCHDOG_RESET (); bd->bi_flashsize = flash_init(); + WATCHDOG_RESET (); mem_malloc_init(); malloc_bin_reloc(); env_relocate(); @@ -157,12 +157,14 @@ void board_init (void) if (s) s = (*e) ? e + 1 : e; } + WATCHDOG_RESET (); devices_init(); jumptable_init(); console_init_r(); /* */ + WATCHDOG_RESET (); interrupt_init (); #ifdef CONFIG_STATUS_LED