summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-12-23 09:53:43 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-01-09 14:03:34 +0100
commit71b611d172251f4a86fe6e45373cab082371b727 (patch)
treec477f904e02692a86c8901dc6dff275ef476fcaf /c/src/lib/libcpu
parentbsps/powerpc: Add TMR access macros (diff)
downloadrtems-71b611d172251f4a86fe6e45373cab082371b727.tar.bz2
bsps/powerpc: ppc_exc_initialize_interrupt_stack()
Diffstat (limited to 'c/src/lib/libcpu')
-rw-r--r--c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c12
-rw-r--r--c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h19
2 files changed, 20 insertions, 11 deletions
diff --git a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c
index f830bad888..ef978f8d57 100644
--- a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c
+++ b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_initialize.c
@@ -156,8 +156,6 @@ void ppc_exc_initialize_with_vector_base(
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
const ppc_exc_categories *const categories = ppc_exc_current_categories();
- uintptr_t const interrupt_stack_end = interrupt_stack_begin + interrupt_stack_size;
- uintptr_t interrupt_stack_pointer = interrupt_stack_end - PPC_MINIMUM_STACK_FRAME_SIZE;
unsigned vector = 0;
uint32_t sda_base = 0;
uint32_t r13 = 0;
@@ -180,15 +178,7 @@ void ppc_exc_initialize_with_vector_base(
ppc_exc_fatal_error();
}
- /* Ensure proper interrupt stack alignment */
- interrupt_stack_pointer &= ~((uintptr_t) CPU_STACK_ALIGNMENT - 1);
-
- /* Tag interrupt stack bottom */
- *(uint32_t *) interrupt_stack_pointer = 0;
-
- /* Move interrupt stack values to special purpose registers */
- PPC_SET_SPECIAL_PURPOSE_REGISTER(SPRG1, interrupt_stack_pointer);
- PPC_SET_SPECIAL_PURPOSE_REGISTER(SPRG2, interrupt_stack_begin);
+ ppc_exc_initialize_interrupt_stack(interrupt_stack_begin, interrupt_stack_size);
#ifndef PPC_EXC_CONFIG_BOOKE_ONLY
diff --git a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h
index 9e5f466f75..bf13c757f1 100644
--- a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h
+++ b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/vectors.h
@@ -355,6 +355,25 @@ rtems_status_code ppc_exc_make_prologue(
size_t *prologue_size
);
+static inline void ppc_exc_initialize_interrupt_stack(
+ uintptr_t stack_begin,
+ uintptr_t stack_size
+)
+{
+ uintptr_t stack_end = stack_begin + stack_size;
+ uintptr_t stack_pointer = stack_end - PPC_MINIMUM_STACK_FRAME_SIZE;
+
+ /* Ensure proper interrupt stack alignment */
+ stack_pointer &= ~((uintptr_t) CPU_STACK_ALIGNMENT - 1);
+
+ /* Tag interrupt stack bottom */
+ *(uint32_t *) stack_pointer = 0;
+
+ /* Move interrupt stack values to special purpose registers */
+ PPC_SET_SPECIAL_PURPOSE_REGISTER(SPRG1, stack_pointer);
+ PPC_SET_SPECIAL_PURPOSE_REGISTER(SPRG2, stack_begin);
+}
+
/**
* @brief Initializes the exception handling.
*