1dd1661e27a7879d3af0024ba94e171522492dd2fRussell King/* 2dd1661e27a7879d3af0024ba94e171522492dd2fRussell King * arch/arm/plat-spear/restart.c 3dd1661e27a7879d3af0024ba94e171522492dd2fRussell King * 4dd1661e27a7879d3af0024ba94e171522492dd2fRussell King * SPEAr platform specific restart functions 5dd1661e27a7879d3af0024ba94e171522492dd2fRussell King * 6dd1661e27a7879d3af0024ba94e171522492dd2fRussell King * Copyright (C) 2009 ST Microelectronics 710d8935f46e5028847b179757ecbf9238b13d129Viresh Kumar * Viresh Kumar <viresh.linux@gmail.com> 8dd1661e27a7879d3af0024ba94e171522492dd2fRussell King * 9dd1661e27a7879d3af0024ba94e171522492dd2fRussell King * This file is licensed under the terms of the GNU General Public 10dd1661e27a7879d3af0024ba94e171522492dd2fRussell King * License version 2. This program is licensed "as is" without any 11dd1661e27a7879d3af0024ba94e171522492dd2fRussell King * warranty of any kind, whether express or implied. 12dd1661e27a7879d3af0024ba94e171522492dd2fRussell King */ 13dd1661e27a7879d3af0024ba94e171522492dd2fRussell King#include <linux/io.h> 14da660b4a3b15caea9c198c4f26d1cf7023df92fcCatalin Marinas#include <linux/amba/sp810.h> 157b6d864b48d95e6ea1df7df64475b9cb9616dcf9Robin Holt#include <linux/reboot.h> 169f97da78bf018206fb623cd351d454af2f105fe0David Howells#include <asm/system_misc.h> 175019f0b1345b8f6a8e8a0c7c2f89d4a31819a317Arnd Bergmann#include <mach/spear.h> 182b9c613c4ee1756664fcbf6fc4926fee3e7139c3Arnd Bergmann#include "generic.h" 19dd1661e27a7879d3af0024ba94e171522492dd2fRussell King 20e3978dc7dfcb9e7b022bda775929943b43bdefd8Viresh Kumar#define SPEAR13XX_SYS_SW_RES (VA_MISC_BASE + 0x204) 217b6d864b48d95e6ea1df7df64475b9cb9616dcf9Robin Holtvoid spear_restart(enum reboot_mode mode, const char *cmd) 22dd1661e27a7879d3af0024ba94e171522492dd2fRussell King{ 237b6d864b48d95e6ea1df7df64475b9cb9616dcf9Robin Holt if (mode == REBOOT_SOFT) { 24dd1661e27a7879d3af0024ba94e171522492dd2fRussell King /* software reset, Jump into ROM at address 0 */ 25dd1661e27a7879d3af0024ba94e171522492dd2fRussell King soft_restart(0); 26dd1661e27a7879d3af0024ba94e171522492dd2fRussell King } else { 27dd1661e27a7879d3af0024ba94e171522492dd2fRussell King /* hardware reset, Use on-chip reset capability */ 28e3978dc7dfcb9e7b022bda775929943b43bdefd8Viresh Kumar#ifdef CONFIG_ARCH_SPEAR13XX 29e3978dc7dfcb9e7b022bda775929943b43bdefd8Viresh Kumar writel_relaxed(0x01, SPEAR13XX_SYS_SW_RES); 30af63275bc4da161f4c78c8ddcddc9f90c2d2d194Arnd Bergmann#endif 31af63275bc4da161f4c78c8ddcddc9f90c2d2d194Arnd Bergmann#if defined(CONFIG_ARCH_SPEAR3XX) || defined(CONFIG_ARCH_SPEAR6XX) 32dd1661e27a7879d3af0024ba94e171522492dd2fRussell King sysctl_soft_reset((void __iomem *)VA_SPEAR_SYS_CTRL_BASE); 33e3978dc7dfcb9e7b022bda775929943b43bdefd8Viresh Kumar#endif 34dd1661e27a7879d3af0024ba94e171522492dd2fRussell King } 35dd1661e27a7879d3af0024ba94e171522492dd2fRussell King} 36