diff options
author | Stephen Boyd <sboyd@codeaurora.org> | 2015-01-30 18:25:30 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2015-02-10 05:23:13 -0500 |
commit | bafe5865834c0cc0d0f937deecc275ccdd588ce8 (patch) | |
tree | 76073d335eb19d674c02adb2e9b6e0d682bd169a /arch | |
parent | ada63d40747128d922d69f73a37b65e1e5403cdf (diff) |
ARM: 8302/1: Add a secondary_startup that assumes ARM mode
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>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/kernel/head.S | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index ecb7be8b0854..01963273c07a 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -346,6 +346,12 @@ __turn_mmu_on_loc: | |||
346 | 346 | ||
347 | #if defined(CONFIG_SMP) | 347 | #if defined(CONFIG_SMP) |
348 | .text | 348 | .text |
349 | ENTRY(secondary_startup_arm) | ||
350 | .arm | ||
351 | THUMB( adr r9, BSYM(1f) ) @ Kernel is entered in ARM. | ||
352 | THUMB( bx r9 ) @ If this is a Thumb-2 kernel, | ||
353 | THUMB( .thumb ) @ switch to Thumb now. | ||
354 | THUMB(1: ) | ||
349 | ENTRY(secondary_startup) | 355 | ENTRY(secondary_startup) |
350 | /* | 356 | /* |
351 | * Common entry point for secondary CPUs. | 357 | * Common entry point for secondary CPUs. |
@@ -385,6 +391,7 @@ ENTRY(secondary_startup) | |||
385 | THUMB( add r12, r10, #PROCINFO_INITFUNC ) | 391 | THUMB( add r12, r10, #PROCINFO_INITFUNC ) |
386 | THUMB( ret r12 ) | 392 | THUMB( ret r12 ) |
387 | ENDPROC(secondary_startup) | 393 | ENDPROC(secondary_startup) |
394 | ENDPROC(secondary_startup_arm) | ||
388 | 395 | ||
389 | /* | 396 | /* |
390 | * r6 = &secondary_data | 397 | * r6 = &secondary_data |