reset.c (973B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Joshua Henderson <joshua.henderson@microchip.com> 4 * Copyright (C) 2015 Microchip Technology Inc. All rights reserved. 5 */ 6#include <linux/init.h> 7#include <linux/pm.h> 8#include <asm/reboot.h> 9#include <asm/mach-pic32/pic32.h> 10 11#define PIC32_RSWRST 0x10 12 13static void pic32_halt(void) 14{ 15 while (1) { 16 __asm__(".set push;\n" 17 ".set arch=r4000;\n" 18 "wait;\n" 19 ".set pop;\n" 20 ); 21 } 22} 23 24static void pic32_machine_restart(char *command) 25{ 26 void __iomem *reg = 27 ioremap(PIC32_BASE_RESET + PIC32_RSWRST, sizeof(u32)); 28 29 pic32_syskey_unlock(); 30 31 /* magic write/read */ 32 __raw_writel(1, reg); 33 (void)__raw_readl(reg); 34 35 pic32_halt(); 36} 37 38static void pic32_machine_halt(void) 39{ 40 local_irq_disable(); 41 42 pic32_halt(); 43} 44 45static int __init mips_reboot_setup(void) 46{ 47 _machine_restart = pic32_machine_restart; 48 _machine_halt = pic32_machine_halt; 49 pm_power_off = pic32_machine_halt; 50 51 return 0; 52} 53 54arch_initcall(mips_reboot_setup);