1 /* Panic handler. MUST BE PIC. BE CAREFUL WHAT YOU DO,
2 * AS THERE ARE NO STATICS AVAILABLE, AND NOWHERE TO GO
6 #include <linux/kernel.h>
8 #include <asm/registers.h>
10 /* THIS IS A PHYSICAL ADDRESS */
11 #define HDSP2534_ADDR (0x04002100)
14 panic_handler(unsigned long panicPC, unsigned long panicSSR,
15 unsigned long panicEXPEVT)
20 #ifdef CONFIG_SH_CAYMAN
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);
28 ctrl_outb(nibble + ((nibble > 9) ? 55 : 48),
29 HDSP2534_ADDR + 0xe0 + ((7 - i) << 2));
32 for (i = 0; i < 2500000; i++) {
33 } /* poor man's delay */
35 for (i = 0; i < 8; i++) {
36 nibble = ((panicSSR >> (i * 4)) & 0xf);
38 ctrl_outb(nibble + ((nibble > 9) ? 55 : 48),
39 HDSP2534_ADDR + 0xe0 + ((7 - i) << 2));
42 for (i = 0; i < 2500000; i++) {
43 } /* poor man's delay */
45 for (i = 0; i < 8; i++) {
46 nibble = ((panicEXPEVT >> (i * 4)) & 0xf);
48 ctrl_outb(nibble + ((nibble > 9) ? 55 : 48),
49 HDSP2534_ADDR + 0xe0 + ((7 - i) << 2));
52 for (i = 0; i < 2500000; i++) {
53 } /* poor man's delay */
57 /* Never return from the panic handler */