arch-arm: Move GICv3 detection at startup time
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Wed, 30 Jan 2019 12:00:21 +0000 (12:00 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Mon, 18 Feb 2019 12:24:03 +0000 (12:24 +0000)
At the moment the haveGicV3 parameter is used only to signal its
presence when reading the MISCREG_ID_AA64PFR0_EL1 register.  It depends
on the system->getGIC pointing to a GICv3 model.  However this pointer
is set in the System only at init time (after construction), which means
that the haveGICv3CPUInterface will always be false.
This patch is fixing this by moving the parameter initialization at
startup time, together with the cpu interface registration.

Change-Id: I8da6711ea741ecd0f78ec8ca60a8c3ae3bca2421
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Anouk Van Laer <anouk.vanlaer@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/16483
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/arch/arm/isa.cc

index 97de97e6e50ed3ed84698590b9053baee8736a8a..3b10f68a41e3af3d0a4e41f72fe314eeefaf2f66 100644 (file)
@@ -64,6 +64,7 @@ ISA::ISA(Params *p)
       _decoderFlavour(p->decoderFlavour),
       _vecRegRenameMode(Enums::Full),
       pmu(p->pmu),
+      haveGICv3CPUInterface(false),
       impdefAsNop(p->impdef_nop)
 {
     miscRegs[MISCREG_SCTLR_RST] = 0;
@@ -96,13 +97,6 @@ ISA::ISA(Params *p)
         physAddrRange = 32;  // dummy value
     }
 
-    // GICv3 CPU interface system registers are supported
-    haveGICv3CPUInterface = false;
-
-    if (system && dynamic_cast<Gicv3 *>(system->getGIC())) {
-        haveGICv3CPUInterface = true;
-    }
-
     // Initial rename mode depends on highestEL
     const_cast<Enums::VecRegRenameMode&>(_vecRegRenameMode) =
         highestELIs64 ? Enums::Full : Enums::Elem;
@@ -388,6 +382,7 @@ ISA::startup(ThreadContext *tc)
     if (system) {
         Gicv3 *gicv3 = dynamic_cast<Gicv3 *>(system->getGIC());
         if (gicv3) {
+            haveGICv3CPUInterface = true;
             gicv3CpuInterface.reset(gicv3->getCPUInterface(tc->contextId()));
             gicv3CpuInterface->setISA(this);
         }