Browse Source

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>
Stephen Boyd 10 years ago
parent
commit
bafe586583
1 changed files with 7 additions and 0 deletions
  1. 7 0
      arch/arm/kernel/head.S

+ 7 - 0
arch/arm/kernel/head.S

@@ -346,6 +346,12 @@ __turn_mmu_on_loc:
 
 
 #if defined(CONFIG_SMP)
 #if defined(CONFIG_SMP)
 	.text
 	.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)
 ENTRY(secondary_startup)
 	/*
 	/*
 	 * Common entry point for secondary CPUs.
 	 * Common entry point for secondary CPUs.
@@ -385,6 +391,7 @@ ENTRY(secondary_startup)
  THUMB(	add	r12, r10, #PROCINFO_INITFUNC	)
  THUMB(	add	r12, r10, #PROCINFO_INITFUNC	)
  THUMB(	ret	r12				)
  THUMB(	ret	r12				)
 ENDPROC(secondary_startup)
 ENDPROC(secondary_startup)
+ENDPROC(secondary_startup_arm)
 
 
 	/*
 	/*
 	 * r6  = &secondary_data
 	 * r6  = &secondary_data