diff options
Diffstat (limited to 'c/src/lib/libbsp/mips/genmongoosev/startup')
-rw-r--r-- | c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c | 72 | ||||
-rw-r--r-- | c/src/lib/libbsp/mips/genmongoosev/startup/linkcmds | 143 |
2 files changed, 130 insertions, 85 deletions
diff --git a/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c b/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c index 20104a95b3..6fbb2660d3 100644 --- a/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c +++ b/c/src/lib/libbsp/mips/genmongoosev/startup/bspstart.c @@ -1,18 +1,22 @@ /* - * This routine starts the application. It includes application, - * board, and monitor specific initialization and configuration. - * The generic CPU dependent initialization has been performed - * before this routine is invoked. - * - * COPYRIGHT (c) 1989-2001. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.OARcorp.com/rtems/license.html. - * - * $Id$ - */ +** This routine starts the application. It includes application, +** board, and monitor specific initialization and configuration. +** The generic CPU dependent initialization has been performed +** before this routine is invoked. +** +** COPYRIGHT (c) 1989-2001. +** On-Line Applications Research Corporation (OAR). +** +** The license and distribution terms for this file may be +** found in the file LICENSE in this distribution or at +** http://www.OARcorp.com/rtems/license.html. +** +** $Id$ +** +** Modification History: +** 12/10/01 A.Ferrer, NASA/GSFC, Code 582 +** Set interrupt mask to 0xAF00 (Line 139). +*/ #include <string.h> @@ -39,7 +43,7 @@ char *rtems_progname; /* * Use the shared implementations of the following routines */ - + void bsp_postdriver_hook(void); void bsp_libc_init( void *, unsigned32, int ); @@ -56,7 +60,7 @@ void bsp_libc_init( void *, unsigned32, int ); * not yet initialized. * */ - + void bsp_pretasking_hook(void) { extern int HeapBase; @@ -83,8 +87,8 @@ void bsp_pretasking_hook(void) void bsp_start( void ) { - extern int _end; extern int WorkspaceBase; + extern void mips_install_isr_entries(); /* Configure Number of Register Caches */ @@ -93,11 +97,14 @@ void bsp_start( void ) Cpu_table.interrupt_stack_size = 4096; /* HACK -- tied to value linkcmds */ - if ( BSP_Configuration.work_space_size >(4096*1024) ) - _sys_exit( 1 ); + if ( BSP_Configuration.work_space_size > (4096*1024) ) + _sys_exit( 1 ); BSP_Configuration.work_space_start = (void *) &WorkspaceBase; + /* mask off any interrupts */ + MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_FUNCTION_INTERRUPT_MASK_REGISTER, 0 ); + MONGOOSEV_WRITE( MONGOOSEV_WATCHDOG, 0xA0 ); /* reset the config register & clear any pending peripheral interrupts */ @@ -112,14 +119,26 @@ void bsp_start( void ) 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 ); + /* clear any pending interrupts */ MONGOOSEV_WRITE( MONGOOSEV_PERIPHERAL_STATUS_REGISTER, 0xffffffff ); /* clear any writable bits in the cause register */ mips_set_cause( 0 ); - /*all interrupts unmasked but globally off. depend on the IRC to take care of things */ - mips_set_sr( (SR_CU0 | SR_CU1 | 0xff00) ); + /* set interrupt mask, but globally off. */ + + /* + ** Bit 15 | Bit 14 | Bit 13 | Bit 12 | Bit 11 | Bit 10 | Bit 9 | Bit 8 | + ** periph | unused | FPU | unused | timer2 | timer1 | swint1 | swint2 | + ** extern | | | | | | | | + ** + ** 1 0 1 0 0 1 0 0 + ** + ** 0x8C00 Enable only internal Mongoose V timers. + ** 0xA400 Enable Peripherial ints, FPU and timer1 + */ + + mips_set_sr( (SR_CU0 | SR_CU1 | 0xA400) ); mips_install_isr_entries(); } @@ -140,10 +159,11 @@ struct s_mem }; -void -get_mem_info (mem) - struct s_mem *mem; + +extern unsigned32 _RamSize; + +void get_mem_info ( struct s_mem *mem ) { - mem->size = 0x1000000; /* XXX figure out something here */ + mem->size = (unsigned32)&_RamSize; } diff --git a/c/src/lib/libbsp/mips/genmongoosev/startup/linkcmds b/c/src/lib/libbsp/mips/genmongoosev/startup/linkcmds index 19f478f17b..ed9b3116d4 100644 --- a/c/src/lib/libbsp/mips/genmongoosev/startup/linkcmds +++ b/c/src/lib/libbsp/mips/genmongoosev/startup/linkcmds @@ -5,24 +5,28 @@ * $Id$ */ +/* . = 0x80020000; */ + /* * Declare some sizes. */ + _RamBase = DEFINED(_RamBase) ? _RamBase : 0x80000000; _RamSize = DEFINED(_RamSize) ? _RamSize : 32M; -HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000; +HeapSize = DEFINED(HeapSize) ? HeapSize : 0x40000; _StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000; ClockRate = DEFINED(ClockRate) ? ClockRate : 12000000; + + +MEMORY +{ + romstore : ORIGIN = 0xbfc40000, LENGTH = 4M + ram : ORIGIN = 0x80020000, LENGTH = 4M +} + SECTIONS { -/* -Ken's response is correct. Locate it at 0x80020000 or higher. The PMON -data segment after the exception vectors and below 0x80020000, - -. = 0x80020000; -*/ - . = 0x80020000; .text : { _ftext = . ; @@ -35,12 +39,12 @@ data segment after the exception vectors and below 0x80020000, *(.mips16.call.*) PROVIDE (__runtime_reloc_start = .); *(.rel.sdata) + *(.rel.dyn) PROVIDE (__runtime_reloc_stop = .); *(.fini) - etext = .; - _etext = .; - } - .ctors : + } >ram AT>romstore + + .ctors : { /* gcc uses crtbegin.o to find the start of the constructors, so we make sure it is @@ -62,54 +66,76 @@ data segment after the exception vectors and below 0x80020000, KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) - } + } >ram AT>romstore - .dtors : + .dtors : { KEEP (*crtbegin.o(.dtors)) KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) - } - . = .; - .rdata : { + etext = .; + _etext = .; + } >ram AT>romstore + +/* . = .; */ + + .rdata : + { *(.rdata) *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) - } - _fdata = ALIGN(16); - .data : { + } >ram AT>romstore + + .data : + { + _fdata = ALIGN(16); + *(.data) *(.data.*) *(.gnu.linkonce.d*) - } - . = ALIGN(8); - _gp = . + 0x8000; - __global = _gp; - .lit8 : { + } >ram AT>romstore + + + .lit8 : + { + . = ALIGN(8); + + _gp = . + 0x8000; + __global = _gp; *(.lit8) - } - .lit4 : { + } >ram AT>romstore + + .lit4 : + { *(.lit4) - } - .sdata : { + } >ram AT>romstore + + .sdata : + { *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*) - } + } >ram AT>romstore + + .sbss : + { . = ALIGN(4); edata = .; _edata = .; _fbss = .; - .sbss : { *(.sbss) *(.scommon) - } - .bss : { + } >ram AT>romstore + + + .bss : + { _bss_start = . ; *(.bss) + *(.reginfo) *(COMMON) . = ALIGN (64); _stack_limit = .; @@ -120,42 +146,41 @@ data segment after the exception vectors and below 0x80020000, HeapBase = .; . += HeapSize; /* reserve some memory for heap */ WorkspaceBase = .; - } - end = .; - _end = .; + end = .; + _end = .; + } >ram AT>romstore -/* Put starting stack in SRAM (8 Kb); this size is the same as the stack from - the original script (when everything was in SRAM). */ - /* __stack = 0x8000A000; */ - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to - the beginning of the section so we begin them at 0. */ +/* +** DWARF debug sections. +** Symbols in the DWARF debugging sections are relative to +** the beginning of the section so we begin them at 0. +*/ /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } + .debug 0 : { *(.debug) } AT>romstore + .line 0 : { *(.line) } AT>romstore /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } + .debug_srcinfo 0 : { *(.debug_srcinfo) } AT>romstore + .debug_sfnames 0 : { *(.debug_sfnames) } AT>romstore /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } AT>romstore + .debug_pubnames 0 : { *(.debug_pubnames) } AT>romstore /* DWARF 2 */ - .debug_info 0 : { *(.debug_info) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } + .debug_info 0 : { *(.debug_info) } AT>romstore + .debug_abbrev 0 : { *(.debug_abbrev) } AT>romstore + .debug_line 0 : { *(.debug_line) } AT>romstore + .debug_frame 0 : { *(.debug_frame)} AT>romstore + .debug_str 0 : { *(.debug_str) } AT>romstore + .debug_loc 0 : { *(.debug_loc) } AT>romstore + .debug_macinfo 0 : { *(.debug_macinfo) } AT>romstore /* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } + .debug_weaknames 0 : { *(.debug_weaknames) } AT>romstore + .debug_funcnames 0 : { *(.debug_funcnames) } AT>romstore + .debug_typenames 0 : { *(.debug_typenames) } AT>romstore + .debug_varnames 0 : { *(.debug_varnames) } AT>romstore } |