summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp
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 /c/src/lib/libbsp
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.
Diffstat (limited to 'c/src/lib/libbsp')
-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 = .);