162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * ip30-power.c: Software powerdown and reset handling for IP30 architecture. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2004-2007 Stanislaw Skowronek <skylark@unaligned.org> 662306a36Sopenharmony_ci * 2014 Joshua Kinard <kumba@gentoo.org> 762306a36Sopenharmony_ci * 2009 Johannes Dickgreber <tanzy@gmx.de> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/init.h> 1162306a36Sopenharmony_ci#include <linux/kernel.h> 1262306a36Sopenharmony_ci#include <linux/module.h> 1362306a36Sopenharmony_ci#include <linux/sched.h> 1462306a36Sopenharmony_ci#include <linux/notifier.h> 1562306a36Sopenharmony_ci#include <linux/delay.h> 1662306a36Sopenharmony_ci#include <linux/rtc/ds1685.h> 1762306a36Sopenharmony_ci#include <linux/interrupt.h> 1862306a36Sopenharmony_ci#include <linux/pm.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#include <asm/reboot.h> 2162306a36Sopenharmony_ci#include <asm/sgi/heart.h> 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistatic void __noreturn ip30_machine_restart(char *cmd) 2462306a36Sopenharmony_ci{ 2562306a36Sopenharmony_ci /* 2662306a36Sopenharmony_ci * Execute HEART cold reset 2762306a36Sopenharmony_ci * Yes, it's cold-HEARTed! 2862306a36Sopenharmony_ci */ 2962306a36Sopenharmony_ci heart_write((heart_read(&heart_regs->mode) | HM_COLD_RST), 3062306a36Sopenharmony_ci &heart_regs->mode); 3162306a36Sopenharmony_ci unreachable(); 3262306a36Sopenharmony_ci} 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic int __init ip30_reboot_setup(void) 3562306a36Sopenharmony_ci{ 3662306a36Sopenharmony_ci _machine_restart = ip30_machine_restart; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci return 0; 3962306a36Sopenharmony_ci} 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cisubsys_initcall(ip30_reboot_setup); 42