ARM: 8302/1: Add a secondary_startup that assumes ARM mode
authorStephen Boyd <sboyd@codeaurora.org>
Fri, 30 Jan 2015 23:25:30 +0000 (00:25 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 10 Feb 2015 10:23:13 +0000 (10:23 +0000)
Some platforms always enter the kernel in ARM mode even if the
kernel is compiled for THUMB2. Add a small wrapper on top of
secondary_startup() that switches into THUMB2 mode.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/head.S

index ecb7be8b0854987a7b6b6072a39b323b3228212d..01963273c07a7b187be24bb2a4974b9fc826ebcf 100644 (file)
@@ -346,6 +346,12 @@ __turn_mmu_on_loc:
 
 #if defined(CONFIG_SMP)
        .text
+ENTRY(secondary_startup_arm)
+       .arm
+ THUMB(        adr     r9, BSYM(1f)    )       @ Kernel is entered in ARM.
+ THUMB(        bx      r9              )       @ If this is a Thumb-2 kernel,
+ THUMB(        .thumb                  )       @ switch to Thumb now.
+ THUMB(1:                      )
 ENTRY(secondary_startup)
        /*
         * Common entry point for secondary CPUs.
@@ -385,6 +391,7 @@ ENTRY(secondary_startup)
  THUMB(        add     r12, r10, #PROCINFO_INITFUNC    )
  THUMB(        ret     r12                             )
 ENDPROC(secondary_startup)
+ENDPROC(secondary_startup_arm)
 
        /*
         * r6  = &secondary_data