Commit 7d170b1bc540a1d83098a9f27cf4939e026fda81

Authored by Paul Mundt
1 parent ef9f89996e

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
1 1 #
2 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
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 }