drivers/perf: arm_pmu: Handle 47 bit counters
authorMarc Zyngier <maz@kernel.org>
Tue, 8 Feb 2022 18:56:03 +0000 (18:56 +0000)
committerWill Deacon <will@kernel.org>
Tue, 8 Mar 2022 13:32:48 +0000 (13:32 +0000)
The current ARM PMU framework can only deal with 32 or 64bit counters.
Teach it about a 47bit flavour.

Yes, this is odd.

Reviewed-by: Hector Martin <marcan@marcan.st>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Will Deacon <will@kernel.org>
drivers/perf/arm_pmu.c
include/linux/perf/arm_pmu.h

index 295cc79..0a9ed1a 100644 (file)
@@ -109,6 +109,8 @@ static inline u64 arm_pmu_event_max_period(struct perf_event *event)
 {
        if (event->hw.flags & ARMPMU_EVT_64BIT)
                return GENMASK_ULL(63, 0);
+       else if (event->hw.flags & ARMPMU_EVT_47BIT)
+               return GENMASK_ULL(46, 0);
        else
                return GENMASK_ULL(31, 0);
 }
index 2512e2f..0407a38 100644 (file)
@@ -26,6 +26,8 @@
  */
 /* Event uses a 64bit counter */
 #define ARMPMU_EVT_64BIT               1
+/* Event uses a 47bit counter */
+#define ARMPMU_EVT_47BIT               2
 
 #define HW_OP_UNSUPPORTED              0xFFFF
 #define C(_x)                          PERF_COUNT_HW_CACHE_##_x