From b3dc64acb908036d60d58f45d43fa2abfe9648f0 Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Thu, 24 Sep 2020 13:26:53 +0100 Subject: [PATCH] arch-arm: Implement ArmPMU DTB generation This has been implemented by following Linux documentation: Documentation/devicetree/bindings/arm/pmu.txt Change-Id: I22583eed3792d5828f9c260e952ec5e8cf9e118b Signed-off-by: Giacomo Travaglini Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/35476 Tested-by: kokoro Reviewed-by: Andreas Sandberg Maintainer: Andreas Sandberg --- src/arch/arm/ArmPMU.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/arch/arm/ArmPMU.py b/src/arch/arm/ArmPMU.py index 047e908b3..c712a97b6 100644 --- a/src/arch/arm/ArmPMU.py +++ b/src/arch/arm/ArmPMU.py @@ -39,7 +39,8 @@ from m5.SimObject import * from m5.params import * from m5.params import isNullPointer from m5.proxy import * -from m5.objects.Gic import ArmInterruptPin +from m5.objects.Gic import ArmInterruptPin, ArmPPI +from m5.util.fdthelper import * class ProbeEvent(object): def __init__(self, pmu, _eventId, obj, *listOfNames): @@ -168,6 +169,21 @@ class ArmPMU(SimObject): # 0x2F: L2D_TLB # 0x30: L2I_TLB + def generateDeviceTree(self, state): + # For simplicity we just support PPIs for DTB autogen otherwise + # it would be difficult to construct a ordered list of SPIs + assert isinstance(self.interrupt, ArmPPI) + + node = FdtNode("pmu") + node.appendCompatible("arm,armv8-pmuv3") + + gic = self.platform.unproxy(self).gic + node.append( + FdtPropertyWords("interrupts", + self.interrupt.generateFdtProperty(gic))) + + yield node + cycleEventId = Param.Int(ARCH_EVENT_CORE_CYCLES, "Cycle event id") platform = Param.Platform(Parent.any, "Platform this device is part of.") eventCounters = Param.Int(31, "Number of supported PMU counters") -- 2.30.2