* Russell King - ARM Linux <[email protected]> [100902 06:25]:
> On Thu, Aug 19, 2010 at 10:38:11AM +0300, Tony Lindgren wrote:
> > --- a/arch/arm/kernel/head.S
> > +++ b/arch/arm/kernel/head.S
> > @@ -346,8 +346,10 @@ __fixup_smp:
> >     bne     smp_on_up               @ no, assume UP
> >     mrc     p15, 0, r0, c0, c0, 5   @ read MIDR
> >     movs    r0, r0, lsr #30
> > -   teqne   r0, #3                  @ check top two bits 00 or 11
> > -   moveq   pc, lr
> > +   teq     r0, #0                  @ check two top bits 00
> > +   beq     smp_on_up               @ yes, assume UP
> > +   teq     r0, #3                  @ check top two bits 11
> > +   movne   pc, lr                  @ no, running on SMP hw
> 
> This should be:
> 
>       movs    r0, r0, lsr #30
>       teqne   r0, #3
>       movne   pc, lr
> 
> so that 0 or 3 avoids the return.

Actually should also handle value of 1:

31      30
0       0       Not using new register, assume not SMP
0       1       Not using new register, assume not SMP
1       0       Using new register, SMP
1       1       Using new register, UP

So we should return early only if it's 2.

Regards,

Tony
>From 22aaafd2659b95dc1434c5d6dbb7403329d51b90 Mon Sep 17 00:00:00 2001
From: Tony Lindgren <[email protected]>
Date: Thu, 2 Sep 2010 17:51:42 -0700
Subject: [PATCH] Fix smp_on_up detection

This is needed to detect UP properly on older ARMv7 like Cortex-A8.

Signed-off-by: Tony Lindgren <[email protected]>

diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index 0b4a626..86aa36d 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -346,8 +346,8 @@ __fixup_smp:
 	bne	smp_on_up		@ no, assume UP
 	mrc	p15, 0, r0, c0, c0, 5	@ read MIDR
 	movs	r0, r0, lsr #30
-	teqne	r0, #3			@ check top two bits 00 or 11
-	movne	pc, lr
+	teq	r0, #2			@ check top two bits, 10 for SMP
+	moveq	pc, lr
 
 smp_on_up:
 	adr	r0, 1f

Reply via email to