powerpc/perf: Power11 Performance Monitoring support
authorMadhavan Srinivasan <maddy@linux.ibm.com>
Wed, 21 Feb 2024 04:46:23 +0000 (15:46 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 21 Feb 2024 12:11:00 +0000 (23:11 +1100)
Base enablement patch to register performance monitoring
hardware support for Power11. Most of fields are copied
from power10_pmu struct for power11_pmu struct.

Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240221044623.1598642-2-mpe@ellerman.id.au
arch/powerpc/perf/core-book3s.c
arch/powerpc/perf/internal.h
arch/powerpc/perf/power10-pmu.c

index b7ff680cde9649a36350743d2ffe771564f4225b..6f0d46c53027588680ab83394dc0ed2d455672d7 100644 (file)
@@ -2593,6 +2593,8 @@ static int __init init_ppc64_pmu(void)
                return 0;
        else if (!init_power10_pmu())
                return 0;
+       else if (!init_power11_pmu())
+               return 0;
        else if (!init_ppc970_pmu())
                return 0;
        else
index 4c18b5504326d3f8270b6f1f219d26badb81686b..a70ac471a5a5d6b8b36b8dbb068e375b5989a609 100644 (file)
@@ -10,4 +10,5 @@ int __init init_power7_pmu(void);
 int __init init_power8_pmu(void);
 int __init init_power9_pmu(void);
 int __init init_power10_pmu(void);
+int __init init_power11_pmu(void);
 int __init init_generic_compat_pmu(void);
index 9b5133e361a76b773d0ab1a2941be4dccc582ea0..62a68b6b2d4b12e5f7efadc5e85c27e0afdc6634 100644 (file)
@@ -634,3 +634,30 @@ int __init init_power10_pmu(void)
 
        return 0;
 }
+
+static struct power_pmu power11_pmu;
+
+int __init init_power11_pmu(void)
+{
+       unsigned int pvr;
+       int rc;
+
+       pvr = mfspr(SPRN_PVR);
+       if (PVR_VER(pvr) != PVR_POWER11)
+               return -ENODEV;
+
+       /* Set the PERF_REG_EXTENDED_MASK here */
+       PERF_REG_EXTENDED_MASK = PERF_REG_PMU_MASK_31;
+
+       power11_pmu = power10_pmu;
+       power11_pmu.name = "Power11";
+
+       rc = register_power_pmu(&power11_pmu);
+       if (rc)
+               return rc;
+
+       /* Tell userspace that EBB is supported */
+       cur_cpu_spec->cpu_user_features2 |= PPC_FEATURE2_EBB;
+
+       return 0;
+}