ARM: 7828/1: ARMv7-M: implement restart routine common to all v7-M machines
The newly introduced function is to be used as .restart callback for ARMv7-M machines. The used register is architecturally defined, so it should work for all M-class machines. Acked-by: Jonathan Austin <jonathan.austin@arm.com> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
84b6504f56
commit
6a7d2c6256
@ -15,6 +15,10 @@
|
|||||||
|
|
||||||
#define V7M_SCB_VTOR 0x08
|
#define V7M_SCB_VTOR 0x08
|
||||||
|
|
||||||
|
#define V7M_SCB_AIRCR 0x0c
|
||||||
|
#define V7M_SCB_AIRCR_VECTKEY (0x05fa << 16)
|
||||||
|
#define V7M_SCB_AIRCR_SYSRESETREQ (1 << 2)
|
||||||
|
|
||||||
#define V7M_SCB_SCR 0x10
|
#define V7M_SCB_SCR 0x10
|
||||||
#define V7M_SCB_SCR_SLEEPDEEP (1 << 2)
|
#define V7M_SCB_SCR_SLEEPDEEP (1 << 2)
|
||||||
|
|
||||||
@ -42,3 +46,11 @@
|
|||||||
*/
|
*/
|
||||||
#define EXC_RET_STACK_MASK 0x00000004
|
#define EXC_RET_STACK_MASK 0x00000004
|
||||||
#define EXC_RET_THREADMODE_PROCESSSTACK 0xfffffffd
|
#define EXC_RET_THREADMODE_PROCESSSTACK 0xfffffffd
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
enum reboot_mode;
|
||||||
|
|
||||||
|
void armv7m_restart(enum reboot_mode mode, const char *cmd);
|
||||||
|
|
||||||
|
#endif /* __ASSEMBLY__ */
|
||||||
|
@ -24,7 +24,7 @@ obj-$(CONFIG_ATAGS_PROC) += atags_proc.o
|
|||||||
obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += atags_compat.o
|
obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += atags_compat.o
|
||||||
|
|
||||||
ifeq ($(CONFIG_CPU_V7M),y)
|
ifeq ($(CONFIG_CPU_V7M),y)
|
||||||
obj-y += entry-v7m.o
|
obj-y += entry-v7m.o v7m.o
|
||||||
else
|
else
|
||||||
obj-y += entry-armv.o
|
obj-y += entry-armv.o
|
||||||
endif
|
endif
|
||||||
|
19
arch/arm/kernel/v7m.c
Normal file
19
arch/arm/kernel/v7m.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 Uwe Kleine-Koenig for Pengutronix
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
|
* the terms of the GNU General Public License version 2 as published by the
|
||||||
|
* Free Software Foundation.
|
||||||
|
*/
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/reboot.h>
|
||||||
|
#include <asm/barrier.h>
|
||||||
|
#include <asm/v7m.h>
|
||||||
|
|
||||||
|
void armv7m_restart(enum reboot_mode mode, const char *cmd)
|
||||||
|
{
|
||||||
|
dsb();
|
||||||
|
__raw_writel(V7M_SCB_AIRCR_VECTKEY | V7M_SCB_AIRCR_SYSRESETREQ,
|
||||||
|
BASEADDR_V7M_SCB + V7M_SCB_AIRCR);
|
||||||
|
dsb();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user