diff options
Diffstat (limited to 'c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c')
-rw-r--r-- | c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c | 74 |
1 files changed, 56 insertions, 18 deletions
diff --git a/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c b/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c index 002aea0cb3..20104a95b3 100644 --- a/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c +++ b/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c @@ -21,6 +21,8 @@ #include <rtems/libcsupport.h> #include <libcpu/mongoose-v.h> + + /* * The original table from the application and our copy of it with * some changes. @@ -57,18 +59,22 @@ void bsp_libc_init( void *, unsigned32, int ); void bsp_pretasking_hook(void) { - extern int HeapBase; - extern int HeapSize; + extern int HeapBase; + extern int HeapSize; void *heapStart = &HeapBase; unsigned long heapSize = (unsigned long)&HeapSize; + unsigned long ramSpace; bsp_libc_init(heapStart, (unsigned32) heapSize, 0); #ifdef RTEMS_DEBUG rtems_debug_enable( RTEMS_DEBUG_ALL_MASK ); #endif + } - + + + /* * bsp_start * @@ -79,33 +85,65 @@ void bsp_start( void ) { extern int _end; extern int WorkspaceBase; - extern int _RamSize, _RamBase; - int ram_left; - ram_left = (unsigned32) &_RamSize - - (unsigned32)&WorkspaceBase - (unsigned32) &_RamBase; + /* Configure Number of Register Caches */ Cpu_table.pretasking_hook = bsp_pretasking_hook; /* init libc, etc. */ Cpu_table.postdriver_hook = bsp_postdriver_hook; Cpu_table.interrupt_stack_size = 4096; - if ( BSP_Configuration.work_space_size > ram_left ) - _sys_exit( 1 ); + /* HACK -- tied to value linkcmds */ + if ( BSP_Configuration.work_space_size >(4096*1024) ) + _sys_exit( 1 ); BSP_Configuration.work_space_start = (void *) &WorkspaceBase; - /* Clear all pending peripheral interrupts and mask them. */ - - MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_CAUSE_REGISTER, 0 ); + MONGOOSEV_WRITE( MONGOOSEV_WATCHDOG, 0xA0 ); + + /* reset the config register & clear any pending peripheral interrupts */ + MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_COMMAND_REGISTER, 0 ); + MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_COMMAND_REGISTER, MONGOOSEV_UART_CMD_RESET_BOTH_PORTS ); + MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_COMMAND_REGISTER, 0 ); + + /* reset both timers */ + MONGOOSEV_WRITE_REGISTER( MONGOOSEV_TIMER1_BASE, MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER, 0xffffffff ); + MONGOOSEV_WRITE_REGISTER( MONGOOSEV_TIMER1_BASE, MONGOOSEV_TIMER_CONTROL_REGISTER, 0); + + MONGOOSEV_WRITE_REGISTER( MONGOOSEV_TIMER2_BASE, MONGOOSEV_TIMER_INITIAL_COUNTER_REGISTER, 0xffffffff ); + MONGOOSEV_WRITE_REGISTER( MONGOOSEV_TIMER2_BASE, MONGOOSEV_TIMER_CONTROL_REGISTER, 0); + MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_MASK_REGISTER, 0 ); + MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_STATUS_REGISTER, 0xffffffff ); - /* - * Enable coprocessors. - * Disable external interrupts. - * Enable software interrupts. - */ + /* clear any writable bits in the cause register */ + mips_set_cause( 0 ); - mips_set_sr( (SR_CU0 | SR_CU1 | SR_IBIT1 | SR_IBIT2) ); + /*all interrupts unmasked but globally off. depend on the IRC to take care of things */ + mips_set_sr( (SR_CU0 | SR_CU1 | 0xff00) ); mips_install_isr_entries(); } + + +void clear_cache( void *address, size_t n ) +{ +} + +/* Structure filled in by get_mem_info. Only the size field is + actually used (to clear bss), so the others aren't even filled in. */ + +struct s_mem +{ + unsigned int size; + unsigned int icsize; + unsigned int dcsize; +}; + + +void +get_mem_info (mem) + struct s_mem *mem; +{ + mem->size = 0x1000000; /* XXX figure out something here */ +} + |