powerpc/perf: Fix Threshold Event Counter Multiplier width for P10
authorMadhavan Srinivasan <maddy@linux.ibm.com>
Tue, 15 Dec 2020 08:56:18 +0000 (03:56 -0500)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 15 Dec 2020 11:50:04 +0000 (22:50 +1100)
Threshold Event Counter Multiplier (TECM) is part of Monitor Mode
Control Register A (MMCRA). This field along with Threshold Event
Counter Exponent (TECE) is used to get threshould counter value.
In Power10, this is a 8bit field, so patch fixes the
current code to modify the MMCRA[TECM] extraction macro to
handle this change. ISA v3.1 says this is a 7 bit field but
POWER10 it's actually 8 bits which will hopefully be fixed
in ISA v3.1 update.

Fixes: 170a315f41c6 ("powerpc/perf: Support to export MMCRA[TEC*] field to userspace")
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/1608022578-1532-1-git-send-email-atrajeev@linux.vnet.ibm.com
arch/powerpc/perf/isa207-common.c
arch/powerpc/perf/isa207-common.h

index 24f0a900a824e55d7e3cede161910bfa56da35dd..6ab5b272090a7eed9b2f3f7a45dd0bf83c99cb11 100644 (file)
@@ -247,6 +247,9 @@ void isa207_get_mem_weight(u64 *weight)
        u64 sier = mfspr(SPRN_SIER);
        u64 val = (sier & ISA207_SIER_TYPE_MASK) >> ISA207_SIER_TYPE_SHIFT;
 
+       if (cpu_has_feature(CPU_FTR_ARCH_31))
+               mantissa = P10_MMCRA_THR_CTR_MANT(mmcra);
+
        if (val == 0 || val == 7)
                *weight = 0;
        else
index 42087643c33318ab2b1f360fb2460d0a3edab05a..454b32c3144065af989a342194e121358f22b917 100644 (file)
 #define MMCRA_THR_CTR_EXP(v)           (((v) >> MMCRA_THR_CTR_EXP_SHIFT) &\
                                                MMCRA_THR_CTR_EXP_MASK)
 
+#define P10_MMCRA_THR_CTR_MANT_MASK    0xFFul
+#define P10_MMCRA_THR_CTR_MANT(v)      (((v) >> MMCRA_THR_CTR_MANT_SHIFT) &\
+                                               P10_MMCRA_THR_CTR_MANT_MASK)
+
 /* MMCRA Threshold Compare bit constant for power9 */
 #define p9_MMCRA_THR_CMP_SHIFT 45