Thread (1 message) 1 message, 1 author, 2011-02-15
DORMANTno replies

Revision v4 of 7 in this series.

Revisions (7)
  1. v2 [diff vs current]
  2. v4 [diff vs current]
  3. v4 [diff vs current]
  4. v4 current
  5. v5 [diff vs current]
  6. v5 [diff vs current]
  7. v5 [diff vs current]

[PATCH v4 0/5] ARM: omap[34]: Thumb-2 compatibility fixes

From: Kevin Hilman <hidden>
Date: 2011-02-15 16:15:20
Also in: linux-omap

Dave Martin [off-list ref] writes:
On Mon, Feb 14, 2011 at 11:15 PM, Kevin Hilman [off-list ref] wrote:
quoted
Hi Dave,

Dave Martin [off-list ref] writes:
quoted
On Mon, Feb 14, 2011 at 10:00:23AM -0500, Nicolas Pitre wrote:
quoted
On Mon, 14 Feb 2011, Dave Martin wrote:
quoted
@@ -289,8 +297,20 @@ clean_l2:
? ? * ?- should be faster and will change with kernel
? ? * ?- 'might' have to copy address, load and jump to it
? ? */
+#ifdef CONFIG_THUMB2_KERNEL
+ ?/* kernel is non-interworking : must do this from Thumb */
+ ?adr ? ? r1, . + 1
+ ?bx ? ? ?r1
+ ?.thumb
+#endif
? ?ldr ? ? r1, kernel_flush
Didn't you mean this instead:

? ? ?/* kernel is non-interworking : must do this from Thumb */
? ? ?adr ? ? r1, 1f + 1
? ? ?bx ? ? ?r1
? ? ?.thumb
1: ? ldr ? ? r1, kernel_flush
? ? ?...
Note that this is intended as an experimental hack, not a real patch
(apologies if I didn't make that clear...)

Well, actually I meant "add r1, pc, #1" ... which means I was too
busy trying to be clever... oops!

That is of course exactly equivalent to your code...
quoted
?
quoted
? ?blx ? ? r1
+#ifdef CONFIG_THUMB2_KERNEL
+ ?.align
+ ?bx ? ? ?pc
+ ?nop
+ ?.arm
Also here, the .align has the potential to introduce a zero halfword in
the instruction stream before the bx. ?What about:

? ? ?adr ? ? r3, 1f
? ? ?bx ? ? ?r3
? ? ?.align
? ? ?.arm
1: ? ...
.align inserts a 16-bit nop when misaligned in Thumb in a text section,
and a word-aligned bx pc is a specific architecturally allowed way
to do an inline switch to ARM. ?The linker uses this trick for PLT
veneers etc.

A nicer fix for doing this sort of call from low-level code which
might be ARM is to convert arch/arm/mm/*-v7.S to use "bx lr" to return.

Generally, we can do this for all arches >= v5, without any
incompatibility. ?However, since the need for it will be rare and it
will generate patch noise for not much real benefit,
I haven't proposed this.

Updated patch below.
I tested the updated patch on top of your "dirty" branch I tested with
last week, and now see off-mode working just fine.
Thanks for testing-- that's great news.

I will have a think about whether the patch can be tidied up to revert
most of the code back to Thumb, though that isn't essential.  If I've
understood what's going on correctly, I think only the restore entry
points, SMC call sites and the entry to omap3_sram_configure_core_dpll
could need to be ARM; the rest shouldn't really make any difference...
Yes, that sounds right.

Kevin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help