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 /arch/sh/boards | |
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>
Diffstat (limited to 'arch/sh/boards')
-rw-r--r-- | arch/sh/boards/mach-cayman/Makefile | 2 | ||||
-rw-r--r-- | arch/sh/boards/mach-cayman/panic.c | 49 |
2 files changed, 50 insertions, 1 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 | } | ||