1 /* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * Copyright (C) 1997 Ralf Baechle 7 */ 8 #include <linux/irqflags.h> 9 #include <linux/kernel.h> 10 11 #include <asm/cacheflush.h> 12 #include <asm/mipsregs.h> 13 #include <asm/processor.h> 14 wrppmc_machine_restart(char * command)15void wrppmc_machine_restart(char *command) 16 { 17 /* 18 * Ouch, we're still alive ... This time we take the silver bullet ... 19 * ... and find that we leave the hardware in a state in which the 20 * kernel in the flush locks up somewhen during of after the PCI 21 * detection stuff. 22 */ 23 local_irq_disable(); 24 set_c0_status(ST0_BEV | ST0_ERL); 25 change_c0_config(CONF_CM_CMASK, CONF_CM_UNCACHED); 26 flush_cache_all(); 27 write_c0_wired(0); 28 __asm__ __volatile__("jr\t%0"::"r"(0xbfc00000)); 29 } 30 wrppmc_machine_halt(void)31void wrppmc_machine_halt(void) 32 { 33 local_irq_disable(); 34 35 printk(KERN_NOTICE "You can safely turn off the power\n"); 36 while (1) { 37 if (cpu_wait) 38 cpu_wait(); 39 } 40 } 41