ARM: set BE8 if LE in head code
authorBen Dooks <ben.dooks@codethink.co.uk>
Fri, 1 Feb 2013 09:40:42 +0000 (09:40 +0000)
committerVictor Kamensky <victor.kamensky@linaro.org>
Thu, 13 Mar 2014 21:43:47 +0000 (14:43 -0700)
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>
Reviewed-by: Dave Martin <Dave.Martin@arm.com>
Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
(cherry picked from commit 97bcb0fea590d3d704f985bec08f342d28992634)

Signed-off-by: Victor Kamensky <victor.kamensky@linaro.org>
Conflicts:
arch/arm/kernel/sleep.S

arch/arm/boot/compressed/head.S
arch/arm/kernel/head.S
arch/arm/kernel/sleep.S

index 4eb8364edc1211ad8b64f6fab6dd96ea10f9dfaf..f6e34be012ff816b9bf0c9086d18d03f9b55fcbd 100644 (file)
@@ -135,6 +135,7 @@ start:
                .word   _edata                  @ zImage end address
  THUMB(                .thumb                  )
 1:
+ ARM_BE8(      setend  be )                    @ go BE8 if compiled for BE8
                mrs     r9, cpsr
 #ifdef CONFIG_ARM_VIRT_EXT
                bl      __hyp_stub_install      @ get into SVC mode, reversibly
index 807a9f5a458c7399f1122ad6ab7e228c2985f77c..11284e744c801a0054502108320a5bd6bb10e2ff 100644 (file)
@@ -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,
@@ -350,6 +351,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)                             @ ensure we are in BE8 mode
+
 #ifdef CONFIG_ARM_VIRT_EXT
        bl      __hyp_stub_install_secondary
 #endif
index b5c1e636ed8559f22411aa7412d09db526633a18..baf4d28213a59f1cbd94a546526fcb9c7f8d6ed8 100644 (file)
@@ -81,6 +81,7 @@ ENDPROC(cpu_resume_after_mmu)
        .data
        .align
 ENTRY(cpu_resume)
+ARM_BE8(setend be)                     @ ensure we are in BE mode
 #ifdef CONFIG_SMP
        mov     r1, #0                  @ fall-back logical index for UP
        ALT_SMP(mrc p15, 0, r0, c0, c0, 5)