summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2008-09-19 20:41:36 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2008-09-19 20:41:36 +0000
commit7a2125ca39854c6bab1180dda7202a5af908357a (patch)
tree8db1f39bde8e4aa557f5aac63fa3d30203abca40
parent2008-09-19 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-7a2125ca39854c6bab1180dda7202a5af908357a.tar.bz2
2008-09-19 Joel Sherrill <joel.sherrill@oarcorp.com>
* shared/start/start.S, shared/startup/bspgetworkarea.c, shared/startup/bspstart.c, shared/startup/linkcmds: Modifications which reflect those tested on psim. Hopefully they work on all boards. The initialization stack is explicitly declared in the linkcmds memory layout rather than magic math.
-rw-r--r--c/src/lib/libbsp/powerpc/ChangeLog8
-rw-r--r--c/src/lib/libbsp/powerpc/shared/start/start.S4
-rw-r--r--c/src/lib/libbsp/powerpc/shared/startup/bspgetworkarea.c18
-rw-r--r--c/src/lib/libbsp/powerpc/shared/startup/bspstart.c18
-rw-r--r--c/src/lib/libbsp/powerpc/shared/startup/linkcmds2
5 files changed, 27 insertions, 23 deletions
diff --git a/c/src/lib/libbsp/powerpc/ChangeLog b/c/src/lib/libbsp/powerpc/ChangeLog
index 1c872e9cb3..2db6399964 100644
--- a/c/src/lib/libbsp/powerpc/ChangeLog
+++ b/c/src/lib/libbsp/powerpc/ChangeLog
@@ -1,3 +1,11 @@
+2008-09-19 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * shared/start/start.S, shared/startup/bspgetworkarea.c,
+ shared/startup/bspstart.c, shared/startup/linkcmds: Modifications
+ which reflect those tested on psim. Hopefully they work on all
+ boards. The initialization stack is explicitly declared in the
+ linkcmds memory layout rather than magic math.
+
2008-09-16 Joel Sherrill <joel.sherrill@oarcorp.com>
* shared/include/nvram.h: Fix typo.
diff --git a/c/src/lib/libbsp/powerpc/shared/start/start.S b/c/src/lib/libbsp/powerpc/shared/start/start.S
index 263774c21e..5c4d4e29f4 100644
--- a/c/src/lib/libbsp/powerpc/shared/start/start.S
+++ b/c/src/lib/libbsp/powerpc/shared/start/start.S
@@ -105,8 +105,8 @@ enter_C_code:
/*
* stack = &__rtems_end + 4096
*/
- addis r9,r0, __rtems_end+(4096-PPC_MINIMUM_STACK_FRAME_SIZE)@ha
- addi r9,r9, __rtems_end+(4096-PPC_MINIMUM_STACK_FRAME_SIZE)@l
+ addis r9,r0, __stack-PPC_MINIMUM_STACK_FRAME_SIZE@ha
+ addi r9,r9, __stack-PPC_MINIMUM_STACK_FRAME_SIZE@l
mr r1, r9
/*
* We are now in a environment that is totally independent from
diff --git a/c/src/lib/libbsp/powerpc/shared/startup/bspgetworkarea.c b/c/src/lib/libbsp/powerpc/shared/startup/bspgetworkarea.c
index fc49315f7c..0b015c694f 100644
--- a/c/src/lib/libbsp/powerpc/shared/startup/bspgetworkarea.c
+++ b/c/src/lib/libbsp/powerpc/shared/startup/bspgetworkarea.c
@@ -29,14 +29,24 @@ void bsp_get_work_area(
uintptr_t reserve;
uintptr_t spared;
- reserve = (uintptr_t)BSP_INIT_STACK_SIZE;
- reserve += rtems_configuration_get_interrupt_stack_size();
- size = (uintptr_t)BSP_mem_size - (uintptr_t)&__rtems_end + reserve;
+ reserve = rtems_configuration_get_interrupt_stack_size();
+ size = (uintptr_t)BSP_mem_size - (uintptr_t)&__rtems_end - reserve;
- *work_area_start = (void *)(&__rtems_end + reserve);
+ *work_area_start = (void *)((uintptr_t) &__rtems_end + reserve);
*work_area_size = size;
spared = _bsp_sbrk_init( *work_area_start, work_area_size );
*heap_start = BSP_BOOTCARD_HEAP_USES_WORK_AREA;
*heap_size = BSP_BOOTCARD_HEAP_SIZE_DEFAULT;
+
+ /*
+ * The following may be helpful in debugging what goes wrong when
+ * you are allocating the Work Area in a new BSP.
+ */
+ #if 0
+ printk( "Work Area Base %d %x\n", *work_area_start, *work_area_start );
+ printk( "Work Area Size %d %x\n", *work_area_size, *work_area_size );
+ printk( "Work Area End %d %x\n",
+ *work_area_start + size, *work_area_start + size );
+ #endif
}
diff --git a/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c b/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c
index b97fe0eddd..2e9c9ffd95 100644
--- a/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/shared/startup/bspstart.c
@@ -87,10 +87,6 @@ unsigned int BSP_processor_frequency;
* Time base divisior (how many tick for 1 second).
*/
unsigned int BSP_time_base_divisor;
-/*
- * system init stack
- */
-#define INIT_STACK_SIZE 0x1000
void BSP_panic(char *s)
{
@@ -143,7 +139,6 @@ unsigned int get_eumbbar(void) {
void bsp_start( void )
{
- unsigned char *stack;
#if !defined(mvme2100)
unsigned l2cr;
#endif
@@ -212,20 +207,9 @@ void bsp_start( void )
#endif
/*
- * the initial stack has aready been set to this value in start.S
- * so there is no need to set it in r1 again... It is just for info
- * so that It can be printed without accessing R1.
- */
- stack = ((unsigned char*) __rtems_end) +
- INIT_STACK_SIZE - PPC_MINIMUM_STACK_FRAME_SIZE;
-
- /* tag the bottom (T. Straumann 6/36/2001 <strauman@slac.stanford.edu>) */
- *((uint32_t*)stack) = 0;
-
- /*
* Initialize the interrupt related settings.
*/
- intrStackStart = (uint32_t) __rtems_end + INIT_STACK_SIZE;
+ intrStackStart = (uint32_t) __rtems_end;
intrStackSize = rtems_configuration_get_interrupt_stack_size();
/*
diff --git a/c/src/lib/libbsp/powerpc/shared/startup/linkcmds b/c/src/lib/libbsp/powerpc/shared/startup/linkcmds
index 2f0335afe8..02e475e8d7 100644
--- a/c/src/lib/libbsp/powerpc/shared/startup/linkcmds
+++ b/c/src/lib/libbsp/powerpc/shared/startup/linkcmds
@@ -224,6 +224,8 @@ _SDA_BASE_ = __SDATA_START__ + 0x8000;
PROVIDE (__bss_end = .);
} > CODE
. = ALIGN(16);
+ . += 0x1000;
+ __stack = .;
_end = . ;
__rtems_end = . ;
PROVIDE (end = .);