2005-04-16 15:20:36 -07:00
/*
* Cobalt Reset operations
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 1995 , 1996 , 1997 by Ralf Baechle
* Copyright ( C ) 2001 by Liam Davies ( ldavies @ agile . tv )
*/
2007-10-01 19:45:05 +09:00
# include <linux/init.h>
2007-10-02 23:17:38 +09:00
# include <linux/io.h>
2007-10-01 19:45:05 +09:00
# include <linux/leds.h>
2007-03-06 21:34:44 +09:00
2007-12-12 22:23:13 +09:00
# include <asm/processor.h>
2007-03-06 21:34:44 +09:00
# include <cobalt.h>
2005-04-16 15:20:36 -07:00
2007-10-02 23:17:38 +09:00
# define RESET_PORT ((void __iomem *)CKSEG1ADDR(0x1c000000))
# define RESET 0x0f
2007-10-01 19:45:05 +09:00
DEFINE_LED_TRIGGER ( power_off_led_trigger ) ;
static int __init ledtrig_power_off_init ( void )
{
led_trigger_register_simple ( " power-off " , & power_off_led_trigger ) ;
return 0 ;
}
device_initcall ( ledtrig_power_off_init ) ;
2005-02-21 16:18:36 +00:00
void cobalt_machine_halt ( void )
2005-04-16 15:20:36 -07:00
{
/*
2007-10-01 19:45:05 +09:00
* turn on power off LED on RaQ
2005-04-16 15:20:36 -07:00
*/
2007-10-01 19:45:05 +09:00
led_trigger_event ( power_off_led_trigger , LED_FULL ) ;
2005-02-21 16:18:36 +00:00
2007-12-12 22:20:19 +09:00
local_irq_disable ( ) ;
2007-12-12 22:23:13 +09:00
while ( 1 ) {
if ( cpu_wait )
cpu_wait ( ) ;
}
2005-04-16 15:20:36 -07:00
}
2005-02-21 16:18:36 +00:00
void cobalt_machine_restart ( char * command )
{
2007-10-02 23:17:38 +09:00
writeb ( RESET , RESET_PORT ) ;
2005-02-21 16:18:36 +00:00
/* we should never get here */
cobalt_machine_halt ( ) ;
}