From f6999e68162c960ea2eb835df7d5cef08ad1dc09 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 21 Nov 2012 09:54:12 +0100 Subject: bsp/qoriq: Set PPC_EXC_CONFIG_USE_FIXED_HANDLER --- c/src/lib/libbsp/powerpc/qoriq/Makefile.am | 1 + c/src/lib/libbsp/powerpc/qoriq/configure.ac | 4 ++++ c/src/lib/libbsp/powerpc/qoriq/irq/irq.c | 18 ++++++++++++++++-- c/src/lib/libbsp/powerpc/qoriq/start/start.S | 20 +++++++++++++++++++- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/c/src/lib/libbsp/powerpc/qoriq/Makefile.am b/c/src/lib/libbsp/powerpc/qoriq/Makefile.am index cc9c8b4a6e..54fc5477ed 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/Makefile.am +++ b/c/src/lib/libbsp/powerpc/qoriq/Makefile.am @@ -64,6 +64,7 @@ libbsp_a_SOURCES += ../../shared/bsplibc.c \ ../../shared/bspclean.c \ ../../shared/bspgetworkarea.c \ ../../shared/src/bsp-uboot-board-info.c \ + ../shared/src/ppc-exc-handler-table.c \ ../shared/src/tictac.c \ ../shared/src/bsp-start-zero.S \ ../shared/startup/bspidle.c \ diff --git a/c/src/lib/libbsp/powerpc/qoriq/configure.ac b/c/src/lib/libbsp/powerpc/qoriq/configure.ac index fc2dbd7a35..6060831d0a 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/configure.ac +++ b/c/src/lib/libbsp/powerpc/qoriq/configure.ac @@ -20,6 +20,10 @@ RTEMS_BSPOPTS_HELP_INSTRUCTION_CACHE_ENABLED 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_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_HELP([BSP_CONSOLE_BAUD],[default baud for console and other serial devices]) diff --git a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c index d6b18ef0d9..c124db5030 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/qoriq/irq/irq.c @@ -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 * 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); } -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; @@ -256,9 +256,21 @@ static int qoriq_external_exception_handler(BSP_Exception_frame *frame, unsigned } else { 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; } +#else +void bsp_interrupt_dispatch(void) +{ + qoriq_interrupt_dispatch(); +} +#endif 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; 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)) { return RTEMS_IO_ERROR; } +#endif if (processor_id == 0) { /* Core 0 must do the basic initialization */ diff --git a/c/src/lib/libbsp/powerpc/qoriq/start/start.S b/c/src/lib/libbsp/powerpc/qoriq/start/start.S index 463e6b28aa..d95521c870 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/start/start.S +++ b/c/src/lib/libbsp/powerpc/qoriq/start/start.S @@ -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 * Obere Lagerstr. 30 @@ -178,9 +178,15 @@ bsp_exc_vector_base: li r4, 4 b ppc_exc_wrap_nopush_std stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1) +#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1) li r4, -32763 +#endif b ppc_exc_wrap_async_normal +#ifdef PPC_EXC_CONFIG_USE_FIXED_HANDLER + nop + nop +#endif stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 6 @@ -203,13 +209,25 @@ system_call: li r4, 24 b ppc_exc_wrap_nopush_std stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1) +#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1) li r4, -32752 +#endif b ppc_exc_wrap_async_normal +#ifdef PPC_EXC_CONFIG_USE_FIXED_HANDLER + nop + nop +#endif stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1) +#ifndef PPC_EXC_CONFIG_USE_FIXED_HANDLER stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1) li r4, -32749 +#endif 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 r4, ppc_exc_vector_register_crit@sdarel(r13) li r4, -32748 -- cgit v1.2.3