ARM: ARMv7-M: implement restart routine common to all v7-M machines
PATCH v2 1/1 ARM: 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.
---
Changes since v1, sent with Message-Id:
1376494625-25496-1-git-send-email-u.kleine-koenig at pengutronix.de:
- add a more verbose change log
- rename arch/arm/kernel/common-v7m.c to arch/arm/kernel/v7m.c
arch/arm/include/asm/v7m.h | 12 ++++++++++++ arch/arm/kernel/Makefile | 2 +- arch/arm/kernel/v7m.c | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 arch/arm/kernel/v7m.c
arch/arm/include/asm/v7m.h +12 -0
@@ -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__ */
arch/arm/kernel/Makefile +1 -1
@@ -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
arch/arm/kernel/v7m.c new file +19 -0
@@ -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 (); +}
Signature · 1 line
1.8.4.rc0
PATCH v2 1/1 ARM: ARMv7-M: implement restart routine common to all v7-M machines
Quoted 4 lines · Uwe Kleine-K?nig
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.
Quoted 9 lines
Signed-off-by Uwe Kleine-K?nig <[email protected]>---
Changes since v1, sent with Message-Id:
1376494625-25496-1-git-send-email-u.kleine-koenig at pengutronix.de:- add a more verbose change log
- renamearch/arm/kernel/common-v7m.ctoarch/arm/kernel/v7m.c
Thanks Uwe, this looks good now - assuming Russell's happy with arch/arm/kernel/v7m.c :)
FWIW,
Quoted 72 lines
arch/arm/include/asm/v7m.h | 12 ++++++++++++ arch/arm/kernel/Makefile | 2 +- arch/arm/kernel/v7m.c | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-)create mode 100644
arch/arm/kernel/v7m.carch/arm/include/asm/v7m.h +12
-0@@ -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__ */ arch/arm/kernel/Makefile +1
-1@@ -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 endifarch/arm/kernel/v7m.c new file +19
-0@@ -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 (); +}
PATCH v2 1/1 ARM: ARMv7-M: implement restart routine common to all v7-M machines
Hello Russell,
Quoted 11 lines · Jonathan Austin
Quoted 10 lines · Uwe Kleine-K?nig
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.
Signed-off-by Uwe Kleine-K?nig <[email protected]>---
Changes since v1, sent with Message-Id:
1376494625-25496-1-git-send-email-u.kleine-koenig at pengutronix.de:
Quoted 6 lines
Quoted 3 lines
- add a more verbose change log
- renamearch/arm/kernel/common-v7m.ctoarch/arm/kernel/v7m.cThanks Uwe, this looks good now - assuming Russell's happy with
arch/arm/kernel/v7m.c:)
I'd like to get this patch, the efm32-clk patch (Message-Id:
1376510693-12491-1-git-send-email-u.kleine-koenig at pengutronix.de) and the patch introducing the efm32 platform (Message-Id:
1376552964-16296-1-git-send-email-u.kleine-koenig at pengutronix.de) merged for 3.12. So assuming you are OK with this change I'd like to let the arm-soc people pull the three patches from a single branch. For that I'd like to have you ack.
Best regards
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |