From: manabian@gmail.com (Joachim Eastwood)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: zImage: add support for ARMv7-M
Date: Thu, 18 Sep 2014 18:22:22 +0200 [thread overview]
Message-ID: <1411057343-20861-1-git-send-email-manabian@gmail.com> (raw)
This patch makes it possible to enter zImage in Thumb mode for ARMv7M
(Cortex-M) CPUs that does not support ARM mode. The kernel entry is
also made in Thumb mode.
Signed-off-by: Joachim Eastwood <manabian@gmail.com>
---
Hi,
This patch is loosely based on the Cortex-M old support patch by
Catalin Marinas. A lot has happend to compressed/head.S since 2010
but the general placement of some of ifdefs are the same.
Successfully tested on NXP LPC4357 (Cortex-M4).
I just noticed that there is CONFIG_CPU_THUMBONLY config symbol.
Would it be better to use that in this file?
regards
Joachim Eastwood
arch/arm/boot/compressed/head.S | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index 413fd94b5301..6ffccb5283e6 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -11,7 +11,12 @@
#include <linux/linkage.h>
#include <asm/assembler.h>
+#ifdef CONFIG_CPU_V7M
+ .arch armv7-m
+#else
.arch armv7-a
+#endif
+
/*
* Debugging stuff
*
@@ -114,7 +119,9 @@
* sort out different calling conventions
*/
.align
- .arm @ Always enter in ARM state
+#ifndef CONFIG_CPU_V7M
+ .arm @ Always enter in ARM state for non ARMv7M CPUs
+#endif
start:
.type start,#function
.rept 7
@@ -133,6 +140,7 @@ start:
THUMB( .thumb )
1:
ARM_BE8( setend be ) @ go BE8 if compiled for BE8
+#ifndef CONFIG_CPU_V7M
mrs r9, cpsr
#ifdef CONFIG_ARM_VIRT_EXT
bl __hyp_stub_install @ get into SVC mode, reversibly
@@ -155,6 +163,7 @@ not_angel:
safe_svcmode_maskall r0
msr spsr_cxsf, r9 @ Save the CPU boot mode in
@ SPSR
+#endif
/*
* Note that some cache flushing and other stuff may
* be needed here - is there an Angel SWI call for this?
@@ -790,6 +799,9 @@ __common_mmu_cache_on:
call_cache_fn: adr r12, proc_types
#ifdef CONFIG_CPU_CP15
mrc p15, 0, r9, c0, c0 @ get processor ID
+#elif defined(CONFIG_CPU_V7M)
+ ldr r9, =0xe000ed00 @ CPUID register address
+ ldr r9, [r9]
#else
ldr r9, =CONFIG_PROCESSOR_ID
#endif
@@ -945,11 +957,13 @@ proc_types:
W(b) __armv4_mmu_cache_off
W(b) __armv6_mmu_cache_flush
+#ifndef CONFIG_CPU_V7M
.word 0x000f0000 @ new CPU Id
.word 0x000f0000
W(b) __armv7_mmu_cache_on
W(b) __armv7_mmu_cache_off
W(b) __armv7_mmu_cache_flush
+#endif
.word 0 @ unrecognised type
.word 0
@@ -1278,7 +1292,10 @@ __hyp_reentry_vectors:
__enter_kernel:
mov r0, #0 @ must be 0
ARM( mov pc, r4 ) @ call kernel
- THUMB( bx r4 ) @ entry point is always ARM
+#ifdef CONFIG_CPU_V7M
+ add r4, r4, #1 @ enter in Thumb mode for ARMv7M
+#endif
+ THUMB( bx r4 ) @ entry point is always ARM for non ARMv7M CPUs
reloc_code_end:
--
1.8.0
next reply other threads:[~2014-09-18 16:22 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-18 16:22 Joachim Eastwood [this message]
2014-09-18 16:22 ` [PATCH] arm: kbuild: make uImage entry an odd number on ARMv7-M Joachim Eastwood
2014-09-18 17:38 ` [PATCH] ARM: zImage: add support for ARMv7-M Arnd Bergmann
2014-09-18 18:34 ` Joachim Eastwood
2014-09-19 10:33 ` Catalin Marinas
2014-09-19 12:40 ` Joachim Eastwood
2014-09-19 13:35 ` Catalin Marinas
2014-09-19 17:22 ` [PATCH v2] " Joachim Eastwood
2014-09-23 16:33 ` Catalin Marinas
2014-09-23 17:41 ` Joachim Eastwood
2014-09-23 17:49 ` [PATCH v3] " Joachim Eastwood
2014-09-23 19:32 ` Uwe Kleine-König
2014-09-23 20:42 ` Joachim Eastwood
2014-09-23 21:22 ` Uwe Kleine-König
2014-09-27 11:25 ` [PATCH v4] " Joachim Eastwood
2014-09-28 10:18 ` Uwe Kleine-König
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1411057343-20861-1-git-send-email-manabian@gmail.com \
--to=manabian@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).