Subject: [PATCH v2 2/3] ARM: iwmmxt: Port problematic iwmmxt support code to v7/Thumb-2

From: [email-masked] (Dave Martin)
Date: Thu, 8 Sep 2011 18:20:02 +0100

On Thu, Sep 08, 2011 at 10:03:52AM -0700, Eric Miao wrote:
> On Thu, Sep 8, 2011 at 9:45 AM, Arnd Bergmann <[email-masked]> wrote:
> > On Thursday 08 September 2011, Dave Martin wrote:
> >> The iwmmxt code contains some code to implement a pseudo-ISB, but
> >> this is not buildable for Thumb-2.
> >>
> >> This patch replaces the pseudo-ISB with a real one for Thumb-2
> >> kernels.
> >>
> >> Signed-off-by: Dave Martin <[email-masked]>
> >> ---
> >> ?arch/arm/kernel/iwmmxt.S | ? ?9 +++++++++
> >> ?1 files changed, 9 insertions(+), 0 deletions(-)
> >
> > Acked-by: Arnd Bergmann <[email-masked]>
> >
> 
> Maybe it'll be much simpler to have something like below:
> 
> diff --git a/arch/arm/kernel/iwmmxt.S b/arch/arm/kernel/iwmmxt.S
> index a087838..5998f7d 100644
> --- a/arch/arm/kernel/iwmmxt.S
> +++ b/arch/arm/kernel/iwmmxt.S
> @@ -319,8 +319,9 @@ ENTRY(iwmmxt_task_switch)
>         PJ4(eor r1, r1, #0xf)
>         PJ4(mcr p15, 0, r1, c1, c0, 2)
> 
> -       mrc     p15, 0, r1, c2, c0, 0
> -       sub     pc, lr, r1, lsr #32             @ cpwait and return
> +       XSC(mrc p15, 0, r1, c2, c0, 0)
> +       PJ4(isb)
> +       mov     pc, lr                          @ cpwait and return

This won't allow the building of this code for a v7 ARM kernel with
current tools.

I think this is likely to be too much dirsuption: requiring really
new tools for Thumb-2 is unavoidable, but we should allow people
using existing tools to build this to carry on with the current
situation for the time being.  This is because of the fact that
not all current tools can support "isb" and the iwmmxt mnemonics
in the same file.

One thing we could do is to code the ISB using .long, since we
only need this for Thumb kernels.

This would allow us to get rid of the Makefile warning, since the
generated code would be the preferred v7 code in that case.

Any comments on this?

Cheers
---Dave