[rtems commit] bsp/qoriq: Set PPC_EXC_CONFIG_USE_FIXED_HANDLER

Sebastian Huber sebh at rtems.org
Mon Dec 3 12:14:53 UTC 2012


Module:    rtems
Branch:    master
Commit:    f6999e68162c960ea2eb835df7d5cef08ad1dc09
Changeset: http://git.rtems.org/rtems/commit/?id=f6999e68162c960ea2eb835df7d5cef08ad1dc09

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Nov 21 09:54:12 2012 +0100

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 cc9c8b4..54fc547 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 fc2dbd7..6060831 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 d6b18ef..c124db5 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 463e6b2..d95521c 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 at sdarel(r13)
 	stw	r4, ppc_exc_vector_register_crit at sdarel(r13)
 	li	r4, -32748




More information about the vc mailing list