summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2014-06-04 11:23:34 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-09-10 14:06:08 +0200
commitf82752a474ee8157eafcb2f3192fb3ed8d3def9a (patch)
tree5aaa8ab0eb9676e90bf53ac15014c059ab93cc8b /cpukit/score/cpu
parentbsps/arm: Fix get cache size (diff)
downloadrtems-f82752a474ee8157eafcb2f3192fb3ed8d3def9a.tar.bz2
Let CPU/BSP Fatal handler have access to source
Without the source the error code does not say that much. Let it be up to the CPU/BSP to determine the error code reported on fatal shutdown. This patch does not change the current behaviour, just adds the option to handle the source of the fatal halt.
Diffstat (limited to '')
-rw-r--r--cpukit/score/cpu/arm/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/avr/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/bfin/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/h8300/rtems/score/cpu.h4
-rw-r--r--cpukit/score/cpu/i386/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/lm32/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/m32c/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/m32r/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/m68k/rtems/score/cpu.h4
-rw-r--r--cpukit/score/cpu/mips/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/moxie/rtems/score/cpu.h4
-rw-r--r--cpukit/score/cpu/nios2/nios2-fatal-halt.c2
-rw-r--r--cpukit/score/cpu/nios2/nios2-iic-irq.c2
-rw-r--r--cpukit/score/cpu/nios2/rtems/score/cpu.h3
-rw-r--r--cpukit/score/cpu/no_cpu/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/powerpc/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/sh/rtems/score/cpu.h4
-rw-r--r--cpukit/score/cpu/sparc/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/sparc64/rtems/score/cpu.h2
-rw-r--r--cpukit/score/cpu/v850/rtems/score/cpu.h2
20 files changed, 25 insertions, 24 deletions
diff --git a/cpukit/score/cpu/arm/rtems/score/cpu.h b/cpukit/score/cpu/arm/rtems/score/cpu.h
index 089fc27fbb..a032d4aff9 100644
--- a/cpukit/score/cpu/arm/rtems/score/cpu.h
+++ b/cpukit/score/cpu/arm/rtems/score/cpu.h
@@ -455,7 +455,7 @@ void _CPU_Context_Initialize(
*(*(_destination)) = _CPU_Null_fp_context; \
} while (0)
-#define _CPU_Fatal_halt( _err ) \
+#define _CPU_Fatal_halt( _source, _err ) \
do { \
uint32_t _level; \
uint32_t _error = _err; \
diff --git a/cpukit/score/cpu/avr/rtems/score/cpu.h b/cpukit/score/cpu/avr/rtems/score/cpu.h
index 70a0ddb429..ba3bfb8015 100644
--- a/cpukit/score/cpu/avr/rtems/score/cpu.h
+++ b/cpukit/score/cpu/avr/rtems/score/cpu.h
@@ -814,7 +814,7 @@ uint32_t _CPU_ISR_Get_level( void );
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/bfin/rtems/score/cpu.h b/cpukit/score/cpu/bfin/rtems/score/cpu.h
index 306e4eb316..0b728e7a1c 100644
--- a/cpukit/score/cpu/bfin/rtems/score/cpu.h
+++ b/cpukit/score/cpu/bfin/rtems/score/cpu.h
@@ -912,7 +912,7 @@ void _CPU_Context_Initialize(
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
__asm__ volatile ( "cli R1; \
R1 = %0; \
diff --git a/cpukit/score/cpu/h8300/rtems/score/cpu.h b/cpukit/score/cpu/h8300/rtems/score/cpu.h
index 621b3f131f..81704459c7 100644
--- a/cpukit/score/cpu/h8300/rtems/score/cpu.h
+++ b/cpukit/score/cpu/h8300/rtems/score/cpu.h
@@ -847,8 +847,8 @@ uint32_t _CPU_ISR_Get_level( void );
* XXX
*/
-#define _CPU_Fatal_halt( _error ) \
- printk("Fatal Error %d Halted\n",_error); \
+#define _CPU_Fatal_halt( _source, _error ) \
+ printk("Fatal Error %d.%d Halted\n",_source, _error); \
for(;;)
diff --git a/cpukit/score/cpu/i386/rtems/score/cpu.h b/cpukit/score/cpu/i386/rtems/score/cpu.h
index 2d1472d4df..e0ab037938 100644
--- a/cpukit/score/cpu/i386/rtems/score/cpu.h
+++ b/cpukit/score/cpu/i386/rtems/score/cpu.h
@@ -525,7 +525,7 @@ uint32_t _CPU_ISR_Get_level( void );
* + disable interrupts and halt the CPU
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
uint32_t _error_lvalue = ( _error ); \
__asm__ volatile ( "cli ; \
diff --git a/cpukit/score/cpu/lm32/rtems/score/cpu.h b/cpukit/score/cpu/lm32/rtems/score/cpu.h
index 8e03245eb1..17fa33c95f 100644
--- a/cpukit/score/cpu/lm32/rtems/score/cpu.h
+++ b/cpukit/score/cpu/lm32/rtems/score/cpu.h
@@ -915,7 +915,7 @@ extern char _gp[];
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/m32c/rtems/score/cpu.h b/cpukit/score/cpu/m32c/rtems/score/cpu.h
index fa31d74dd9..011fe48b7e 100644
--- a/cpukit/score/cpu/m32c/rtems/score/cpu.h
+++ b/cpukit/score/cpu/m32c/rtems/score/cpu.h
@@ -906,7 +906,7 @@ void _CPU_Context_Restart_self(
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/m32r/rtems/score/cpu.h b/cpukit/score/cpu/m32r/rtems/score/cpu.h
index bf1d3fc9e8..d35bee889d 100644
--- a/cpukit/score/cpu/m32r/rtems/score/cpu.h
+++ b/cpukit/score/cpu/m32r/rtems/score/cpu.h
@@ -924,7 +924,7 @@ void _CPU_Context_Restart_self(
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/m68k/rtems/score/cpu.h b/cpukit/score/cpu/m68k/rtems/score/cpu.h
index fb0c60c27a..d2224657eb 100644
--- a/cpukit/score/cpu/m68k/rtems/score/cpu.h
+++ b/cpukit/score/cpu/m68k/rtems/score/cpu.h
@@ -479,7 +479,7 @@ void *_CPU_Thread_Idle_body( uintptr_t ignored );
*/
#if ( defined(__mcoldfire__) )
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ __asm__ volatile( "move.w %%sr,%%d0\n\t" \
"or.l %2,%%d0\n\t" \
"move.w %%d0,%%sr\n\t" \
@@ -491,7 +491,7 @@ void *_CPU_Thread_Idle_body( uintptr_t ignored );
: "d0", "d1" ); \
}
#else
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ __asm__ volatile( "movl %0,%%d0; " \
"orw #0x0700,%%sr; " \
"stop #0x2700" : "=d" ((_error)) : "0" ((_error)) ); \
diff --git a/cpukit/score/cpu/mips/rtems/score/cpu.h b/cpukit/score/cpu/mips/rtems/score/cpu.h
index 392a995917..7fc639b520 100644
--- a/cpukit/score/cpu/mips/rtems/score/cpu.h
+++ b/cpukit/score/cpu/mips/rtems/score/cpu.h
@@ -913,7 +913,7 @@ void _CPU_Context_Initialize(
* halts/stops the CPU.
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
do { \
unsigned int _level; \
_CPU_ISR_Disable(_level); \
diff --git a/cpukit/score/cpu/moxie/rtems/score/cpu.h b/cpukit/score/cpu/moxie/rtems/score/cpu.h
index 2c72bf616d..cf226011d4 100644
--- a/cpukit/score/cpu/moxie/rtems/score/cpu.h
+++ b/cpukit/score/cpu/moxie/rtems/score/cpu.h
@@ -733,8 +733,8 @@ uint32_t _CPU_ISR_Get_level( void );
*
* XXX
*/
-#define _CPU_Fatal_halt( _error ) \
- printk("Fatal Error %d Halted\n",_error); \
+#define _CPU_Fatal_halt( _source, _error ) \
+ printk("Fatal Error %d.%d Halted\n",_source,_error); \
for(;;)
/* end of Fatal Error manager macros */
diff --git a/cpukit/score/cpu/nios2/nios2-fatal-halt.c b/cpukit/score/cpu/nios2/nios2-fatal-halt.c
index 7632fa52e0..40cae874c0 100644
--- a/cpukit/score/cpu/nios2/nios2-fatal-halt.c
+++ b/cpukit/score/cpu/nios2/nios2-fatal-halt.c
@@ -14,7 +14,7 @@
#include <rtems/score/cpu.h>
#include <rtems/score/nios2-utility.h>
-void _CPU_Fatal_halt( uint32_t _error )
+void _CPU_Fatal_halt( uint32_t _source, uint32_t _error )
{
/* write 0 to status register (disable interrupts) */
__builtin_wrctl( NIOS2_CTLREG_INDEX_STATUS, 0 );
diff --git a/cpukit/score/cpu/nios2/nios2-iic-irq.c b/cpukit/score/cpu/nios2/nios2-iic-irq.c
index 8f3f3b9348..f51bc2d2ce 100644
--- a/cpukit/score/cpu/nios2/nios2-iic-irq.c
+++ b/cpukit/score/cpu/nios2/nios2-iic-irq.c
@@ -133,5 +133,5 @@ void __ISR_Handler(void)
void __Exception_Handler(CPU_Exception_frame *efr)
{
- _CPU_Fatal_halt(0xECC0);
+ _CPU_Fatal_halt(RTEMS_FATAL_SOURCE_EXCEPTION, 0xECC0); /* source ignored */
}
diff --git a/cpukit/score/cpu/nios2/rtems/score/cpu.h b/cpukit/score/cpu/nios2/rtems/score/cpu.h
index fcfef8d461..a14392c821 100644
--- a/cpukit/score/cpu/nios2/rtems/score/cpu.h
+++ b/cpukit/score/cpu/nios2/rtems/score/cpu.h
@@ -310,7 +310,8 @@ void _CPU_Context_Initialize(
#define _CPU_Context_Restart_self( _the_context ) \
_CPU_Context_restore( (_the_context) );
-void _CPU_Fatal_halt( uint32_t _error ) RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
+void _CPU_Fatal_halt( uint32_t _source, uint32_t _error )
+ RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
/**
* @brief CPU initialization.
diff --git a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
index 0fcc6e719c..0a0cc415ca 100644
--- a/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
+++ b/cpukit/score/cpu/no_cpu/rtems/score/cpu.h
@@ -1071,7 +1071,7 @@ uint32_t _CPU_ISR_Get_level( void );
*
* XXX document implementation including references if appropriate
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
{ \
}
diff --git a/cpukit/score/cpu/powerpc/rtems/score/cpu.h b/cpukit/score/cpu/powerpc/rtems/score/cpu.h
index 13f50ade77..52992f3d89 100644
--- a/cpukit/score/cpu/powerpc/rtems/score/cpu.h
+++ b/cpukit/score/cpu/powerpc/rtems/score/cpu.h
@@ -677,7 +677,7 @@ void _BSP_Fatal_error(unsigned int);
#endif /* ASM */
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
_BSP_Fatal_error(_error)
/* end of Fatal Error manager macros */
diff --git a/cpukit/score/cpu/sh/rtems/score/cpu.h b/cpukit/score/cpu/sh/rtems/score/cpu.h
index cb899539fb..217eb7da96 100644
--- a/cpukit/score/cpu/sh/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sh/rtems/score/cpu.h
@@ -675,9 +675,9 @@ SCORE_EXTERN void _CPU_Context_Initialize(
#ifdef BSP_FATAL_HALT
/* we manage the fatal error in the board support package */
void bsp_fatal_halt( uint32_t _error);
-#define _CPU_Fatal_halt( _error ) bsp_fatal_halt( _error)
+#define _CPU_Fatal_halt( _source, _error ) bsp_fatal_halt( _error)
#else
-#define _CPU_Fatal_halt( _error)\
+#define _CPU_Fatal_halt( _source, _error)\
{ \
__asm__ volatile("mov.l %0,r0"::"m" (_error)); \
__asm__ volatile("mov #1, r4"); \
diff --git a/cpukit/score/cpu/sparc/rtems/score/cpu.h b/cpukit/score/cpu/sparc/rtems/score/cpu.h
index e44ab71f33..1cf2e9ac51 100644
--- a/cpukit/score/cpu/sparc/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sparc/rtems/score/cpu.h
@@ -1080,7 +1080,7 @@ void _CPU_Context_Initialize(
* location or a register, optionally disables interrupts, and
* halts/stops the CPU.
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
do { \
uint32_t level; \
\
diff --git a/cpukit/score/cpu/sparc64/rtems/score/cpu.h b/cpukit/score/cpu/sparc64/rtems/score/cpu.h
index bf7d4fb42b..dd5040a6ac 100644
--- a/cpukit/score/cpu/sparc64/rtems/score/cpu.h
+++ b/cpukit/score/cpu/sparc64/rtems/score/cpu.h
@@ -905,7 +905,7 @@ void _CPU_Context_Initialize(
* halts/stops the CPU.
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
do { \
uint32_t level; \
\
diff --git a/cpukit/score/cpu/v850/rtems/score/cpu.h b/cpukit/score/cpu/v850/rtems/score/cpu.h
index 7234d67a96..e76a2a2728 100644
--- a/cpukit/score/cpu/v850/rtems/score/cpu.h
+++ b/cpukit/score/cpu/v850/rtems/score/cpu.h
@@ -871,7 +871,7 @@ void _CPU_Context_Initialize(
*
* Move the error code into r10, disable interrupts and halt.
*/
-#define _CPU_Fatal_halt( _error ) \
+#define _CPU_Fatal_halt( _source, _error ) \
do { \
__asm__ __volatile__ ( "di" ); \
__asm__ __volatile__ ( "mov %0, r10; " : "=r" ((_error)) ); \