forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
973 B
54 lines
973 B
// SPDX-License-Identifier: GPL-2.0-only |
|
/* |
|
* Joshua Henderson <[email protected]> |
|
* 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);
|
|
|