#include <status_led.h>
#endif
+DECLARE_GLOBAL_DATA_PTR;
/*
* All attempts to come up with a "common" initialization sequence
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"
/***********************************************************************/
void board_init (void)
{
- DECLARE_GLOBAL_DATA_PTR;
-
bd_t *bd;
init_fnc_t **init_fnc_ptr;
char *s, *e;
* 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;
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();
if (s) s = (*e) ? e + 1 : e;
}
+ WATCHDOG_RESET ();
devices_init();
jumptable_init();
console_init_r();
/*
*/
+ WATCHDOG_RESET ();
interrupt_init ();
#ifdef CONFIG_STATUS_LED