perf cs-etm: Initialise architecture based on TRCIDR1
authorJames Clark <james.clark@arm.com>
Fri, 6 Aug 2021 13:41:02 +0000 (14:41 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 3 Sep 2021 11:07:38 +0000 (08:07 -0300)
Currently the architecture is hard coded as ARCH_V8, but from ETMv4.4
onwards this should be ARCH_AA64.

Reviewed-by: Leo Yan <leo.yan@linaro.org>
Signed-off-by: James Clark <james.clark@arm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: John Garry <john.garry@huawei.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Mike Leach <mike.leach@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: coresight@lists.linaro.org
Cc: linux-arm-kernel@lists.infradead.org
Link: https //lore.kernel.org/r/20210806134109.1182235-3-james.clark@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/cs-etm-decoder/cs-etm-decoder.c

index 187c038..62d30b5 100644 (file)
@@ -126,6 +126,21 @@ static int cs_etm_decoder__gen_etmv3_config(struct cs_etm_trace_params *params,
        return 0;
 }
 
+#define TRCIDR1_TRCARCHMIN_SHIFT 4
+#define TRCIDR1_TRCARCHMIN_MASK  GENMASK(7, 4)
+#define TRCIDR1_TRCARCHMIN(x)    (((x) & TRCIDR1_TRCARCHMIN_MASK) >> TRCIDR1_TRCARCHMIN_SHIFT)
+
+static enum _ocsd_arch_version cs_etm_decoder__get_etmv4_arch_ver(u32 reg_idr1)
+{
+       /*
+        * For ETMv4 if the trace minor version is 4 or more then we can assume
+        * the architecture is ARCH_AA64 rather than just V8.
+        * ARCH_V8 = V8 architecture
+        * ARCH_AA64 = Min v8r3 plus additional AA64 PE features
+        */
+       return TRCIDR1_TRCARCHMIN(reg_idr1) >= 4 ? ARCH_AA64 : ARCH_V8;
+}
+
 static void cs_etm_decoder__gen_etmv4_config(struct cs_etm_trace_params *params,
                                             ocsd_etmv4_cfg *config)
 {
@@ -140,7 +155,7 @@ static void cs_etm_decoder__gen_etmv4_config(struct cs_etm_trace_params *params,
        config->reg_idr11 = 0;
        config->reg_idr12 = 0;
        config->reg_idr13 = 0;
-       config->arch_ver = ARCH_V8;
+       config->arch_ver = cs_etm_decoder__get_etmv4_arch_ver(params->etmv4.reg_idr1);
        config->core_prof = profile_CortexA;
 }