xref: /rk3399_rockchip-uboot/arch/mips/mach-pic32/reset.c (revision d2427caf54a08ec80e8bfa5ef2c0b4377da55bab)
1*be961fa1SPurna Chandra Mandal /*
2*be961fa1SPurna Chandra Mandal  * (c) 2015 Purna Chandra Mandal <purna.mandal@microchip.com>
3*be961fa1SPurna Chandra Mandal  *
4*be961fa1SPurna Chandra Mandal  * SPDX-License-Identifier:	GPL-2.0+
5*be961fa1SPurna Chandra Mandal  *
6*be961fa1SPurna Chandra Mandal  */
7*be961fa1SPurna Chandra Mandal 
8*be961fa1SPurna Chandra Mandal #include <common.h>
9*be961fa1SPurna Chandra Mandal #include <asm/io.h>
10*be961fa1SPurna Chandra Mandal #include <mach/pic32.h>
11*be961fa1SPurna Chandra Mandal 
12*be961fa1SPurna Chandra Mandal /* SYSKEY */
13*be961fa1SPurna Chandra Mandal #define UNLOCK_KEY1	0xaa996655
14*be961fa1SPurna Chandra Mandal #define UNLOCK_KEY2	0x556699aa
15*be961fa1SPurna Chandra Mandal #define LOCK_KEY	0
16*be961fa1SPurna Chandra Mandal 
17*be961fa1SPurna Chandra Mandal #define RSWRST          0x1250
18*be961fa1SPurna Chandra Mandal 
_machine_restart(void)19*be961fa1SPurna Chandra Mandal void _machine_restart(void)
20*be961fa1SPurna Chandra Mandal {
21*be961fa1SPurna Chandra Mandal 	void __iomem *base;
22*be961fa1SPurna Chandra Mandal 
23*be961fa1SPurna Chandra Mandal 	base = pic32_get_syscfg_base();
24*be961fa1SPurna Chandra Mandal 
25*be961fa1SPurna Chandra Mandal 	/* unlock sequence */
26*be961fa1SPurna Chandra Mandal 	writel(LOCK_KEY, base + SYSKEY);
27*be961fa1SPurna Chandra Mandal 	writel(UNLOCK_KEY1, base + SYSKEY);
28*be961fa1SPurna Chandra Mandal 	writel(UNLOCK_KEY2, base + SYSKEY);
29*be961fa1SPurna Chandra Mandal 
30*be961fa1SPurna Chandra Mandal 	/* soft reset */
31*be961fa1SPurna Chandra Mandal 	writel(0x1, base + RSWRST);
32*be961fa1SPurna Chandra Mandal 	(void) readl(base + RSWRST);
33*be961fa1SPurna Chandra Mandal 
34*be961fa1SPurna Chandra Mandal 	while (1)
35*be961fa1SPurna Chandra Mandal 		;
36*be961fa1SPurna Chandra Mandal }
37