arch-arm: Only increment SW PMU counters on writes to PMSWINC
authorJose Marinho <jose.marinho@arm.com>
Fri, 28 Jul 2017 14:28:02 +0000 (15:28 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Wed, 30 Aug 2017 16:26:19 +0000 (16:26 +0000)
When writing a bitmask of counters to PMSWINC, the PMU currently
increments the corresponding counters regardless of what they are
configured to count. According to the ARM ARM (D5.10.4), counters
should only be updated if they have been configured to count
software events (event type 0).

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

src/arch/arm/pmu.cc

index 14b1b50a0011c9eadcbfb3daf956b02b18e78ee4..f1ff6cbbc93cb72202708264d683721f9932777d 100644 (file)
@@ -147,8 +147,10 @@ PMU::setMiscReg(int misc_reg, MiscReg val)
       case MISCREG_PMSWINC:
         for (int i = 0; i < counters.size(); ++i) {
             CounterState &ctr(getCounter(i));
-            if (ctr.enabled && (val & (1 << i)))
+            if (ctr.enabled && (val & (1 << i))
+                && ctr.eventId == ARCH_EVENT_SW_INCR ) {
                 ++ctr.value;
+            }
         }
         break;