summaryrefslogtreecommitdiff
path: root/src/dev
diff options
context:
space:
mode:
Diffstat (limited to 'src/dev')
-rw-r--r--src/dev/arm/base_gic.cc9
-rw-r--r--src/dev/arm/gic_pl390.cc6
2 files changed, 9 insertions, 6 deletions
diff --git a/src/dev/arm/base_gic.cc b/src/dev/arm/base_gic.cc
index 47e211077..ece8352d3 100644
--- a/src/dev/arm/base_gic.cc
+++ b/src/dev/arm/base_gic.cc
@@ -39,12 +39,21 @@
#include "dev/arm/base_gic.hh"
+#include "dev/arm/realview.hh"
#include "params/BaseGic.hh"
BaseGic::BaseGic(const Params *p)
: PioDevice(p),
platform(p->platform)
{
+ RealView *const rv(dynamic_cast<RealView*>(p->platform));
+ // The platform keeps track of the GIC that is hooked up to the
+ // system. Due to quirks in gem5's configuration system, the
+ // platform can't take a GIC as parameter. Instead, we need to
+ // register with the platform when a new GIC is created. If we
+ // can't find a platform, something is seriously wrong.
+ fatal_if(!rv, "GIC model can't register with platform code");
+ rv->setGic(this);
}
BaseGic::~BaseGic()
diff --git a/src/dev/arm/gic_pl390.cc b/src/dev/arm/gic_pl390.cc
index 019b3ee8b..e0d75dc6b 100644
--- a/src/dev/arm/gic_pl390.cc
+++ b/src/dev/arm/gic_pl390.cc
@@ -47,7 +47,6 @@
#include "debug/IPI.hh"
#include "debug/Interrupt.hh"
#include "dev/arm/gic_pl390.hh"
-#include "dev/arm/realview.hh"
#include "dev/terminal.hh"
#include "mem/packet.hh"
#include "mem/packet_access.hh"
@@ -102,11 +101,6 @@ Pl390::Pl390(const Params *p)
bankedIntPriority[i][j] = 0;
}
}
-
- RealView *rv = dynamic_cast<RealView*>(p->platform);
- assert(rv);
- rv->setGic(this);
-
}
Tick