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 */ |
