aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/blackfin/kernel/traps.c30
-rw-r--r--arch/blackfin/mach-common/irqpanic.c10
-rw-r--r--include/asm-blackfin/traps.h96
3 files changed, 94 insertions, 42 deletions
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c
index cecf3a29ebb3..d88098c58bfa 100644
--- a/arch/blackfin/kernel/traps.c
+++ b/arch/blackfin/kernel/traps.c
@@ -250,7 +250,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
250 case VEC_EXCPT03: 250 case VEC_EXCPT03:
251 info.si_code = SEGV_STACKFLOW; 251 info.si_code = SEGV_STACKFLOW;
252 sig = SIGSEGV; 252 sig = SIGSEGV;
253 printk(KERN_NOTICE EXC_0x03); 253 printk(KERN_NOTICE EXC_0x03(KERN_NOTICE));
254 CHK_DEBUGGER_TRAP(); 254 CHK_DEBUGGER_TRAP();
255 break; 255 break;
256 /* 0x04 - User Defined, Caught by default */ 256 /* 0x04 - User Defined, Caught by default */
@@ -279,7 +279,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
279 case VEC_OVFLOW: 279 case VEC_OVFLOW:
280 info.si_code = TRAP_TRACEFLOW; 280 info.si_code = TRAP_TRACEFLOW;
281 sig = SIGTRAP; 281 sig = SIGTRAP;
282 printk(KERN_NOTICE EXC_0x11); 282 printk(KERN_NOTICE EXC_0x11(KERN_NOTICE));
283 CHK_DEBUGGER_TRAP(); 283 CHK_DEBUGGER_TRAP();
284 break; 284 break;
285 /* 0x12 - Reserved, Caught by default */ 285 /* 0x12 - Reserved, Caught by default */
@@ -301,35 +301,35 @@ asmlinkage void trap_c(struct pt_regs *fp)
301 case VEC_UNDEF_I: 301 case VEC_UNDEF_I:
302 info.si_code = ILL_ILLOPC; 302 info.si_code = ILL_ILLOPC;
303 sig = SIGILL; 303 sig = SIGILL;
304 printk(KERN_NOTICE EXC_0x21); 304 printk(KERN_NOTICE EXC_0x21(KERN_NOTICE));
305 CHK_DEBUGGER_TRAP(); 305 CHK_DEBUGGER_TRAP();
306 break; 306 break;
307 /* 0x22 - Illegal Instruction Combination, handled here */ 307 /* 0x22 - Illegal Instruction Combination, handled here */
308 case VEC_ILGAL_I: 308 case VEC_ILGAL_I:
309 info.si_code = ILL_ILLPARAOP; 309 info.si_code = ILL_ILLPARAOP;
310 sig = SIGILL; 310 sig = SIGILL;
311 printk(KERN_NOTICE EXC_0x22); 311 printk(KERN_NOTICE EXC_0x22(KERN_NOTICE));
312 CHK_DEBUGGER_TRAP(); 312 CHK_DEBUGGER_TRAP();
313 break; 313 break;
314 /* 0x23 - Data CPLB protection violation, handled here */ 314 /* 0x23 - Data CPLB protection violation, handled here */
315 case VEC_CPLB_VL: 315 case VEC_CPLB_VL:
316 info.si_code = ILL_CPLB_VI; 316 info.si_code = ILL_CPLB_VI;
317 sig = SIGBUS; 317 sig = SIGBUS;
318 printk(KERN_NOTICE EXC_0x23); 318 printk(KERN_NOTICE EXC_0x23(KERN_NOTICE));
319 CHK_DEBUGGER_TRAP(); 319 CHK_DEBUGGER_TRAP();
320 break; 320 break;
321 /* 0x24 - Data access misaligned, handled here */ 321 /* 0x24 - Data access misaligned, handled here */
322 case VEC_MISALI_D: 322 case VEC_MISALI_D:
323 info.si_code = BUS_ADRALN; 323 info.si_code = BUS_ADRALN;
324 sig = SIGBUS; 324 sig = SIGBUS;
325 printk(KERN_NOTICE EXC_0x24); 325 printk(KERN_NOTICE EXC_0x24(KERN_NOTICE));
326 CHK_DEBUGGER_TRAP(); 326 CHK_DEBUGGER_TRAP();
327 break; 327 break;
328 /* 0x25 - Unrecoverable Event, handled here */ 328 /* 0x25 - Unrecoverable Event, handled here */
329 case VEC_UNCOV: 329 case VEC_UNCOV:
330 info.si_code = ILL_ILLEXCPT; 330 info.si_code = ILL_ILLEXCPT;
331 sig = SIGILL; 331 sig = SIGILL;
332 printk(KERN_NOTICE EXC_0x25); 332 printk(KERN_NOTICE EXC_0x25(KERN_NOTICE));
333 CHK_DEBUGGER_TRAP(); 333 CHK_DEBUGGER_TRAP();
334 break; 334 break;
335 /* 0x26 - Data CPLB Miss, normal case is handled in _cplb_hdr, 335 /* 0x26 - Data CPLB Miss, normal case is handled in _cplb_hdr,
@@ -337,7 +337,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
337 case VEC_CPLB_M: 337 case VEC_CPLB_M:
338 info.si_code = BUS_ADRALN; 338 info.si_code = BUS_ADRALN;
339 sig = SIGBUS; 339 sig = SIGBUS;
340 printk(KERN_NOTICE EXC_0x26); 340 printk(KERN_NOTICE EXC_0x26(KERN_NOTICE));
341 CHK_DEBUGGER_TRAP(); 341 CHK_DEBUGGER_TRAP();
342 break; 342 break;
343 /* 0x27 - Data CPLB Multiple Hits - Linux Trap Zero, handled here */ 343 /* 0x27 - Data CPLB Multiple Hits - Linux Trap Zero, handled here */
@@ -348,7 +348,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
348 printk(KERN_NOTICE "NULL pointer access (probably)\n"); 348 printk(KERN_NOTICE "NULL pointer access (probably)\n");
349#else 349#else
350 sig = SIGILL; 350 sig = SIGILL;
351 printk(KERN_NOTICE EXC_0x27); 351 printk(KERN_NOTICE EXC_0x27(KERN_NOTICE));
352#endif 352#endif
353 CHK_DEBUGGER_TRAP(); 353 CHK_DEBUGGER_TRAP();
354 break; 354 break;
@@ -356,7 +356,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
356 case VEC_WATCH: 356 case VEC_WATCH:
357 info.si_code = TRAP_WATCHPT; 357 info.si_code = TRAP_WATCHPT;
358 sig = SIGTRAP; 358 sig = SIGTRAP;
359 pr_debug(EXC_0x28); 359 pr_debug(EXC_0x28(KERN_DEBUG));
360 CHK_DEBUGGER_TRAP_MAYBE(); 360 CHK_DEBUGGER_TRAP_MAYBE();
361 /* Check if this is a watchpoint in kernel space */ 361 /* Check if this is a watchpoint in kernel space */
362 if (fp->ipend & 0xffc0) 362 if (fp->ipend & 0xffc0)
@@ -378,21 +378,21 @@ asmlinkage void trap_c(struct pt_regs *fp)
378 case VEC_MISALI_I: 378 case VEC_MISALI_I:
379 info.si_code = BUS_ADRALN; 379 info.si_code = BUS_ADRALN;
380 sig = SIGBUS; 380 sig = SIGBUS;
381 printk(KERN_NOTICE EXC_0x2A); 381 printk(KERN_NOTICE EXC_0x2A(KERN_NOTICE));
382 CHK_DEBUGGER_TRAP(); 382 CHK_DEBUGGER_TRAP();
383 break; 383 break;
384 /* 0x2B - Instruction CPLB protection violation, handled here */ 384 /* 0x2B - Instruction CPLB protection violation, handled here */
385 case VEC_CPLB_I_VL: 385 case VEC_CPLB_I_VL:
386 info.si_code = ILL_CPLB_VI; 386 info.si_code = ILL_CPLB_VI;
387 sig = SIGBUS; 387 sig = SIGBUS;
388 printk(KERN_NOTICE EXC_0x2B); 388 printk(KERN_NOTICE EXC_0x2B(KERN_NOTICE));
389 CHK_DEBUGGER_TRAP(); 389 CHK_DEBUGGER_TRAP();
390 break; 390 break;
391 /* 0x2C - Instruction CPLB miss, handled in _cplb_hdr */ 391 /* 0x2C - Instruction CPLB miss, handled in _cplb_hdr */
392 case VEC_CPLB_I_M: 392 case VEC_CPLB_I_M:
393 info.si_code = ILL_CPLB_MISS; 393 info.si_code = ILL_CPLB_MISS;
394 sig = SIGBUS; 394 sig = SIGBUS;
395 printk(KERN_NOTICE EXC_0x2C); 395 printk(KERN_NOTICE EXC_0x2C(KERN_NOTICE));
396 CHK_DEBUGGER_TRAP(); 396 CHK_DEBUGGER_TRAP();
397 break; 397 break;
398 /* 0x2D - Instruction CPLB Multiple Hits, handled here */ 398 /* 0x2D - Instruction CPLB Multiple Hits, handled here */
@@ -403,7 +403,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
403 printk(KERN_NOTICE "Jump to address 0 - 0x0fff\n"); 403 printk(KERN_NOTICE "Jump to address 0 - 0x0fff\n");
404#else 404#else
405 sig = SIGILL; 405 sig = SIGILL;
406 printk(KERN_NOTICE EXC_0x2D); 406 printk(KERN_NOTICE EXC_0x2D(KERN_NOTICE));
407#endif 407#endif
408 CHK_DEBUGGER_TRAP(); 408 CHK_DEBUGGER_TRAP();
409 break; 409 break;
@@ -411,7 +411,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
411 case VEC_ILL_RES: 411 case VEC_ILL_RES:
412 info.si_code = ILL_PRVOPC; 412 info.si_code = ILL_PRVOPC;
413 sig = SIGILL; 413 sig = SIGILL;
414 printk(KERN_NOTICE EXC_0x2E); 414 printk(KERN_NOTICE EXC_0x2E(KERN_NOTICE));
415 CHK_DEBUGGER_TRAP(); 415 CHK_DEBUGGER_TRAP();
416 break; 416 break;
417 /* 0x2F - Reserved, Caught by default */ 417 /* 0x2F - Reserved, Caught by default */
diff --git a/arch/blackfin/mach-common/irqpanic.c b/arch/blackfin/mach-common/irqpanic.c
index f05e3dadaf33..d62c2e277d7b 100644
--- a/arch/blackfin/mach-common/irqpanic.c
+++ b/arch/blackfin/mach-common/irqpanic.c
@@ -153,21 +153,21 @@ asmlinkage void irq_panic(int reason, struct pt_regs *regs)
153 case (SEQSTAT_HWERRCAUSE_SYSTEM_MMR): /* System MMR Error */ 153 case (SEQSTAT_HWERRCAUSE_SYSTEM_MMR): /* System MMR Error */
154 info.si_code = BUS_ADRALN; 154 info.si_code = BUS_ADRALN;
155 sig = SIGBUS; 155 sig = SIGBUS;
156 printk(KERN_EMERG HWC_x2); 156 printk(KERN_EMERG HWC_x2(KERN_EMERG));
157 break; 157 break;
158 case (SEQSTAT_HWERRCAUSE_EXTERN_ADDR): /* External Memory Addressing Error */ 158 case (SEQSTAT_HWERRCAUSE_EXTERN_ADDR): /* External Memory Addressing Error */
159 info.si_code = BUS_ADRERR; 159 info.si_code = BUS_ADRERR;
160 sig = SIGBUS; 160 sig = SIGBUS;
161 printk(KERN_EMERG HWC_x3); 161 printk(KERN_EMERG HWC_x3(KERN_EMERG));
162 break; 162 break;
163 case (SEQSTAT_HWERRCAUSE_PERF_FLOW): /* Performance Monitor Overflow */ 163 case (SEQSTAT_HWERRCAUSE_PERF_FLOW): /* Performance Monitor Overflow */
164 printk(KERN_EMERG HWC_x12); 164 printk(KERN_EMERG HWC_x12(KERN_EMERG));
165 break; 165 break;
166 case (SEQSTAT_HWERRCAUSE_RAISE_5): /* RAISE 5 instruction */ 166 case (SEQSTAT_HWERRCAUSE_RAISE_5): /* RAISE 5 instruction */
167 printk(KERN_EMERG HWC_x18); 167 printk(KERN_EMERG HWC_x18(KERN_EMERG));
168 break; 168 break;
169 default: /* Reserved */ 169 default: /* Reserved */
170 printk(KERN_EMERG HWC_default); 170 printk(KERN_EMERG HWC_default(KERN_EMERG));
171 break; 171 break;
172 } 172 }
173 } 173 }
diff --git a/include/asm-blackfin/traps.h b/include/asm-blackfin/traps.h
index fe365b1b7ca8..ee1cbf73a9ab 100644
--- a/include/asm-blackfin/traps.h
+++ b/include/asm-blackfin/traps.h
@@ -48,28 +48,80 @@
48 48
49#ifndef __ASSEMBLY__ 49#ifndef __ASSEMBLY__
50 50
51#define HWC_x2 "System MMR Error\nAn error occurred due to an invalid access to an System MMR location\nPossible reason: a 32-bit register is accessed with a 16-bit instruction,\nor a 16-bit register is accessed with a 32-bit instruction.\n" 51#define HWC_x2(level) \
52#define HWC_x3 "External Memory Addressing Error\n" 52 "System MMR Error\n" \
53#define HWC_x12 "Performance Monitor Overflow\n" 53 level " - An error occurred due to an invalid access to an System MMR location\n" \
54#define HWC_x18 "RAISE 5 instruction\n Software issued a RAISE 5 instruction to invoke the Hardware\n" 54 level " Possible reason: a 32-bit register is accessed with a 16-bit instruction\n" \
55#define HWC_default "Reserved\n" 55 level " or a 16-bit register is accessed with a 32-bit instruction.\n"
56 56#define HWC_x3(level) \
57#define EXC_0x03 "Application stack overflow\n - Please increase the stack size of the application using elf2flt -s option,\n and/or reduce the stack use of the application.\n" 57 "External Memory Addressing Error\n"
58#define EXC_0x10 "Single step\n - When the processor is in single step mode, every instruction\n generates an exception. Primarily used for debugging.\n" 58#define HWC_x12(level) \
59#define EXC_0x11 "Exception caused by a trace buffer full condition\n - The processor takes this exception when the trace\n buffer overflows (only when enabled by the Trace Unit Control register).\n" 59 "Performance Monitor Overflow\n"
60#define EXC_0x21 "Undefined instruction\n - May be used to emulate instructions that are not defined for\n a particular processor implementation.\n" 60#define HWC_x18(level) \
61#define EXC_0x22 "Illegal instruction combination\n - See section for multi-issue rules in the ADSP-BF53x Blackfin\n Processor Instruction Set Reference.\n" 61 "RAISE 5 instruction\n" \
62#define EXC_0x23 "Data access CPLB protection violation\n - Attempted read or write to Supervisor resource,\n or illegal data memory access. \n" 62 level " Software issued a RAISE 5 instruction to invoke the Hardware\n"
63#define EXC_0x24 "Data access misaligned address violation\n - Attempted misaligned data memory or data cache access.\n" 63#define HWC_default(level) \
64#define EXC_0x25 "Unrecoverable event\n - For example, an exception generated while processing a previous exception.\n" 64 "Reserved\n"
65#define EXC_0x26 "Data access CPLB miss\n - Used by the MMU to signal a CPLB miss on a data access.\n" 65#define EXC_0x03(level) \
66#define EXC_0x27 "Data access multiple CPLB hits\n - More than one CPLB entry matches data fetch address.\n" 66 "Application stack overflow\n" \
67#define EXC_0x28 "Program Sequencer Exception caused by an emulation watchpoint match\n - There is a watchpoint match, and one of the EMUSW\n bits in the Watchpoint Instruction Address Control register (WPIACTL) is set.\n" 67 level " - Please increase the stack size of the application using elf2flt -s option,\n" \
68#define EXC_0x2A "Instruction fetch misaligned address violation\n - Attempted misaligned instruction cache fetch. On a misaligned instruction fetch exception,\n the return address provided in RETX is the destination address which is misaligned, rather than the address of the offending instruction.\n" 68 level " and/or reduce the stack use of the application.\n"
69#define EXC_0x2B "CPLB protection violation\n - Illegal instruction fetch access (memory protection violation).\n" 69#define EXC_0x10(level) \
70#define EXC_0x2C "Instruction fetch CPLB miss\n - CPLB miss on an instruction fetch.\n" 70 "Single step\n" \
71#define EXC_0x2D "Instruction fetch multiple CPLB hits\n - More than one CPLB entry matches instruction fetch address.\n" 71 level " - When the processor is in single step mode, every instruction\n" \
72#define EXC_0x2E "Illegal use of supervisor resource\n - Attempted to use a Supervisor register or instruction from User mode.\n Supervisor resources are registers and instructions that are reserved\n for Supervisor use: Supervisor only registers, all MMRs, and Supervisor\n only instructions.\n" 72 level " generates an exception. Primarily used for debugging.\n"
73#define EXC_0x11(level) \
74 "Exception caused by a trace buffer full condition\n" \
75 level " - The processor takes this exception when the trace\n" \
76 level " buffer overflows (only when enabled by the Trace Unit Control register).\n"
77#define EXC_0x21(level) \
78 "Undefined instruction\n" \
79 level " - May be used to emulate instructions that are not defined for\n" \
80 level " a particular processor implementation.\n"
81#define EXC_0x22(level) \
82 "Illegal instruction combination\n" \
83 level " - See section for multi-issue rules in the ADSP-BF53x Blackfin\n" \
84 level " Processor Instruction Set Reference.\n"
85#define EXC_0x23(level) \
86 "Data access CPLB protection violation\n" \
87 level " - Attempted read or write to Supervisor resource,\n" \
88 level " or illegal data memory access. \n"
89#define EXC_0x24(level) \
90 "Data access misaligned address violation\n" \
91 level " - Attempted misaligned data memory or data cache access.\n"
92#define EXC_0x25(level) \
93 "Unrecoverable event\n" \
94 level " - For example, an exception generated while processing a previous exception.\n"
95#define EXC_0x26(level) \
96 "Data access CPLB miss\n" \
97 level " - Used by the MMU to signal a CPLB miss on a data access.\n"
98#define EXC_0x27(level) \
99 "Data access multiple CPLB hits\n" \
100 level " - More than one CPLB entry matches data fetch address.\n"
101#define EXC_0x28(level) \
102 "Program Sequencer Exception caused by an emulation watchpoint match\n" \
103 level " - There is a watchpoint match, and one of the EMUSW\n" \
104 level " bits in the Watchpoint Instruction Address Control register (WPIACTL) is set.\n"
105#define EXC_0x2A(level) \
106 "Instruction fetch misaligned address violation\n" \
107 level " - Attempted misaligned instruction cache fetch. On a misaligned instruction fetch\n" \
108 level " exception, the return address provided in RETX is the destination address which is\n" \
109 level " misaligned, rather than the address of the offending instruction.\n"
110#define EXC_0x2B(level) \
111 "CPLB protection violation\n" \
112 level " - Illegal instruction fetch access (memory protection violation).\n"
113#define EXC_0x2C(level) \
114 "Instruction fetch CPLB miss\n" \
115 level " - CPLB miss on an instruction fetch.\n"
116#define EXC_0x2D(level) \
117 "Instruction fetch multiple CPLB hits\n" \
118 level " - More than one CPLB entry matches instruction fetch address.\n"
119#define EXC_0x2E(level) \
120 "Illegal use of supervisor resource\n" \
121 level " - Attempted to use a Supervisor register or instruction from User mode.\n" \
122 level " Supervisor resources are registers and instructions that are reserved\n" \
123 level " for Supervisor use: Supervisor only registers, all MMRs, and Supervisor\n" \
124 level " only instructions.\n"
73 125
74#endif /* __ASSEMBLY__ */ 126#endif /* __ASSEMBLY__ */
75#endif /* _BFIN_TRAPS_H */ 127#endif /* _BFIN_TRAPS_H */