include upstream ip1000a driver version 2.09f
[linux-2.4.git] / arch / sh64 / lib / panic.c
1 /* Panic handler. MUST BE PIC. BE CAREFUL WHAT YOU DO,
2  * AS THERE ARE NO STATICS AVAILABLE, AND NOWHERE TO GO 
3  * MMU IS OFF!!!!!!!!
4  */
5
6 #include <linux/kernel.h>
7 #include <asm/io.h>
8 #include <asm/registers.h>
9
10 /* THIS IS A PHYSICAL ADDRESS */
11 #define HDSP2534_ADDR (0x04002100)
12
13 void
14 panic_handler(unsigned long panicPC, unsigned long panicSSR,
15               unsigned long panicEXPEVT)
16 {
17         int i;
18         unsigned nibble;
19
20 #ifdef CONFIG_SH_CAYMAN
21
22         while (1) {
23
24                 /* This piece of code displays the PC on the LED display */
25                 for (i = 0; i < 8; i++) {
26                         nibble = ((panicPC >> (i * 4)) & 0xf);
27
28                         ctrl_outb(nibble + ((nibble > 9) ? 55 : 48),
29                                   HDSP2534_ADDR + 0xe0 + ((7 - i) << 2));
30                 }
31
32                 for (i = 0; i < 2500000; i++) {
33                 }               /* poor man's delay */
34
35                 for (i = 0; i < 8; i++) {
36                         nibble = ((panicSSR >> (i * 4)) & 0xf);
37
38                         ctrl_outb(nibble + ((nibble > 9) ? 55 : 48),
39                                   HDSP2534_ADDR + 0xe0 + ((7 - i) << 2));
40                 }
41
42                 for (i = 0; i < 2500000; i++) {
43                 }               /* poor man's delay */
44
45                 for (i = 0; i < 8; i++) {
46                         nibble = ((panicEXPEVT >> (i * 4)) & 0xf);
47
48                         ctrl_outb(nibble + ((nibble > 9) ? 55 : 48),
49                                   HDSP2534_ADDR + 0xe0 + ((7 - i) << 2));
50                 }
51
52                 for (i = 0; i < 2500000; i++) {
53                 }               /* poor man's delay */
54         }
55 #endif
56
57         /* Never return from the panic handler */
58         for (;;) ;
59
60 }