• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <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 
poor_mans_delay(void)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 
show_value(unsigned long x)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
panic_handler(unsigned long panicPC,unsigned long panicSSR,unsigned long panicEXPEVT)40 panic_handler(unsigned long panicPC, unsigned long panicSSR,
41 	      unsigned long panicEXPEVT)
42 {
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 */
56 	for (;;) ;
57 
58 }
59