X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib_nios%2Fboard.c;h=0a0d2e38fdacb72e7c070ac896c703712f7f6871;hb=758c037aeead34b49631b8da3a90b1bba14c0410;hp=08085c2bb002d98fb42f4c3595f870416c2ce007;hpb=c837dcb1a316745092567bfe4fb266d0941884ff;p=u-boot diff --git a/lib_nios/board.c b/lib_nios/board.c index 08085c2bb0..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; @@ -132,18 +129,23 @@ void board_init (void) bd->bi_memstart = CFG_SDRAM_BASE; bd->bi_memsize = CFG_SDRAM_SIZE; bd->bi_flashstart = CFG_FLASH_BASE; +#if defined(CFG_SRAM_BASE) && defined(CFG_SRAM_SIZE) bd->bi_sramstart= CFG_SRAM_BASE; bd->bi_sramsize = CFG_SRAM_SIZE; +#endif 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(); @@ -155,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