bsp/mpc55xx: Set PPC_EXC_CONFIG_USE_FIXED_HANDLER

This commit is contained in:
Sebastian Huber
2012-11-19 09:02:12 +01:00
parent 1c479be447
commit 3ce66aabb5
5 changed files with 55 additions and 11 deletions

View File

@@ -69,6 +69,7 @@ libbsp_a_SOURCES += ../../shared/src/stackalloc.c
libbsp_a_SOURCES += ../shared/src/bsp-start-zero.S libbsp_a_SOURCES += ../shared/src/bsp-start-zero.S
libbsp_a_SOURCES += ../shared/src/memcpy.c libbsp_a_SOURCES += ../shared/src/memcpy.c
libbsp_a_SOURCES += ../shared/src/tictac.c libbsp_a_SOURCES += ../shared/src/tictac.c
libbsp_a_SOURCES += ../shared/src/ppc-exc-handler-table.c
libbsp_a_SOURCES += startup/bspstart.c libbsp_a_SOURCES += startup/bspstart.c
libbsp_a_SOURCES += startup/bspworkareainit.c libbsp_a_SOURCES += startup/bspworkareainit.c
libbsp_a_SOURCES += startup/exc-vector-base.S libbsp_a_SOURCES += startup/exc-vector-base.S

View File

@@ -32,6 +32,10 @@ RTEMS_BSPOPTS_SET_INSTRUCTION_CACHE_ENABLED([gwlcfm],[])
RTEMS_BSPOPTS_SET_INSTRUCTION_CACHE_ENABLED([*],[1]) RTEMS_BSPOPTS_SET_INSTRUCTION_CACHE_ENABLED([*],[1])
RTEMS_BSPOPTS_HELP_INSTRUCTION_CACHE_ENABLED RTEMS_BSPOPTS_HELP_INSTRUCTION_CACHE_ENABLED
RTEMS_BSPOPTS_SET([PPC_EXC_CONFIG_USE_FIXED_HANDLER],[*],[1])
RTEMS_BSPOPTS_HELP([PPC_EXC_CONFIG_USE_FIXED_HANDLER],
[use fixed high-level exception handler])
RTEMS_BSPOPTS_SET([BSP_INTERRUPT_HANDLER_TABLE_SIZE],[mpc5643l*],[127]) RTEMS_BSPOPTS_SET([BSP_INTERRUPT_HANDLER_TABLE_SIZE],[mpc5643l*],[127])
RTEMS_BSPOPTS_SET([BSP_INTERRUPT_HANDLER_TABLE_SIZE],[mpc5566*],[127]) RTEMS_BSPOPTS_SET([BSP_INTERRUPT_HANDLER_TABLE_SIZE],[mpc5566*],[127])
RTEMS_BSPOPTS_SET([BSP_INTERRUPT_HANDLER_TABLE_SIZE],[mpc5674f*],[255]) RTEMS_BSPOPTS_SET([BSP_INTERRUPT_HANDLER_TABLE_SIZE],[mpc5674f*],[255])

View File

@@ -108,7 +108,9 @@ void bsp_start(void)
(uintptr_t) bsp_section_work_begin, (uintptr_t) bsp_section_work_begin,
rtems_configuration_get_interrupt_stack_size() rtems_configuration_get_interrupt_stack_size()
); );
#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
ppc_exc_set_handler(ASM_ALIGN_VECTOR, ppc_exc_alignment_handler); ppc_exc_set_handler(ASM_ALIGN_VECTOR, ppc_exc_alignment_handler);
#endif
/* Initialize interrupts */ /* Initialize interrupts */
bsp_interrupt_initialize(); bsp_interrupt_initialize();

View File

@@ -59,9 +59,15 @@ mpc55xx_exc_vector_base:
li r4, 4 li r4, 4
b ppc_exc_wrap_nopush_std b ppc_exc_wrap_nopush_std
stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1) stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1)
#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1) stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1)
li r4, -32763 li r4, -32763
#endif
b ppc_exc_wrap_async_normal b ppc_exc_wrap_async_normal
#ifdef PPC_EXC_CONFIG_USE_FIXED_HANDLER
nop
nop
#endif
stwu r1, -EXC_GENERIC_SIZE(r1) stwu r1, -EXC_GENERIC_SIZE(r1)
stw r4, GPR4_OFFSET(r1) stw r4, GPR4_OFFSET(r1)
li r4, 6 li r4, 6
@@ -83,13 +89,25 @@ mpc55xx_exc_vector_base:
li r4, 24 li r4, 24
b ppc_exc_wrap_nopush_std b ppc_exc_wrap_nopush_std
stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1) stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1)
#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1) stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1)
li r4, -32752 li r4, -32752
#endif
b ppc_exc_wrap_async_normal b ppc_exc_wrap_async_normal
#ifdef PPC_EXC_CONFIG_USE_FIXED_HANDLER
nop
nop
#endif
stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1) stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1)
#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1) stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1)
li r4, -32749 li r4, -32749
#endif
b ppc_exc_wrap_async_normal b ppc_exc_wrap_async_normal
#ifdef PPC_EXC_CONFIG_USE_FIXED_HANDLER
nop
nop
#endif
stw r1, ppc_exc_lock_crit@sdarel(r13) stw r1, ppc_exc_lock_crit@sdarel(r13)
stw r4, ppc_exc_vector_register_crit@sdarel(r13) stw r4, ppc_exc_vector_register_crit@sdarel(r13)
li r4, -32748 li r4, -32748

View File

@@ -7,12 +7,13 @@
*/ */
/* /*
* Copyright (c) 2008 * Copyright (c) 2008-2012 embedded brains GmbH. All rights reserved.
* Embedded Brains GmbH *
* embedded brains GmbH
* Obere Lagerstr. 30 * Obere Lagerstr. 30
* D-82178 Puchheim * 82178 Puchheim
* Germany * Germany
* rtems@embedded-brains.de * <rtems@embedded-brains.de>
* *
* The license and distribution terms for this file may be * The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at * found in the file LICENSE in this distribution or at
@@ -112,10 +113,7 @@ rtems_status_code mpc55xx_interrupt_handler_install(
} }
} }
/** static void mpc55xx_interrupt_dispatch(void)
* @brief External exception handler.
*/
static int mpc55xx_external_exception_handler( BSP_Exception_frame *frame, unsigned exception_number)
{ {
/* Acknowlege interrupt request */ /* Acknowlege interrupt request */
rtems_vector_number vector = INTC.IACKR.B.INTVEC; rtems_vector_number vector = INTC.IACKR.B.INTVEC;
@@ -131,18 +129,39 @@ static int mpc55xx_external_exception_handler( BSP_Exception_frame *frame, unsig
/* End of interrupt */ /* End of interrupt */
INTC.EOIR.R = 1; INTC.EOIR.R = 1;
}
#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
/**
* @brief External exception handler.
*/
static int mpc55xx_external_exception_handler( BSP_Exception_frame *frame, unsigned exception_number)
{
mpc55xx_interrupt_dispatch();
return 0; return 0;
} }
#else /* PPC_EXC_CONFIG_USE_FIXED_HANDLER */
void bsp_interrupt_dispatch(void)
{
mpc55xx_interrupt_dispatch();
}
#endif /* PPC_EXC_CONFIG_USE_FIXED_HANDLER */
rtems_status_code bsp_interrupt_facility_initialize(void) rtems_status_code bsp_interrupt_facility_initialize(void)
{ {
rtems_vector_number vector; rtems_vector_number vector;
#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
/* Install exception handler */ /* Install exception handler */
if (ppc_exc_set_handler( ASM_EXT_VECTOR, mpc55xx_external_exception_handler)) { if (ppc_exc_set_handler( ASM_EXT_VECTOR, mpc55xx_external_exception_handler)) {
return RTEMS_IO_ERROR; return RTEMS_IO_ERROR;
} }
#endif
/* Initialize interrupt controller */ /* Initialize interrupt controller */