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