bsp/qoriq: Set PPC_EXC_CONFIG_USE_FIXED_HANDLER

This commit is contained in:
Sebastian Huber
2012-11-21 09:54:12 +01:00
parent c383372f3f
commit f6999e6816
4 changed files with 40 additions and 3 deletions

View File

@@ -64,6 +64,7 @@ libbsp_a_SOURCES += ../../shared/bsplibc.c \
../../shared/bspclean.c \ ../../shared/bspclean.c \
../../shared/bspgetworkarea.c \ ../../shared/bspgetworkarea.c \
../../shared/src/bsp-uboot-board-info.c \ ../../shared/src/bsp-uboot-board-info.c \
../shared/src/ppc-exc-handler-table.c \
../shared/src/tictac.c \ ../shared/src/tictac.c \
../shared/src/bsp-start-zero.S \ ../shared/src/bsp-start-zero.S \
../shared/startup/bspidle.c \ ../shared/startup/bspidle.c \

View File

@@ -20,6 +20,10 @@ RTEMS_BSPOPTS_HELP_INSTRUCTION_CACHE_ENABLED
RTEMS_BSPOPTS_SET([BSP_USE_DATA_CACHE_BLOCK_TOUCH],[*],[1]) RTEMS_BSPOPTS_SET([BSP_USE_DATA_CACHE_BLOCK_TOUCH],[*],[1])
RTEMS_BSPOPTS_HELP([BSP_USE_DATA_CACHE_BLOCK_TOUCH],[if defined use dcbt instruction]) RTEMS_BSPOPTS_HELP([BSP_USE_DATA_CACHE_BLOCK_TOUCH],[if defined use dcbt instruction])
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_CONSOLE_BAUD],[*],[115200]) RTEMS_BSPOPTS_SET([BSP_CONSOLE_BAUD],[*],[115200])
RTEMS_BSPOPTS_HELP([BSP_CONSOLE_BAUD],[default baud for console and other serial devices]) RTEMS_BSPOPTS_HELP([BSP_CONSOLE_BAUD],[default baud for console and other serial devices])

View File

@@ -7,7 +7,7 @@
*/ */
/* /*
* Copyright (c) 2010, 2011 embedded brains GmbH. All rights reserved. * Copyright (c) 2010, 2012 embedded brains GmbH. All rights reserved.
* *
* embedded brains GmbH * embedded brains GmbH
* Obere Lagerstr. 30 * Obere Lagerstr. 30
@@ -240,7 +240,7 @@ rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
return pic_vector_enable(vector, VPR_MSK); return pic_vector_enable(vector, VPR_MSK);
} }
static int qoriq_external_exception_handler(BSP_Exception_frame *frame, unsigned exception_number) static void qoriq_interrupt_dispatch(void)
{ {
rtems_vector_number vector = qoriq.pic.iack; rtems_vector_number vector = qoriq.pic.iack;
@@ -256,9 +256,21 @@ static int qoriq_external_exception_handler(BSP_Exception_frame *frame, unsigned
} else { } else {
bsp_interrupt_handler_default(vector); bsp_interrupt_handler_default(vector);
} }
}
#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
static int qoriq_external_exception_handler(BSP_Exception_frame *frame, unsigned exception_number)
{
qoriq_interrupt_dispatch();
return 0; return 0;
} }
#else
void bsp_interrupt_dispatch(void)
{
qoriq_interrupt_dispatch();
}
#endif
static bool pic_is_ipi(rtems_vector_number vector) static bool pic_is_ipi(rtems_vector_number vector)
{ {
@@ -291,9 +303,11 @@ rtems_status_code bsp_interrupt_facility_initialize(void)
rtems_vector_number i = 0; rtems_vector_number i = 0;
uint32_t processor_id = ppc_processor_id(); uint32_t processor_id = ppc_processor_id();
#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER
if (ppc_exc_set_handler(ASM_EXT_VECTOR, qoriq_external_exception_handler)) { if (ppc_exc_set_handler(ASM_EXT_VECTOR, qoriq_external_exception_handler)) {
return RTEMS_IO_ERROR; return RTEMS_IO_ERROR;
} }
#endif
if (processor_id == 0) { if (processor_id == 0) {
/* Core 0 must do the basic initialization */ /* Core 0 must do the basic initialization */

View File

@@ -7,7 +7,7 @@
*/ */
/* /*
* Copyright (c) 2010-2011 embedded brains GmbH. All rights reserved. * Copyright (c) 2010-2012 embedded brains GmbH. All rights reserved.
* *
* embedded brains GmbH * embedded brains GmbH
* Obere Lagerstr. 30 * Obere Lagerstr. 30
@@ -178,9 +178,15 @@ bsp_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
@@ -203,13 +209,25 @@ system_call:
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