diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-05-08 04:41:59 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-05-08 04:41:59 -0400 |
commit | 7d170b1bc540a1d83098a9f27cf4939e026fda81 (patch) | |
tree | 482234e9271e09bcd630d3d0b8450ab914da2c88 | |
parent | ef9f89996e450e9686816b6fc1e34d7b9a65766c (diff) |
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>
-rw-r--r-- | arch/sh/boards/mach-cayman/Makefile | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-cayman/panic.c | 49 | ||||
-rw-r--r-- | arch/sh/lib64/panic.c | 43 |
3 files changed, 50 insertions, 44 deletions
diff --git a/arch/sh/boards/mach-cayman/Makefile b/arch/sh/boards/mach-cayman/Makefile index cafe1ac3b29c..00fa3eaecb1b 100644 --- a/arch/sh/boards/mach-cayman/Makefile +++ b/arch/sh/boards/mach-cayman/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | # | 1 | # |
2 | # Makefile for the Hitachi Cayman specific parts of the kernel | 2 | # Makefile for the Hitachi Cayman specific parts of the kernel |
3 | # | 3 | # |
4 | obj-y := setup.o irq.o | 4 | obj-y := setup.o irq.o panic.o |
diff --git a/arch/sh/boards/mach-cayman/panic.c b/arch/sh/boards/mach-cayman/panic.c new file mode 100644 index 000000000000..d1e67306d07c --- /dev/null +++ b/arch/sh/boards/mach-cayman/panic.c | |||
@@ -0,0 +1,49 @@ | |||
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 | } | ||
diff --git a/arch/sh/lib64/panic.c b/arch/sh/lib64/panic.c index da32ba7b5fcc..38c954e04f6a 100644 --- a/arch/sh/lib64/panic.c +++ b/arch/sh/lib64/panic.c | |||
@@ -6,53 +6,10 @@ | |||
6 | * for more details. | 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 | void | 9 | void |
40 | panic_handler(unsigned long panicPC, unsigned long panicSSR, | 10 | panic_handler(unsigned long panicPC, unsigned long panicSSR, |
41 | unsigned long panicEXPEVT) | 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 | /* Never return from the panic handler */ | 13 | /* Never return from the panic handler */ |
56 | for (;;) ; | 14 | for (;;) ; |
57 | |||
58 | } | 15 | } |