]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf arm_spe: Decode ASE and FP fields in other operation
authorLeo Yan <leo.yan@arm.com>
Wed, 12 Nov 2025 18:24:31 +0000 (18:24 +0000)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 19 Nov 2025 04:31:29 +0000 (20:31 -0800)
Add a check for other operation, which prevents any incorrectly
classifying. Parse the ASE and FP fields.

After:

  .  0000002f:  48 06                                           OTHER ASE FP INSN-OTHER
  .  00000031:  b2 08 80 48 01 08 00 ff ff                      VA 0xffff000801488008
  .  0000003a:  9a 00 00                                        LAT 0 XLAT
  .  0000003d:  42 16                                           EV RETIRED L1D-ACCESS TLB-ACCESS

Signed-off-by: Leo Yan <leo.yan@arm.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Reviewed-by: James Clark <james.clark@linaro.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.c
tools/perf/util/arm-spe-decoder/arm-spe-pkt-decoder.h

index 533920b738cbcb39136d1ba3d88e99f9d8009e74..21b65a9b40f481b6cb25aaf01ab627ade046ff72 100644 (file)
@@ -351,8 +351,12 @@ static int arm_spe_pkt_desc_op_type(const struct arm_spe_pkt *packet,
                                arm_spe_pkt_out_string(&err, &buf, &buf_len, " FP");
                        if (payload & SPE_OP_PKT_SVE_PRED)
                                arm_spe_pkt_out_string(&err, &buf, &buf_len, " PRED");
-               } else {
+               } else if (SPE_OP_PKT_OTHER_SUBCLASS_OTHER(payload)) {
                        arm_spe_pkt_out_string(&err, &buf, &buf_len, "OTHER");
+                       if (payload & SPE_OP_PKT_OTHER_ASE)
+                               arm_spe_pkt_out_string(&err, &buf, &buf_len, " ASE");
+                       if (payload & SPE_OP_PKT_OTHER_FP)
+                               arm_spe_pkt_out_string(&err, &buf, &buf_len, " FP");
                        arm_spe_pkt_out_string(&err, &buf, &buf_len, " %s",
                                               payload & SPE_OP_PKT_COND ?
                                               "COND-SELECT" : "INSN-OTHER");
index 48bd9e9ef132b11b79ffe2e2fbc7cfe4c340ff92..704601c6dbe30e93f83a82670d0d60344a22222a 100644 (file)
@@ -123,8 +123,12 @@ enum arm_spe_events {
 #define SPE_OP_PKT_HDR_CLASS_LD_ST_ATOMIC      0x1
 #define SPE_OP_PKT_HDR_CLASS_BR_ERET           0x2
 
+#define SPE_OP_PKT_OTHER_SUBCLASS_OTHER(v)     (((v) & GENMASK_ULL(7, 3)) == 0x0)
 #define SPE_OP_PKT_OTHER_SUBCLASS_SVE(v)       (((v) & (BIT(7) | BIT(3) | BIT(0))) == 0x8)
 
+#define SPE_OP_PKT_OTHER_ASE                   BIT(2)
+#define SPE_OP_PKT_OTHER_FP                    BIT(1)
+
 #define SPE_OP_PKT_LDST_SUBCLASS_GP_REG(v)     (((v) & GENMASK_ULL(7, 1)) == 0x0)
 #define SPE_OP_PKT_LDST_SUBCLASS_SIMD_FP(v)    (((v) & GENMASK_ULL(7, 1)) == 0x4)
 #define SPE_OP_PKT_LDST_SUBCLASS_UNSPEC_REG(v) (((v) & GENMASK_ULL(7, 1)) == 0x10)