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 Yuasastatic 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 Torvaldsvoid 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 Baechlevoid 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