[PATCH] ARM: OMAP5: Switch to THUMB mode if needed on secondary CPU

Dave Martin Dave.Martin at arm.com
Tue Apr 29 11:31:31 PDT 2014


On Tue, Apr 29, 2014 at 05:36:30PM +0100, Joel Fernandes wrote:

[...]

> >> Sorry what I meant is, say its of Type function. What tells the firmware
> >> to switch to THUMB?
> >> 
> >> What's typically done is a boot address register is written by the
> >> kernel, and the firmware jumps to it after WFE.
> > 
> > Using ENTRY(x) ... ENDPROC(x) causes the symbol seen by the linker
> > for x to have the Thumb bit set if the code is Thumb.
> > 
> > This means that any reference the linker fixes up for that symbol
> > will have the Thumb bit set appropriately.  This applies to any kind
> > of reference, so code in another file that takes the address of the
> > symbol and then passes that address to the firmware should result in the
> > firmware getting an address with the Thumb bit.
> > 
> > From the firmware's point of view it just gets a raw address, but
> > the Thumb bit will now be set.  The firmware still needs to handle
> > this correctly when jumping, but from the look of the code this may
> > already work on omap3/4.  It would be interesting to know whether it
> > works on omap5.
> 
> Thanks a lot for the explanation. That makes perfect sense. I will try it and let you know if it works on OMAP5.

ARM/thumb interworking making perfect sense?  I'll have to frame that
and put it on the wall :)

objdump and nm conveniently mask off the Thumb bit from all function
addresses they print out, but if you show the symbols using readelf
instead you'll see addresses with bit 0 set for Thumb functions.


It's possible that the firmware still doesn't handle branching to Thumb
correctly, but if it does it would be nice to remove the requirement to
build an odd piece of a Thumb-2 kernel in ARM.

Cheers
---Dave



More information about the linux-arm-kernel mailing list