2019-06-01 16:08:59 +08:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-only
|
2016-01-14 09:15:39 +08:00
|
|
|
/*
|
|
|
|
* 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);
|