diff options
author | Robin Getz <rgetz@blackfin.uclinux.org> | 2008-08-14 02:44:33 -0400 |
---|---|---|
committer | Bryan Wu <cooloney@kernel.org> | 2008-08-14 02:44:33 -0400 |
commit | cd8fb8df1458df7f3b99fd112e722b05f42c64d9 (patch) | |
tree | 9cb389a1b61500b6b38752d96b72db23c0590c28 | |
parent | ee32664da9531329b87aa5109e41e7cc73a04121 (diff) |
Blackfin arch: Print out doublefault addresses, so debug can occur
Signed-off-by: Robin Getz <rgetz@blackfin.uclinux.org>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
-rw-r--r-- | arch/blackfin/kernel/setup.c | 7 | ||||
-rw-r--r-- | arch/blackfin/mach-common/head.S | 6 |
2 files changed, 12 insertions, 1 deletions
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c index 2ae84fea89eb..eb300550e093 100644 --- a/arch/blackfin/kernel/setup.c +++ b/arch/blackfin/kernel/setup.c | |||
@@ -52,6 +52,7 @@ EXPORT_SYMBOL(mtd_size); | |||
52 | #endif | 52 | #endif |
53 | 53 | ||
54 | char __initdata command_line[COMMAND_LINE_SIZE]; | 54 | char __initdata command_line[COMMAND_LINE_SIZE]; |
55 | unsigned int __initdata *__retx; | ||
55 | 56 | ||
56 | /* boot memmap, for parsing "memmap=" */ | 57 | /* boot memmap, for parsing "memmap=" */ |
57 | #define BFIN_MEMMAP_MAX 128 /* number of entries in bfin_memmap */ | 58 | #define BFIN_MEMMAP_MAX 128 /* number of entries in bfin_memmap */ |
@@ -785,7 +786,11 @@ void __init setup_arch(char **cmdline_p) | |||
785 | bfin_write_SWRST(DOUBLE_FAULT); | 786 | bfin_write_SWRST(DOUBLE_FAULT); |
786 | 787 | ||
787 | if (_bfin_swrst & RESET_DOUBLE) | 788 | if (_bfin_swrst & RESET_DOUBLE) |
788 | printk(KERN_INFO "Recovering from Double Fault event\n"); | 789 | /* |
790 | * don't decode the address, since you don't know if this | ||
791 | * kernel's symbol map is the same as the crashing kernel | ||
792 | */ | ||
793 | printk(KERN_INFO "Recovering from Double Fault event at %p\n", __retx); | ||
789 | else if (_bfin_swrst & RESET_WDOG) | 794 | else if (_bfin_swrst & RESET_WDOG) |
790 | printk(KERN_INFO "Recovering from Watchdog event\n"); | 795 | printk(KERN_INFO "Recovering from Watchdog event\n"); |
791 | else if (_bfin_swrst & RESET_SOFTWARE) | 796 | else if (_bfin_swrst & RESET_SOFTWARE) |
diff --git a/arch/blackfin/mach-common/head.S b/arch/blackfin/mach-common/head.S index 2c69ad49894e..fb7e2d426999 100644 --- a/arch/blackfin/mach-common/head.S +++ b/arch/blackfin/mach-common/head.S | |||
@@ -90,6 +90,12 @@ ENTRY(__start) | |||
90 | [p0] = R0; | 90 | [p0] = R0; |
91 | SSYNC; | 91 | SSYNC; |
92 | 92 | ||
93 | /* Save RETX, in case of doublefault */ | ||
94 | p0.l = ___retx; | ||
95 | p0.h = ___retx; | ||
96 | R0 = RETX; | ||
97 | [P0] = R0; | ||
98 | |||
93 | /* Let each Blackfin family do its own thing */ | 99 | /* Let each Blackfin family do its own thing */ |
94 | call _mach_early_start; | 100 | call _mach_early_start; |
95 | 101 | ||