summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c')
-rw-r--r--c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c74
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 */
+}
+