2005-04-16 15:20:36 -07:00
/*
2013-06-13 19:55:06 +00:00
* 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 .
*
2005-04-16 15:20:36 -07:00
* Carsten Langgaard , carstenl @ mips . com
* Copyright ( C ) 1999 , 2000 MIPS Technologies , Inc . All rights reserved .
*/
2013-06-13 19:55:06 +00:00
# include <linux/io.h>
2006-01-18 17:37:07 +00:00
# include <linux/pm.h>
2005-04-16 15:20:36 -07:00
# include <asm/reboot.h>
2014-05-07 12:22:12 +01:00
# include <asm/mach-malta/malta-pm.h>
2013-06-13 19:55:05 +00:00
# define SOFTRES_REG 0x1f000500
# define GORESET 0x42
2005-04-16 15:20:36 -07:00
static void mips_machine_restart ( char * command )
{
2008-01-08 06:44:00 +03:00
unsigned int __iomem * softres_reg =
ioremap ( SOFTRES_REG , sizeof ( unsigned int ) ) ;
2005-04-16 15:20:36 -07:00
2008-01-08 06:44:00 +03:00
__raw_writel ( GORESET , softres_reg ) ;
2005-04-16 15:20:36 -07:00
}
static void mips_machine_halt ( void )
{
2014-05-07 12:20:59 +01:00
while ( true ) ;
}
2005-04-16 15:20:36 -07:00
2014-05-07 12:20:59 +01:00
static void mips_machine_power_off ( void )
{
2014-05-07 12:22:12 +01:00
mips_pm_suspend ( PIIX4_FUNC3IO_PMCNTRL_SUS_TYP_SOFF ) ;
pr_info ( " Failed to power down, resetting \n " ) ;
2014-05-07 12:20:59 +01:00
mips_machine_restart ( NULL ) ;
2005-04-16 15:20:36 -07:00
}
2009-09-15 14:50:39 +02:00
static int __init mips_reboot_setup ( void )
2005-04-16 15:20:36 -07:00
{
_machine_restart = mips_machine_restart ;
_machine_halt = mips_machine_halt ;
2014-05-07 12:20:59 +01:00
pm_power_off = mips_machine_power_off ;
2009-09-15 14:50:39 +02:00
return 0 ;
2005-04-16 15:20:36 -07:00
}
2009-09-15 14:50:39 +02:00
arch_initcall ( mips_reboot_setup ) ;