diff options
author | Robin Getz <rgetz@blackfin.uclinux.org> | 2008-10-09 05:06:32 -0400 |
---|---|---|
committer | Bryan Wu <cooloney@kernel.org> | 2008-10-09 05:06:32 -0400 |
commit | 1d5ff7e27d2ca30cd3f61afd353b03dd67330818 (patch) | |
tree | ceadc8dd11d69c438eca73285c1d8faab7b58977 /arch/blackfin/kernel/traps.c | |
parent | 55f2feae3a1e075d9b4b0e73a6024f3e25717878 (diff) |
Blackfin arch: Fix bug - HW Errors never recover on BF548
The kernel does not properly clear the EBIU Error Master (EBIU_ERRMST) Register
on BF548, which causes the kernel to panic.
We need to make sure that we clear the EBIU_ERRMST (necessary on BF54x)
Signed-off-by: Robin Getz <rgetz@blackfin.uclinux.org>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
Diffstat (limited to 'arch/blackfin/kernel/traps.c')
-rw-r--r-- | arch/blackfin/kernel/traps.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c index 1a3c4daf557a..709c247b7016 100644 --- a/arch/blackfin/kernel/traps.c +++ b/arch/blackfin/kernel/traps.c | |||
@@ -1025,8 +1025,19 @@ void show_regs(struct pt_regs *fp) | |||
1025 | printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\t\t%s\n", print_tainted()); | 1025 | printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\t\t%s\n", print_tainted()); |
1026 | printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n", | 1026 | printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n", |
1027 | (long)fp->seqstat, fp->ipend, fp->syscfg); | 1027 | (long)fp->seqstat, fp->ipend, fp->syscfg); |
1028 | printk(KERN_NOTICE " HWERRCAUSE: 0x%lx\n", | 1028 | if ((fp->seqstat & SEQSTAT_EXCAUSE) == VEC_HWERR) { |
1029 | (fp->seqstat & SEQSTAT_HWERRCAUSE) >> 14); | 1029 | printk(KERN_NOTICE " HWERRCAUSE: 0x%lx\n", |
1030 | (fp->seqstat & SEQSTAT_HWERRCAUSE) >> 14); | ||
1031 | #ifdef EBIU_ERRMST | ||
1032 | /* If the error was from the EBIU, print it out */ | ||
1033 | if (bfin_read_EBIU_ERRMST() & CORE_ERROR) { | ||
1034 | printk(KERN_NOTICE " EBIU Error Reason : 0x%04x\n", | ||
1035 | bfin_read_EBIU_ERRMST()); | ||
1036 | printk(KERN_NOTICE " EBIU Error Address : 0x%08x\n", | ||
1037 | bfin_read_EBIU_ERRADD()); | ||
1038 | } | ||
1039 | #endif | ||
1040 | } | ||
1030 | printk(KERN_NOTICE " EXCAUSE : 0x%lx\n", | 1041 | printk(KERN_NOTICE " EXCAUSE : 0x%lx\n", |
1031 | fp->seqstat & SEQSTAT_EXCAUSE); | 1042 | fp->seqstat & SEQSTAT_EXCAUSE); |
1032 | for (i = 6; i <= 15 ; i++) { | 1043 | for (i = 6; i <= 15 ; i++) { |