Commit | Line | Data |
---|---|---|
a240a469 MZ |
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 | */ | |
9ecb1ff1 | 8 | #include <linux/irqflags.h> |
4b92fe23 YY |
9 | #include <linux/kernel.h> |
10 | ||
a240a469 | 11 | #include <asm/cacheflush.h> |
4b92fe23 | 12 | #include <asm/mipsregs.h> |
9ecb1ff1 | 13 | #include <asm/processor.h> |
a240a469 MZ |
14 | |
15 | void 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 | ||
31 | void 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) { | |
9ecb1ff1 YY |
37 | if (cpu_wait) |
38 | cpu_wait(); | |
a240a469 MZ |
39 | } |
40 | } | |
41 | ||
42 | void wrppmc_machine_power_off(void) | |
43 | { | |
44 | wrppmc_machine_halt(); | |
45 | } |