// SPDX-License-Identifier: GPL-2.0-only /* * Joshua Henderson <joshua.henderson@microchip.com> * Copyright (C) 2015 Microchip Technology Inc. All rights reserved. */ #include <linux/init.h> #include <linux/pm.h> #include <asm/reboot.h> #include <asm/mach-pic32/pic32.h> #define PIC32_RSWRST 0x10 static void pic32_halt(void) { while (1) { __asm__(".set push;\n" ".set arch=r4000;\n" "wait;\n" ".set pop;\n" ); } } static void pic32_machine_restart(char *command) { void __iomem *reg = ioremap(PIC32_BASE_RESET + PIC32_RSWRST, sizeof(u32)); pic32_syskey_unlock(); /* magic write/read */ __raw_writel(1, reg); (void)__raw_readl(reg); pic32_halt(); } static void pic32_machine_halt(void) { local_irq_disable(); pic32_halt(); } static int __init mips_reboot_setup(void) { _machine_restart = pic32_machine_restart; _machine_halt = pic32_machine_halt; pm_power_off = pic32_machine_halt; return 0; } arch_initcall(mips_reboot_setup); |