63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
|
/*
|
||
|
* Joshua Henderson <joshua.henderson@microchip.com>
|
||
|
* Copyright (C) 2015 Microchip Technology Inc. All rights reserved.
|
||
|
*
|
||
|
* This program is free software; you can distribute it and/or modify it
|
||
|
* under the terms of the GNU General Public License (Version 2) as
|
||
|
* published by the Free Software Foundation.
|
||
|
*
|
||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||
|
* for more details.
|
||
|
*/
|
||
|
#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);
|