xref: /openbmc/linux/arch/mips/cobalt/reset.c (revision e5451c8f8330e03ad3cfa16048b4daf961af434f)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * Cobalt Reset operations
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * This file is subject to the terms and conditions of the GNU General Public
51da177e4SLinus Torvalds  * License.  See the file "COPYING" in the main directory of this archive
61da177e4SLinus Torvalds  * for more details.
71da177e4SLinus Torvalds  *
81da177e4SLinus Torvalds  * Copyright (C) 1995, 1996, 1997 by Ralf Baechle
91da177e4SLinus Torvalds  * Copyright (C) 2001 by Liam Davies (ldavies@agile.tv)
101da177e4SLinus Torvalds  */
11e86169ffSYoichi Yuasa #include <linux/init.h>
123282bd3cSYoichi Yuasa #include <linux/io.h>
13e86169ffSYoichi Yuasa #include <linux/leds.h>
14cc50b67dSYoichi Yuasa 
15*bdc92d74SRalf Baechle #include <asm/idle.h>
16167da469SYoichi Yuasa #include <asm/processor.h>
17167da469SYoichi Yuasa 
18cc50b67dSYoichi Yuasa #include <cobalt.h>
191da177e4SLinus Torvalds 
203282bd3cSYoichi Yuasa #define RESET_PORT	((void __iomem *)CKSEG1ADDR(0x1c000000))
213282bd3cSYoichi Yuasa #define RESET		0x0f
223282bd3cSYoichi Yuasa 
23e86169ffSYoichi Yuasa DEFINE_LED_TRIGGER(power_off_led_trigger);
24e86169ffSYoichi Yuasa 
ledtrig_power_off_init(void)25e86169ffSYoichi Yuasa static int __init ledtrig_power_off_init(void)
26e86169ffSYoichi Yuasa {
27e86169ffSYoichi Yuasa 	led_trigger_register_simple("power-off", &power_off_led_trigger);
28e86169ffSYoichi Yuasa 	return 0;
29e86169ffSYoichi Yuasa }
30e86169ffSYoichi Yuasa device_initcall(ledtrig_power_off_init);
31e86169ffSYoichi Yuasa 
cobalt_machine_halt(void)321da177e4SLinus Torvalds void cobalt_machine_halt(void)
331da177e4SLinus Torvalds {
34c4ed38a0SRalf Baechle 	/*
35e86169ffSYoichi Yuasa 	 * turn on power off LED on RaQ
36c4ed38a0SRalf Baechle 	 */
37e86169ffSYoichi Yuasa 	led_trigger_event(power_off_led_trigger, LED_FULL);
38e86169ffSYoichi Yuasa 
3971466dd4SYoichi Yuasa 	local_irq_disable();
40167da469SYoichi Yuasa 	while (1) {
41167da469SYoichi Yuasa 		if (cpu_wait)
42167da469SYoichi Yuasa 			cpu_wait();
43167da469SYoichi Yuasa 	}
441da177e4SLinus Torvalds }
451da177e4SLinus Torvalds 
cobalt_machine_restart(char * command)46c4ed38a0SRalf Baechle void cobalt_machine_restart(char *command)
47c4ed38a0SRalf Baechle {
483282bd3cSYoichi Yuasa 	writeb(RESET, RESET_PORT);
49c4ed38a0SRalf Baechle 
50c4ed38a0SRalf Baechle 	/* we should never get here */
51c4ed38a0SRalf Baechle 	cobalt_machine_halt();
52c4ed38a0SRalf Baechle }
53