Commit 7d170b1bc540a1d83098a9f27cf4939e026fda81
1 parent
ef9f89996e
Exists in
master
and in
7 other branches
sh: Move out cayman-specific panic handler code to its own file.
This moves out the cayman-specific panic handler code to a better location, and leaves the generic implementation a simple stub that is still used under emulation. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Showing 3 changed files with 50 additions and 44 deletions Side-by-side Diff
arch/sh/boards/mach-cayman/Makefile
arch/sh/boards/mach-cayman/panic.c
1 | +/* | |
2 | + * Copyright (C) 2003 Richard Curnow, SuperH UK Limited | |
3 | + * | |
4 | + * This file is subject to the terms and conditions of the GNU General Public | |
5 | + * License. See the file "COPYING" in the main directory of this archive | |
6 | + * for more details. | |
7 | + */ | |
8 | + | |
9 | +#include <linux/kernel.h> | |
10 | +#include <linux/io.h> | |
11 | +#include <cpu/registers.h> | |
12 | + | |
13 | +/* THIS IS A PHYSICAL ADDRESS */ | |
14 | +#define HDSP2534_ADDR (0x04002100) | |
15 | + | |
16 | +static void poor_mans_delay(void) | |
17 | +{ | |
18 | + int i; | |
19 | + | |
20 | + for (i = 0; i < 2500000; i++) | |
21 | + cpu_relax(); | |
22 | +} | |
23 | + | |
24 | +static void show_value(unsigned long x) | |
25 | +{ | |
26 | + int i; | |
27 | + unsigned nibble; | |
28 | + for (i = 0; i < 8; i++) { | |
29 | + nibble = ((x >> (i * 4)) & 0xf); | |
30 | + | |
31 | + __raw_writeb(nibble + ((nibble > 9) ? 55 : 48), | |
32 | + HDSP2534_ADDR + 0xe0 + ((7 - i) << 2)); | |
33 | + } | |
34 | +} | |
35 | + | |
36 | +void | |
37 | +panic_handler(unsigned long panicPC, unsigned long panicSSR, | |
38 | + unsigned long panicEXPEVT) | |
39 | +{ | |
40 | + while (1) { | |
41 | + /* This piece of code displays the PC on the LED display */ | |
42 | + show_value(panicPC); | |
43 | + poor_mans_delay(); | |
44 | + show_value(panicSSR); | |
45 | + poor_mans_delay(); | |
46 | + show_value(panicEXPEVT); | |
47 | + poor_mans_delay(); | |
48 | + } | |
49 | +} |
arch/sh/lib64/panic.c
... | ... | @@ -6,54 +6,11 @@ |
6 | 6 | * for more details. |
7 | 7 | */ |
8 | 8 | |
9 | -#include <linux/kernel.h> | |
10 | -#include <asm/io.h> | |
11 | -#include <cpu/registers.h> | |
12 | - | |
13 | -/* THIS IS A PHYSICAL ADDRESS */ | |
14 | -#define HDSP2534_ADDR (0x04002100) | |
15 | - | |
16 | -#ifdef CONFIG_SH_CAYMAN | |
17 | - | |
18 | -static void poor_mans_delay(void) | |
19 | -{ | |
20 | - int i; | |
21 | - for (i = 0; i < 2500000; i++) { | |
22 | - } /* poor man's delay */ | |
23 | -} | |
24 | - | |
25 | -static void show_value(unsigned long x) | |
26 | -{ | |
27 | - int i; | |
28 | - unsigned nibble; | |
29 | - for (i = 0; i < 8; i++) { | |
30 | - nibble = ((x >> (i * 4)) & 0xf); | |
31 | - | |
32 | - ctrl_outb(nibble + ((nibble > 9) ? 55 : 48), | |
33 | - HDSP2534_ADDR + 0xe0 + ((7 - i) << 2)); | |
34 | - } | |
35 | -} | |
36 | - | |
37 | -#endif | |
38 | - | |
39 | 9 | void |
40 | 10 | panic_handler(unsigned long panicPC, unsigned long panicSSR, |
41 | 11 | unsigned long panicEXPEVT) |
42 | 12 | { |
43 | -#ifdef CONFIG_SH_CAYMAN | |
44 | - while (1) { | |
45 | - /* This piece of code displays the PC on the LED display */ | |
46 | - show_value(panicPC); | |
47 | - poor_mans_delay(); | |
48 | - show_value(panicSSR); | |
49 | - poor_mans_delay(); | |
50 | - show_value(panicEXPEVT); | |
51 | - poor_mans_delay(); | |
52 | - } | |
53 | -#endif | |
54 | - | |
55 | 13 | /* Never return from the panic handler */ |
56 | 14 | for (;;) ; |
57 | - | |
58 | 15 | } |