arm: Fix a GIC mask register bug
authorAli Saidi <Ali.Saidi@ARM.com>
Thu, 17 Oct 2013 15:20:45 +0000 (10:20 -0500)
committerAli Saidi <Ali.Saidi@ARM.com>
Thu, 17 Oct 2013 15:20:45 +0000 (10:20 -0500)
This resulted in a kernel printk that said,
"GIC CPU mask not found - kernel will fail to boot."

src/dev/arm/gic_pl390.cc

index a33ec800f7a89e9852405a2a2f3ff80b831fa61e..1acfdc707b8540ad1798f698a26344db3c9f56c5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010 ARM Limited
+ * Copyright (c) 2010, 2013 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -232,7 +232,12 @@ Pl390::readDistributor(PacketPtr pkt)
             }
         } else {
             assert(ctx_id < sys->numRunningContexts());
-            pkt->set<uint32_t>(ctx_id);
+            // convert the CPU id number into a bit mask
+            uint32_t ctx_mask = power(2, ctx_id);
+            // replicate the 8-bit mask 4 times in a 32-bit word
+            ctx_mask |= ctx_mask << 8;
+            ctx_mask |= ctx_mask << 16;
+            pkt->set<uint32_t>(ctx_mask);
         }
         goto done;
     }