[PATCH] ARM: let CPUs not being able to run in ARM mode enter in THUMB mode
Uwe Kleine-König
u.kleine-koenig at pengutronix.de
Mon Jan 14 04:50:50 EST 2013
Hello Russell,
On Fri, Jan 11, 2013 at 05:20:16PM +0100, Uwe Kleine-König wrote:
> On Fri, Jan 11, 2013 at 04:07:53PM +0000, Russell King - ARM Linux wrote:
> > On Fri, Jan 11, 2013 at 12:39:57PM +0100, Uwe Kleine-König wrote:
> > > +# Select this if your CPU doesn't support the 32 bit ARM instructions.
> > > +config THUMBONLY_CPU
> > > + bool
> > > + select THUMB2_KERNEL
> > > + select ARM_THUMB
> >
> > Hmm, not convinced this is the best solution. Yes, fine for there to be
> > a THUMBONLY_CPU option, _but_ not the select statements onto user visible
> > symbols. We can get this instead by:
> >
> > config THUMB2_KERNEL
> > bool "Compile the kernel in Thumb-2 mode" if !THUMBONLY_CPU
> > depends on (CPU_V7 && !CPU_V6 && !CPU_V6K) || THUMBONLY_CPU
> > default y if THUMBONLY_CPU
> > select AEABI
> > select ARM_ASM_UNIFIED
> > select ARM_UNWIND
> >
> > and:
> >
> > config ARM_THUMB
> > bool "Support Thumb user binaries" if !THUMBONLY_CPU
> > 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 || THUMBONLY_CPU
> > default y
> >
> > And... I'm left wondering - should we have this instead:
> >
> > config CPU_ARM
> > bool
> >
> > config CPU_THUMB
> > bool
> >
> > which indicates whether the CPU supports the ARM instruction set or the
> > Thumb instruction set (or both) - that should then allow us to select
> > those from the individual CPU_xxx options and eliminate that big long
> > list of dependencies against ARM_THUMB.
> I like your idea and I will come up with a patch.
This looks nice and clean, but after having thought about it for a while
it turns out not to be that easy.
For THUMB2_KERNEL only CPUs must be supported that can do Thumb2. That
means the logic must be something like:
config THUMB2_KERNEL
bool "Compile the kernel in Thumb-2 mode" if ALL_CONFIGURED_CPUS_SUPPORT_ARM
depends on ALL_CONFIGURED_CPUS_SUPPORT_THUMB2
default y if !ALL_CONFIGURED_CPUS_SUPPORT_ARM
for the ALL_CONFIGURED_CPUS_SUPPORT_ARM and .._THUMB2 symbols to do the
right thing, we'd need something like:
config CPU_32v4
bool
...
select ISA_ARM
select ISA_THUMB_NONE
config CPU_32v4T
bool
...
select ISA_ARM
select ISA_THUMB1
...
config CPU_32v7
bool
select ISA_ARM
select ISA_THUMB2
config CPU_32v7M
bool
select ISA_ARM_NONE
select ISA_THUMB2
config ALL_CONFIGURED_CPUS_SUPPORT_ARM
bool
default ISA_ARM && !ISA_ARM_NONE
config ALL_CONFIGURED_CPUS_SUPPORT_THUMB2
bool
default ISA_THUMB2 && !ISA_THUMB1 && !ISA_THUMB_NONE
which looks less nice than what I thought first.
What do you think? Is it still worthwhile to implement this?
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
More information about the linux-arm-kernel
mailing list