18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * ip30-power.c: Software powerdown and reset handling for IP30 architecture. 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2004-2007 Stanislaw Skowronek <skylark@unaligned.org> 68c2ecf20Sopenharmony_ci * 2014 Joshua Kinard <kumba@gentoo.org> 78c2ecf20Sopenharmony_ci * 2009 Johannes Dickgreber <tanzy@gmx.de> 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <linux/init.h> 118c2ecf20Sopenharmony_ci#include <linux/kernel.h> 128c2ecf20Sopenharmony_ci#include <linux/module.h> 138c2ecf20Sopenharmony_ci#include <linux/sched.h> 148c2ecf20Sopenharmony_ci#include <linux/notifier.h> 158c2ecf20Sopenharmony_ci#include <linux/delay.h> 168c2ecf20Sopenharmony_ci#include <linux/rtc/ds1685.h> 178c2ecf20Sopenharmony_ci#include <linux/interrupt.h> 188c2ecf20Sopenharmony_ci#include <linux/pm.h> 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#include <asm/reboot.h> 218c2ecf20Sopenharmony_ci#include <asm/sgi/heart.h> 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_cistatic void __noreturn ip30_machine_restart(char *cmd) 248c2ecf20Sopenharmony_ci{ 258c2ecf20Sopenharmony_ci /* 268c2ecf20Sopenharmony_ci * Execute HEART cold reset 278c2ecf20Sopenharmony_ci * Yes, it's cold-HEARTed! 288c2ecf20Sopenharmony_ci */ 298c2ecf20Sopenharmony_ci heart_write((heart_read(&heart_regs->mode) | HM_COLD_RST), 308c2ecf20Sopenharmony_ci &heart_regs->mode); 318c2ecf20Sopenharmony_ci unreachable(); 328c2ecf20Sopenharmony_ci} 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistatic int __init ip30_reboot_setup(void) 358c2ecf20Sopenharmony_ci{ 368c2ecf20Sopenharmony_ci _machine_restart = ip30_machine_restart; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci return 0; 398c2ecf20Sopenharmony_ci} 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_cisubsys_initcall(ip30_reboot_setup); 42