Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+50 -44
+1 -1
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
+49
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 + }
-43
arch/sh/lib64/panic.c
··· 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 }