1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2009 3*4882a593Smuzhiyun * Vipin Kumar, ST Micoelectronics, vipin.kumar@st.com. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include <common.h> 9*4882a593Smuzhiyun #include <asm/io.h> 10*4882a593Smuzhiyun #include <asm/arch/hardware.h> 11*4882a593Smuzhiyun #include <asm/arch/spr_syscntl.h> 12*4882a593Smuzhiyun reset_cpu(ulong ignored)13*4882a593Smuzhiyunvoid reset_cpu(ulong ignored) 14*4882a593Smuzhiyun { 15*4882a593Smuzhiyun struct syscntl_regs *syscntl_regs_p = 16*4882a593Smuzhiyun (struct syscntl_regs *)CONFIG_SPEAR_SYSCNTLBASE; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun printf("System is going to reboot ...\n"); 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /* 21*4882a593Smuzhiyun * This 1 second delay will allow the above message 22*4882a593Smuzhiyun * to be printed before reset 23*4882a593Smuzhiyun */ 24*4882a593Smuzhiyun udelay((1000 * 1000)); 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun /* Going into slow mode before resetting SOC */ 27*4882a593Smuzhiyun writel(0x02, &syscntl_regs_p->scctrl); 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* 30*4882a593Smuzhiyun * Writing any value to the system status register will 31*4882a593Smuzhiyun * reset the SoC 32*4882a593Smuzhiyun */ 33*4882a593Smuzhiyun writel(0x00, &syscntl_regs_p->scsysstat); 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* system will restart */ 36*4882a593Smuzhiyun while (1) 37*4882a593Smuzhiyun ; 38*4882a593Smuzhiyun } 39