diff options
-rw-r--r-- | arch/blackfin/kernel/traps.c | 30 | ||||
-rw-r--r-- | arch/blackfin/mach-common/irqpanic.c | 10 | ||||
-rw-r--r-- | include/asm-blackfin/traps.h | 96 |
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 */ |