]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ARM: let CPUs not being able to run in ARM mode enter in THUMB mode
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Fri, 9 Dec 2011 19:52:10 +0000 (20:52 +0100)
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 31 Jan 2013 20:44:46 +0000 (21:44 +0100)
Some ARM cores are not capable to run in ARM mode (e.g. Cortex-M3). So
obviously these cannot enter the kernel in ARM mode. Make an exception
for them and let them enter in THUMB mode.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Message-Id: 1358162123-30113-1-git-send-email-u.kleine-koenig@pengutronix.de
Acked-by: Nicolas Pitre <nico@linaro.org>
arch/arm/Kconfig
arch/arm/kernel/head-nommu.S
arch/arm/mm/Kconfig

index 67874b82a4edf318ae3718ae6137393140405586..e04c7793f47e2dda1360c517e1fe46c5c4647a2e 100644 (file)
@@ -1656,8 +1656,9 @@ config HZ
        default 100
 
 config THUMB2_KERNEL
-       bool "Compile the kernel in Thumb-2 mode"
+       bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY
        depends on CPU_V7 && !CPU_V6 && !CPU_V6K
+       default y if CPU_THUMBONLY
        select AEABI
        select ARM_ASM_UNIFIED
        select ARM_UNWIND
index 2c228a07e58c7f023a5df0828e6ceacc52793be9..6a2e09c952c715862cb32907af2438e39d5b9788 100644 (file)
  * numbers for r1.
  *
  */
-       .arm
 
        __HEAD
+
+#ifdef CONFIG_CPU_THUMBONLY
+       .thumb
+ENTRY(stext)
+#else
+       .arm
 ENTRY(stext)
 
  THUMB(        adr     r9, BSYM(1f)    )       @ Kernel is always entered in ARM.
  THUMB(        bx      r9              )       @ If this is a Thumb-2 kernel,
  THUMB(        .thumb                  )       @ switch to Thumb now.
  THUMB(1:                      )
+#endif
 
        setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode
                                                @ and irqs disabled
index 3fd629d5a5132c27caf14d25b4d15366eca23ca2..8defd638c79e613474d8e3d6ef66681809203f7e 100644 (file)
@@ -397,6 +397,13 @@ config CPU_V7
        select CPU_PABRT_V7
        select CPU_TLB_V7 if MMU
 
+config CPU_THUMBONLY
+       bool
+       # There are no CPUs available with MMU that don't implement an ARM ISA:
+       depends on !MMU
+       help
+         Select this if your CPU doesn't support the 32 bit ARM instructions.
+
 # Figure out what processor architecture version we should be using.
 # This defines the compiler instruction set which depends on the machine type.
 config CPU_32v3
@@ -608,7 +615,7 @@ config ARCH_DMA_ADDR_T_64BIT
        bool
 
 config ARM_THUMB
-       bool "Support Thumb user binaries"
+       bool "Support Thumb user binaries" if !CPU_THUMBONLY
        depends on CPU_ARM720T || CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_V6 || CPU_V6K || CPU_V7 || CPU_FEROCEON
        default y
        help