]> xenbits.xensource.com Git - people/julieng/boot-wrapper-aarch64.git/commitdiff
Test all MPIDR affinity bits
authorMark Rutland <mark.rutland@arm.com>
Thu, 16 May 2013 10:07:41 +0000 (11:07 +0100)
committerMark Rutland <mark.rutland@arm.com>
Wed, 5 Jun 2013 12:57:42 +0000 (13:57 +0100)
Currently we only test the Aff0 bits of the MPIDR to determine the
'primary' CPU. In multi-cluster systems, MPIDR.Aff{3,2,1} may not be
zero, and there may by multiple CPUs where MPIDR.Aff0 is zero. In these
systems we might determine that two cpus are the primary CPU.

This patch adds a MPIDR_ID_BITS mask, and uses it in all cases we test
the MPIDR, making this safe for multi-cluster systems. This doesn't
bring full support for multi-cluster systems, however, as they may
require additional hardware to be set up (e.g. CCI).

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
boot.S
common.S

diff --git a/boot.S b/boot.S
index 69d1714981bfad4cf6addf043f22b4554b1b42f4..eda42f961bca4b5624060559567da8eff25f25b6 100644 (file)
--- a/boot.S
+++ b/boot.S
@@ -36,7 +36,8 @@ _start:
         * registers.
         */
        mrs     x0, mpidr_el1
-       tst     x0, #15
+       ldr     x1, =MPIDR_ID_BITS
+       tst     x0, x1
        b.ne    1f                              // secondary CPU
 
        ldr     x1, =GIC_DIST_BASE              // GICD_CTLR
@@ -76,7 +77,8 @@ start_ns:
        mov     x3, xzr
 
        mrs     x4, mpidr_el1
-       tst     x4, #15
+       ldr     x5, =MPIDR_ID_BITS
+       tst     x4, x5
        b.eq    2f
 
        /*
index bbe005bf013bbef33713822c48b987bd07f57cb0..70ed17e4e94f5e5be4d775db9a294ae051822410 100644 (file)
--- a/common.S
+++ b/common.S
@@ -7,6 +7,8 @@
  * found in the LICENSE.txt file.
  */
 
+#define MPIDR_ID_BITS  (0xff00ffffff)
+
 #define        CURRENTEL_EL3   (3 << 2)
 
 #define SPSR_A         (1 << 8)        /* System Error masked */