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