diff -r 51ce51ce19d6 -r cc4bc8869ff8 src/dev/arm/base_gic.cc --- a/src/dev/arm/base_gic.cc Thu Feb 05 11:07:09 2015 +0000 +++ b/src/dev/arm/base_gic.cc Thu Feb 05 11:07:48 2015 +0000 @@ -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(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 -r 51ce51ce19d6 -r cc4bc8869ff8 src/dev/arm/gic_pl390.cc --- a/src/dev/arm/gic_pl390.cc Thu Feb 05 11:07:09 2015 +0000 +++ b/src/dev/arm/gic_pl390.cc Thu Feb 05 11:07:48 2015 +0000 @@ -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 @@ bankedIntPriority[i][j] = 0; } } - - RealView *rv = dynamic_cast(p->platform); - assert(rv); - rv->setGic(this); - } Tick