reset.c (927B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright (c) 2011 Zhang, Keguang <keguang.zhang@gmail.com> 4 */ 5 6#include <linux/io.h> 7#include <linux/pm.h> 8#include <linux/sizes.h> 9#include <asm/idle.h> 10#include <asm/reboot.h> 11 12#include <loongson1.h> 13 14static void __iomem *wdt_reg_base; 15 16static void ls1x_halt(void) 17{ 18 while (1) { 19 if (cpu_wait) 20 cpu_wait(); 21 } 22} 23 24static void ls1x_restart(char *command) 25{ 26 __raw_writel(0x1, wdt_reg_base + WDT_EN); 27 __raw_writel(0x1, wdt_reg_base + WDT_TIMER); 28 __raw_writel(0x1, wdt_reg_base + WDT_SET); 29 30 ls1x_halt(); 31} 32 33static void ls1x_power_off(void) 34{ 35 ls1x_halt(); 36} 37 38static int __init ls1x_reboot_setup(void) 39{ 40 wdt_reg_base = ioremap(LS1X_WDT_BASE, (SZ_4 + SZ_8)); 41 if (!wdt_reg_base) 42 panic("Failed to remap watchdog registers"); 43 44 _machine_restart = ls1x_restart; 45 _machine_halt = ls1x_halt; 46 pm_power_off = ls1x_power_off; 47 48 return 0; 49} 50 51arch_initcall(ls1x_reboot_setup);