summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Dooks <ben.dooks@codethink.co.uk>2013-02-01 09:40:42 +0000
committerBen Dooks <ben.dooks@codethink.co.uk>2013-02-12 19:03:25 +0000
commit67bd0273dcb9248b6bd06272a295a7d1a0b5c997 (patch)
tree45229a0a954c89f4711284afadb866eddc89b167
parent5387594c608f29d2098ee510ea875aaac40ac91c (diff)
downloadlinux-67bd0273dcb9248b6bd06272a295a7d1a0b5c997.tar.gz
ARM: set BE8 if LE in head code
If we are booting in LE and compiled for BE8, then add code to set the state to bE8. Since the instruction stream is always LE, we do not need to do anything special to the instruction. Also ensure that the secondary processors are started in the same mode. Note, we do add about 20 bytes to the kernel image, but it seems easier to do this than adding another configuration to change. Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
-rw-r--r--arch/arm/boot/compressed/head.S1
-rw-r--r--arch/arm/kernel/head.S4
-rw-r--r--arch/arm/mm/proc-v7.S1
3 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index 15ebdd646eaf..06b0f1592ed9 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -134,6 +134,7 @@ start:
.word _edata @ zImage end address
THUMB( .thumb )
1:
+ ARM_BE8( setend be ) @ go BE8 if LE, no-op if BE8
mrs r9, cpsr
#ifdef CONFIG_ARM_VIRT_EXT
bl __hyp_stub_install @ get into SVC mode, reversibly
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index cc1538451e84..a1129940d77c 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -77,6 +77,7 @@
__HEAD
ENTRY(stext)
+ ARM_BE8(setend be ) @ ensure we are in BE8 mode
THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM.
THUMB( bx r9 ) @ If this is a Thumb-2 kernel,
@@ -333,6 +334,9 @@ ENTRY(secondary_startup)
* the processor type - there is no need to check the machine type
* as it has already been validated by the primary processor.
*/
+
+ ARM_BE8(setend be) @ if system starts LE, go BE8
+
#ifdef CONFIG_ARM_VIRT_EXT
bl __hyp_stub_install_secondary
#endif
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index d17996b49eda..28bb018800cc 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -109,6 +109,7 @@ ENTRY(cpu_v7_do_suspend)
ENDPROC(cpu_v7_do_suspend)
ENTRY(cpu_v7_do_resume)
+ ARM_BE8(setend be ) @ ensure we are BE8
mov ip, #0
mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs
mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache