forked from luck/tmp_suning_uos_patched
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_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_SLEEPDEEP (1 << 2)
|
||||
|
||||
|
@ -42,3 +46,11 @@
|
|||
*/
|
||||
#define EXC_RET_STACK_MASK 0x00000004
|
||||
#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
|
||||
|
||||
ifeq ($(CONFIG_CPU_V7M),y)
|
||||
obj-y += entry-v7m.o
|
||||
obj-y += entry-v7m.o v7m.o
|
||||
else
|
||||
obj-y += entry-armv.o
|
||||
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