| /* |
| * Copyright (C) 2003 Richard Curnow, SuperH UK Limited |
| * |
| * This file is subject to the terms and conditions of the GNU General Public |
| * License. See the file "COPYING" in the main directory of this archive |
| * for more details. |
| */ |
| |
| #include <linux/kernel.h> |
| #include <asm/io.h> |
| #include <asm/cpu/registers.h> |
| |
| /* THIS IS A PHYSICAL ADDRESS */ |
| #define HDSP2534_ADDR (0x04002100) |
| |
| #ifdef CONFIG_SH_CAYMAN |
| |
| static void poor_mans_delay(void) |
| { |
| int i; |
| for (i = 0; i < 2500000; i++) { |
| } /* poor man's delay */ |
| } |
| |
| static void show_value(unsigned long x) |
| { |
| int i; |
| unsigned nibble; |
| for (i = 0; i < 8; i++) { |
| nibble = ((x >> (i * 4)) & 0xf); |
| |
| ctrl_outb(nibble + ((nibble > 9) ? 55 : 48), |
| HDSP2534_ADDR + 0xe0 + ((7 - i) << 2)); |
| } |
| } |
| |
| #endif |
| |
| void |
| panic_handler(unsigned long panicPC, unsigned long panicSSR, |
| unsigned long panicEXPEVT) |
| { |
| #ifdef CONFIG_SH_CAYMAN |
| while (1) { |
| /* This piece of code displays the PC on the LED display */ |
| show_value(panicPC); |
| poor_mans_delay(); |
| show_value(panicSSR); |
| poor_mans_delay(); |
| show_value(panicEXPEVT); |
| poor_mans_delay(); |
| } |
| #endif |
| |
| /* Never return from the panic handler */ |
| for (;;) ; |
| |
| } |