From 25c1933ffe7943b057056f9c9822001443ceb4e8 Mon Sep 17 00:00:00 2001 From: Matt Evans Date: Fri, 7 Sep 2012 14:20:53 -0500 Subject: [PATCH] ARM: Fix issue with with way MPIDR is read to include affinity levels. The simple_bootloader checks for CPU0 in a manner incompatible with systems actually using affinity levels -- just looking at MPIDR[7:0]. However, in future we may wish to use real affinity levels and this method will be in danger of matching several CPUs with affinity0 = 0. Match affinity2 == affinity1 == affinity0 == 0 instead. --- system/arm/simple_bootloader/simple.S | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/system/arm/simple_bootloader/simple.S b/system/arm/simple_bootloader/simple.S index afba47728..4870eccf8 100644 --- a/system/arm/simple_bootloader/simple.S +++ b/system/arm/simple_bootloader/simple.S @@ -68,8 +68,7 @@ _entry: bootldr: mrc p15, 0, r8, c0, c0, 5 // get the MPIDR register - uxtb r8, r8 // isolate the lower 8 bits (affinity lvl 1) - adds r8, r8, #0 // set flags for branch + bics r8, r8, #0xff000000 // isolate the lower 24 bits (affinity levels) bxeq r3 // if it's 0 (CPU 0), branch to kernel mov r8, #1 str r8, [r4, #0] // Enable CPU interface on GIC -- 2.30.2