1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * ip30-power.c: Software powerdown and reset handling for IP30 architecture. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2004-2007 Stanislaw Skowronek <skylark@unaligned.org> 6*4882a593Smuzhiyun * 2014 Joshua Kinard <kumba@gentoo.org> 7*4882a593Smuzhiyun * 2009 Johannes Dickgreber <tanzy@gmx.de> 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <linux/init.h> 11*4882a593Smuzhiyun #include <linux/kernel.h> 12*4882a593Smuzhiyun #include <linux/module.h> 13*4882a593Smuzhiyun #include <linux/sched.h> 14*4882a593Smuzhiyun #include <linux/notifier.h> 15*4882a593Smuzhiyun #include <linux/delay.h> 16*4882a593Smuzhiyun #include <linux/rtc/ds1685.h> 17*4882a593Smuzhiyun #include <linux/interrupt.h> 18*4882a593Smuzhiyun #include <linux/pm.h> 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #include <asm/reboot.h> 21*4882a593Smuzhiyun #include <asm/sgi/heart.h> 22*4882a593Smuzhiyun ip30_machine_restart(char * cmd)23*4882a593Smuzhiyunstatic void __noreturn ip30_machine_restart(char *cmd) 24*4882a593Smuzhiyun { 25*4882a593Smuzhiyun /* 26*4882a593Smuzhiyun * Execute HEART cold reset 27*4882a593Smuzhiyun * Yes, it's cold-HEARTed! 28*4882a593Smuzhiyun */ 29*4882a593Smuzhiyun heart_write((heart_read(&heart_regs->mode) | HM_COLD_RST), 30*4882a593Smuzhiyun &heart_regs->mode); 31*4882a593Smuzhiyun unreachable(); 32*4882a593Smuzhiyun } 33*4882a593Smuzhiyun ip30_reboot_setup(void)34*4882a593Smuzhiyunstatic int __init ip30_reboot_setup(void) 35*4882a593Smuzhiyun { 36*4882a593Smuzhiyun _machine_restart = ip30_machine_restart; 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun return 0; 39*4882a593Smuzhiyun } 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun subsys_initcall(ip30_reboot_setup); 42