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 Mandalvoid _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