Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/pic32/common/reset.c
26489 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Joshua Henderson <[email protected]>
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
13
static 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
24
static 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
38
static void pic32_machine_halt(void)
39
{
40
local_irq_disable();
41
42
pic32_halt();
43
}
44
45
static 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
54
arch_initcall(mips_reboot_setup);
55
56