arm: make Arm GenericTimer a ClockedObject
authorCurtis Dunham <Curtis.Dunham@arm.com>
Thu, 7 Sep 2017 21:13:54 +0000 (16:13 -0500)
committerCurtis Dunham <curtis.dunham@arm.com>
Mon, 29 Jan 2018 22:19:55 +0000 (22:19 +0000)
Within a device tree, the GenericTimer device needs to point (via phandle)
to a clock domain which is itself also an object in the device tree. Within
gem5, clock domains are managed by making all clocked SimObjects inherit
from ClockedObject rather than SimObject.

Without this change, the GenericTimer is unable to generate the appropriate
clock domain phandle, and will crash during DTB autogeneration.

Change-Id: I6d3fb6362847c6a01720b2f14b3d595d1e59f01f
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/4960
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/dev/arm/RealView.py
src/dev/arm/generic_timer.cc
src/dev/arm/generic_timer.hh

index 699b7dfb71c930a7a28dc6a4910554de80528c25..cd7772f328b41eef7adcca689026c639468ffcf8 100644 (file)
@@ -54,6 +54,7 @@ from Uart import Uart
 from SimpleMemory import SimpleMemory
 from Gic import *
 from EnergyCtrl import EnergyCtrl
+from ClockedObject import ClockedObject
 from ClockDomain import SrcClockDomain
 from SubSystem import SubSystem
 from Graphics import ImageFormat
@@ -247,7 +248,7 @@ class CpuLocalTimer(BasicPioDevice):
     int_num_timer = Param.UInt32("Interrrupt number used per-cpu to GIC")
     int_num_watchdog = Param.UInt32("Interrupt number for per-cpu watchdog to GIC")
 
-class GenericTimer(SimObject):
+class GenericTimer(ClockedObject):
     type = 'GenericTimer'
     cxx_header = "dev/arm/generic_timer.hh"
     system = Param.ArmSystem(Parent.any, "system")
index f8433bd2d2c9d5b53c1c820e22e4937ff47cf84f..73e4f91437300dc15b8959922b9986ff3d1665b6 100644 (file)
@@ -239,7 +239,7 @@ ArchTimer::Interrupt::clear()
 
 
 GenericTimer::GenericTimer(GenericTimerParams *p)
-    : SimObject(p),
+    : ClockedObject(p),
       system(*p->system),
       gic(p->gic),
       irqPhys(p->int_phys),
index ccfb1277fe41d7636be156c094509d21ab6dca5d..c9cfb74974d073d6d83e797679992ff67bb6ffee 100644 (file)
@@ -226,7 +226,7 @@ class ArchTimerKvm : public ArchTimer
     }
 };
 
-class GenericTimer : public SimObject
+class GenericTimer : public ClockedObject
 {
   public:
     GenericTimer(GenericTimerParams *p);