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 295cc7952d0edf9d622727357d1c3d607ac4aa0b..0a9ed1a061acab651c1acf2aea29dab96ed6d21d 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 2512e2f9cd4e7964fe08c42052d4313f5cfc6679..0407a38b470ab7ccdb4792957ed179dd8ac15e5d 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