summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/Documentation/perf-stat.txt2
-rw-r--r--tools/perf/arch/arm64/util/header.c28
-rw-r--r--tools/perf/builtin-stat.c1
-rw-r--r--tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8dxl-ddr-uncore.json609
-rw-r--r--tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8qxp-ddr-uncore.json18
-rw-r--r--tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mm-ddr-uncore.json160
-rw-r--r--tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mp-ddr-uncore.json493
-rw-r--r--tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8qm-ddr-uncore.json34
-rw-r--r--tools/perf/pmu-events/arch/arm64/mapfile.csv1
-rw-r--r--tools/perf/pmu-events/jevents.c19
-rw-r--r--tools/perf/pmu-events/jevents.h3
-rw-r--r--tools/perf/pmu-events/pmu-events.h1
-rw-r--r--tools/perf/util/cs-etm.c3
-rw-r--r--tools/perf/util/cs-etm.h3
-rw-r--r--tools/perf/util/header.c9
-rw-r--r--tools/perf/util/header.h2
-rw-r--r--tools/perf/util/metricgroup.c258
17 files changed, 1521 insertions, 123 deletions
diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt
index 9abf1cf217e2..936e69f886d7 100644
--- a/tools/perf/Documentation/perf-stat.txt
+++ b/tools/perf/Documentation/perf-stat.txt
@@ -180,6 +180,8 @@ Print count deltas every N milliseconds (minimum: 1ms)
The overhead percentage could be high in some cases, for instance with small, sub 100ms intervals. Use with caution.
example: 'perf stat -I 1000 -e cycles -a sleep 5'
+If the metric exists, it is calculated by the counts generated in this interval and the metric is printed after #.
+
--interval-count times::
Print count deltas for fixed number of times.
This option should be used together with "-I" option.
diff --git a/tools/perf/arch/arm64/util/header.c b/tools/perf/arch/arm64/util/header.c
index a32e4b72a98f..0b2f5fc6245c 100644
--- a/tools/perf/arch/arm64/util/header.c
+++ b/tools/perf/arch/arm64/util/header.c
@@ -66,3 +66,31 @@ char *get_cpuid_str(struct perf_pmu *pmu)
perf_cpu_map__put(cpus);
return buf;
}
+
+#define LEN 20
+
+int soc_version_check(const char *soc_name __maybe_unused)
+{
+ FILE *soc_fd;
+ char name[LEN];
+
+ soc_fd = fopen("/sys/devices/soc0/soc_id", "r");
+ if (!soc_fd) {
+ pr_debug("fopen failed for file /sys/devices/soc0/soc_id\n");
+ return false;
+ }
+
+ if (!fgets(name, LEN, soc_fd)) {
+ pr_debug("get soc name failed\n");
+ fclose(soc_fd);
+ return false;
+ }
+ fclose(soc_fd);
+
+ name[strlen(name) - 1] = '\0';
+
+ if (!strcmp(name, soc_name))
+ return false;
+
+ return true;
+}
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index ac2feddc75fd..87600bec7b21 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -343,6 +343,7 @@ static void process_interval(void)
clock_gettime(CLOCK_MONOTONIC, &ts);
diff_timespec(&rs, &ts, &ref_time);
+ perf_stat__reset_shadow_per_stat(&rt_stat);
read_counters(&rs);
if (STAT_RECORD) {
diff --git a/tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8dxl-ddr-uncore.json b/tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8dxl-ddr-uncore.json
new file mode 100644
index 000000000000..be474c0e830b
--- /dev/null
+++ b/tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8dxl-ddr-uncore.json
@@ -0,0 +1,609 @@
+[
+ {
+ "BriefDescription": "lpddr4 bandwidth usage",
+ "MetricName": "imx8dxl_lpddr4.bandwidth_usage",
+ "MetricExpr": "(( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_channel\\=0x0\\/ + imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_channel\\=0x0\\/ ) * 4 * 2 / duration_time) / (600 * 1000000 * 4 * 2)",
+ "ScaleUnit": "1e2%",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": "ddr3l bandwidth usage",
+ "MetricName": "imx8dxl_ddr3l.bandwidth_usage",
+ "MetricExpr": "(( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_channel\\=0x0\\/ + imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_channel\\=0x0\\/ ) * 4 * 2 / duration_time) / (467 * 1000000 * 4 * 2)",
+ "ScaleUnit": "1e2%",
+ "SocName": "i.MX8DXL"
+ },
+
+ {
+ "BriefDescription": " bytes of all masters read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.all",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of all masters write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.all",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+ {
+ "BriefDescription": " bytes of scu cortex-m4 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.scu_m4",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+
+ "BriefDescription": " bytes of scu cortex-m4 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.scu_m4",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of dap read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.dap",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0010\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of dap write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.dap",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0010\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of atb read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.atb",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0018\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of atb write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.atb",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0018\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of caam read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.caam",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0f00\\,axi\\_id\\=0x0060\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of caam write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.caam",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0f00\\,axi\\_id\\=0x0060\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of test port read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.test_port",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0028\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of test port write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.test_port",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0028\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+ {
+ "BriefDescription": " bytes of general cortex-m4 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.general_m4",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0001\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of general cortex-m4 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.general_m4",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0001\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+ {
+ "BriefDescription": " bytes of edma0 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.edma0",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0002\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma0 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.edma0",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0002\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma2 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.edma2",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x1812\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma2 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.edma2",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x1812\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma3 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.edma3",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x201a\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma3 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.edma3",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x201a\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lcdif regular channel read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.lcdif_regular",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x2802\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lcdif regular channel write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.lcdif_regular",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x2802\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lcdif alpha channel read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.lcdif_alpha",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x2842\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lcdif alpha channel write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.lcdif_alpha",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x2842\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+ {
+ "BriefDescription": " bytes of raw nand (gpmi dma) read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.gpmi_dma",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0003\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of raw nand (gpmi dma) write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.gpmi_dma",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0003\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of raw nand (bch) read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.bch",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x000b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of raw nand (bch) write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.bch",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x000b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of enet rx read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.enet_rx",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0803\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of enet rx write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.enet_rx",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0803\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of enet tx read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.enet_tx",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x080b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of enet tx write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.enet_tx",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x080b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of eqis rx read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.eqis_rx",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0813\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of eqis rx write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.eqis_rx",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0813\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usb2.0 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.usb",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x00b0\\,axi\\_id\\=0x040b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usb2.0 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.usb",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x00b0\\,axi\\_id\\=0x040b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc0 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.usdhc0",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x001b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc0 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.usdhc0",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x001b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc1 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.usdhc1",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0023\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc1 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.usdhc1",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0023\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc2 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.usdhc2",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x002b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc2 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.usdhc2",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x002b\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+ {
+ "BriefDescription": " bytes of hsio read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.hsio",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0xfff8\\,axi\\_id\\=0x0004\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of hsio write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.hsio",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0xfff8\\,axi\\_id\\=0x0004\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+ {
+ "BriefDescription": " bytes of lsio read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.lsio",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0xfff8\\,axi\\_id\\=0x0005\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lsio write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.lsio",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0xfff8\\,axi\\_id\\=0x0005\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+ {
+ "BriefDescription": " bytes of cortex-a35 read from ddr0",
+ "MetricName": "imx8dxl_ddr0_read.a35",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0xfff8\\,axi\\_id\\=0x0006\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of cortex-a35 write to ddr0",
+ "MetricName": "imx8dxl_ddr0_write.a35",
+ "MetricExpr": "( imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0xfff8\\,axi\\_id\\=0x0006\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+
+ {
+ "BriefDescription": " bytes of scu cortex-m4 read from db0",
+ "MetricName": "imx8dxl_db0_read.scu_m4",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+
+ "BriefDescription": " bytes of scu cortex-m4 write to db0",
+ "MetricName": "imx8dxl_db0_write.scu_m4",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of dap read from db0",
+ "MetricName": "imx8dxl_db0_read.dap",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0002\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of dap write to db0",
+ "MetricName": "imx8dxl_db0_write.dap",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0002\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of atb read from db0",
+ "MetricName": "imx8dxl_db0_read.atb",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0003\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of atb write to db0",
+ "MetricName": "imx8dxl_db0_write.atb",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0003\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of caam read from db0",
+ "MetricName": "imx8dxl_db0_read.caam",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x01e0\\,axi\\_id\\=0x000c\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of caam write to db0",
+ "MetricName": "imx8dxl_db0_write.caam",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x01e0\\,axi\\_id\\=0x000c\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of test port read from db0",
+ "MetricName": "imx8dxl_db0_read.test_port",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0005\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of test port write to db0",
+ "MetricName": "imx8dxl_db0_write.test_port",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0005\\,axi\\_port\\=0x0\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+ {
+ "BriefDescription": " bytes of general cortex-m4 read from db0",
+ "MetricName": "imx8dxl_db0_read.general_m4",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x1\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of general cortex-m4 write to db0",
+ "MetricName": "imx8dxl_db0_write.general_m4",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x1\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+ {
+ "BriefDescription": " bytes of edma0 read from db0",
+ "MetricName": "imx8dxl_db0_read.edma0",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma0 write to db0",
+ "MetricName": "imx8dxl_db0_write.edma0",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma2 read from db0",
+ "MetricName": "imx8dxl_db0_read.edma2",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0302\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma2 write to db0",
+ "MetricName": "imx8dxl_db0_write.edma2",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0302\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma3 read from db0",
+ "MetricName": "imx8dxl_db0_read.edma3",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0403\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of edma3 write to db0",
+ "MetricName": "imx8dxl_db0_write.edma3",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0403\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lcdif regular channel read from db0",
+ "MetricName": "imx8dxl_db0_read.lcdif_regular",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0500\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lcdif regular channel write to db0",
+ "MetricName": "imx8dxl_db0_write.lcdif_regular",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0500\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lcdif alpha channel read from db0",
+ "MetricName": "imx8dxl_db0_read.lcdif_alpha",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0508\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lcdif alpha channel write to db0",
+ "MetricName": "imx8dxl_db0_write.lcdif_alpha",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0508\\,axi\\_port\\=0x2\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+ {
+ "BriefDescription": " bytes of raw nand (gpmi dma) read from db0",
+ "MetricName": "imx8dxl_db0_read.gpmi_dma",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of raw nand (gpmi dma) write to db0",
+ "MetricName": "imx8dxl_db0_write.gpmi_dma",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of raw nand (bch) read from db0",
+ "MetricName": "imx8dxl_db0_read.bch",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0001\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of raw nand (bch) write to db0",
+ "MetricName": "imx8dxl_db0_write.bch",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0001\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of enet rx read from db0",
+ "MetricName": "imx8dxl_db0_read.enet_rx",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0100\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of enet rx write to db0",
+ "MetricName": "imx8dxl_db0_write.enet_rx",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0100\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of enet tx read from db0",
+ "MetricName": "imx8dxl_db0_read.enet_tx",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0101\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of enet tx write to db0",
+ "MetricName": "imx8dxl_db0_write.enet_tx",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0101\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of eqis rx read from db0",
+ "MetricName": "imx8dxl_db0_read.eqis_rx",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0102\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of eqis rx write to db0",
+ "MetricName": "imx8dxl_db0_write.eqis_rx",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0102\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usb2.0 read from db0",
+ "MetricName": "imx8dxl_db0_read.usb",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0018\\,axi\\_id\\=0x0081\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usb2.0 write to db0",
+ "MetricName": "imx8dxl_db0_write.usb",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0018\\,axi\\_id\\=0x0081\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc0 read from db0",
+ "MetricName": "imx8dxl_db0_read.usdhc0",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0003\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc0 write to db0",
+ "MetricName": "imx8dxl_db0_write.usdhc0",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0003\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc1 read from db0",
+ "MetricName": "imx8dxl_db0_read.usdhc1",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0004\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc1 write to db0",
+ "MetricName": "imx8dxl_db0_write.usdhc1",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0004\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc2 read from db0",
+ "MetricName": "imx8dxl_db0_read.usdhc2",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0005\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of usdhc2 write to db0",
+ "MetricName": "imx8dxl_db0_write.usdhc2",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0005\\,axi\\_port\\=0x3\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+ {
+ "BriefDescription": " bytes of hsio read from db0",
+ "MetricName": "imx8dxl_db0_read.hsio",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x4\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of hsio write to db0",
+ "MetricName": "imx8dxl_db0_write.hsio",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x4\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+
+ {
+ "BriefDescription": " bytes of lsio read from db0",
+ "MetricName": "imx8dxl_db0_read.lsio",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x5\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of lsio write to db0",
+ "MetricName": "imx8dxl_db0_write.lsio",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x5\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+
+ {
+ "BriefDescription": " bytes of cortex-a35 read from db0",
+ "MetricName": "imx8dxl_db0_read.a35",
+ "MetricExpr": "( imx8_db0\\/axid\\-read\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x6\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ },
+ {
+ "BriefDescription": " bytes of cortex-a35 write to db0",
+ "MetricName": "imx8dxl_db0_write.a35",
+ "MetricExpr": "( imx8_db0\\/axid\\-write\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\,axi\\_port\\=0x6\\,axi\\_channel\\=0x0\\/ ) * 4 * 2",
+ "SocName": "i.MX8DXL"
+ }
+
+]
diff --git a/tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8qxp-ddr-uncore.json b/tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8qxp-ddr-uncore.json
new file mode 100644
index 000000000000..f3f57a3d48b4
--- /dev/null
+++ b/tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8qxp-ddr-uncore.json
@@ -0,0 +1,18 @@
+[
+ {
+ "PublicDescription": "Calculate bytes all masters read from DDR based on read-cycles event. DDR interface generates 2 up and 2 down edges in an internal clock cycle, can pass 4 beats of data. 4 bytes of each beat if DDR burst width is 32 bit.",
+ "BriefDescription": "imx8qxp: bytes of all masters read from ddr0",
+ "MetricName": "imx8qxp-ddr0-all-r",
+ "MetricExpr": "imx8_ddr0\\/read\\-cycles\\/ * 4 * 4",
+ "MetricGroup": "i.MX8QXP_DDR_MON",
+ "SocName": "i.MX8QXP"
+ },
+ {
+ "PublicDescription": "Calculate bytes all masters wirte to DDR based on write-cycles event. DDR interface generates 2 up and 2 down edges in an internal clock cycle, can pass 4 beats of data. 4 bytes of each beat if DDR burst width is 32 bit.",
+ "BriefDescription": "imx8qxp: bytes of all masters write to ddr0",
+ "MetricName": "imx8qxp-ddr0-all-w",
+ "MetricExpr": "imx8_ddr0\\/write\\-cycles\\/ * 4 * 4",
+ "MetricGroup": "i.MX8QXP_DDR_MON",
+ "SocName": "i.MX8QXP"
+ }
+]
diff --git a/tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mm-ddr-uncore.json b/tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mm-ddr-uncore.json
new file mode 100644
index 000000000000..673275162406
--- /dev/null
+++ b/tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mm-ddr-uncore.json
@@ -0,0 +1,160 @@
+[
+ {
+ "PublicDescription": "Calculate bytes all masters read from DDR based on read-cycles event. DDR interface generates 2 up and 2 down edges in an internal clock cycle, can pass 4 beats of data. 4 bytes of each beat if DDR burst width is 32 bit.",
+ "BriefDescription": "imx8mm: bytes of all masters read from ddr0",
+ "MetricName": "imx8mm-ddr0-all-r",
+ "MetricExpr": "imx8_ddr0\\/read\\-cycles\\/ * 4 * 4",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "Calculate bytes all masters wirte to DDR based on write-cycles event. DDR interface generates 2 up and 2 down edges in an internal clock cycle, can pass 4 beats of data. 4 bytes of each beat if DDR burst width is 32 bit.",
+ "BriefDescription": "imx8mm: bytes of all masters write to ddr0",
+ "MetricName": "imx8mm-ddr0-all-w",
+ "MetricExpr": "imx8_ddr0\\/write\\-cycles\\/ * 4 * 4",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+
+
+ {
+ "PublicDescription": "bursts of A53 CORE read from DDR",
+ "BriefDescription": "imx8mm: bursts of a53 core read from ddr0",
+ "MetricName": "imx8mm-ddr0-a53-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "bursts of A53 CORE write to DDR",
+ "BriefDescription": "imx8mm: bursts of a53 core write to ddr0",
+ "MetricName": "imx8mm-ddr0-a53-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+
+
+ {
+ "PublicDescription": "bursts of GPU 3D read from DDR",
+ "BriefDescription": "imx8mm: bursts of gpu 3d read from ddr0",
+ "MetricName": "imx8mm-ddr0-3d-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0001\\,axi\\_id\\=0x000c\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "bursts of GPU 3D write to DDR",
+ "BriefDescription": "imx8mm: bursts of gpu 3d write to ddr0",
+ "MetricName": "imx8mm-ddr0-3d-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0001\\,axi\\_id\\=0x000c\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "bursts of GPU 2D read from DDR",
+ "BriefDescription": "imx8mm: bursts of gpu 2d read from ddr0",
+ "MetricName": "imx8mm-ddr0-2d-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0001\\,axi\\_id\\=0x0004\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "bursts of GPU 2D write to DDR",
+ "BriefDescription": "imx8mm: bursts of gpu 2d write to ddr0",
+ "MetricName": "imx8mm-ddr0-2d-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0001\\,axi\\_id\\=0x0004\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+
+
+ {
+ "PublicDescription": "bursts of DISPMIX read from DDR",
+ "BriefDescription": "imx8mm: bursts of dispmix lcdif1 read from ddr0",
+ "MetricName": "imx8mm-ddr0-dispmix-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0002\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "bursts of DISPMIX write to DDR",
+ "BriefDescription": "imx8mm: bursts of dispmix write to ddr0",
+ "MetricName": "imx8mm-ddr0-dispmix-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0002\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+
+
+ {
+ "PublicDescription": "bursts of VPU read from DDR",
+ "BriefDescription": "imx8mm: bursts of vpu read from ddr0",
+ "MetricName": "imx8mm-ddr0-vpu-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0001\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "bursts of VPU write to DDR",
+ "BriefDescription": "imx8mm: bursts of vpu write to ddr0",
+ "MetricName": "imx8mm-ddr0-vpu-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0001\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+
+
+ {
+ "PublicDescription": "bursts of HSIOMIX read from DDR",
+ "BriefDescription": "imx8mm: bursts of hsiomix read from ddr0",
+ "MetricName": "imx8mm-ddr0-hsiomix-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0003\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "bursts of HSIOMIX write to DDR",
+ "BriefDescription": "imx8mm: bursts of hsiomix write to ddr0",
+ "MetricName": "imx8mm-ddr0-hsiomix-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0003\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+
+
+ {
+ "PublicDescription": "bursts of GIC read from DDR",
+ "BriefDescription": "imx8mm: bursts of gic read from ddr0",
+ "MetricName": "imx8mm-ddr0-gic-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0006\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "bursts of GIC write to DDR",
+ "BriefDescription": "imx8mm: bursts of gic write to ddr0",
+ "MetricName": "imx8mm-ddr0-gic-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0006\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+
+
+ {
+ "PublicDescription": "bursts of SUPERMIX read from DDR",
+ "BriefDescription": "imx8mm: bursts of supermix read from ddr0",
+ "MetricName": "imx8mm-ddr0-supermix-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x000f\\,axi\\_id\\=0x0010\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ },
+ {
+ "PublicDescription": "bursts of SUPERMIX write to DDR",
+ "BriefDescription": "imx8mm: bursts of supermix write to ddr0",
+ "MetricName": "imx8mm-ddr0-supermix-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x000f\\,axi\\_id\\=0x0010\\/",
+ "MetricGroup": "i.MX8MM_DDR_MON",
+ "SocName": "i.MX8MM"
+ }
+]
diff --git a/tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mp-ddr-uncore.json b/tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mp-ddr-uncore.json
new file mode 100644
index 000000000000..13d3548dd2fb
--- /dev/null
+++ b/tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mp-ddr-uncore.json
@@ -0,0 +1,493 @@
+[
+ {
+ "PublicDescription": "calculate lpddr4 bandwidth usage",
+ "BriefDescription": "imx8mp: lpddr4 bandwidth usage",
+ "MetricName": "imx8mp-lpddr4-bandwidth-usage",
+ "MetricExpr": "(( imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\/ + imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\/ ) / duration_time) / (1000 * 1000000 * 4 * 4)",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "ScaleUnit": "1e2%",
+ "SocName": "i.MX8MP"
+ },
+
+ {
+ "PublicDescription": "bytes of all masters read from DDR",
+ "BriefDescription": "imx8mp: bytes of all masters read from ddr0",
+ "MetricName": "imx8mp-ddr0-all-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of all masters write to DDR",
+ "BriefDescription": "imx8mp: bytes of all masters write to ddr0",
+ "MetricName": "imx8mp-ddr0-all-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0xffff\\,axi\\_id\\=0x0000\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+
+
+ {
+ "PublicDescription": "bytes of A53 CORE read from DDR",
+ "BriefDescription": "imx8mp: bytes of a53 core read from ddr0",
+ "MetricName": "imx8mp-ddr0-a53-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of A53 CORE write to DDR",
+ "BriefDescription": "imx8mp: bytes of a53 core write to ddr0",
+ "MetricName": "imx8mp-ddr0-a53-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0000\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+
+
+ {
+ "PublicDescription": "bytes of SUPERMIX(M7) read from DDR",
+ "BriefDescription": "imx8mp: bytes of supermix(m7) core read from ddr0",
+ "MetricName": "imx8mp-ddr0-supermix-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x000f\\,axi\\_id\\=0x0020\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of SUPERMIX(M7) write to DDR",
+ "BriefDescription": "imx8mp: bytes of supermix(m7) write to ddr0",
+ "MetricName": "imx8mp-ddr0-supermix-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x000f\\,axi\\_id\\=0x0020\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+
+
+ {
+ "PublicDescription": "bytes of GPU 3D read from DDR",
+ "BriefDescription": "imx8mp: bytes of gpu 3d read from ddr0",
+ "MetricName": "imx8mp-ddr0-3d-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0070\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of GPU 3D write to DDR",
+ "BriefDescription": "imx8mp: bytes of gpu 3d write to ddr0",
+ "MetricName": "imx8mp-ddr0-3d-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0070\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of GPU 2D read from DDR",
+ "BriefDescription": "imx8mp: bytes of gpu 2d read from ddr0",
+ "MetricName": "imx8mp-ddr0-2d-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0071\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of GPU 2D write to DDR",
+ "BriefDescription": "imx8mp: bytes of gpu 2d write to ddr0",
+ "MetricName": "imx8mp-ddr0-2d-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0071\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+
+
+ {
+ "PublicDescription": "bytes of DISPLAY LCDIF1 read from DDR",
+ "BriefDescription": "imx8mp: bytes of display lcdif1 read from ddr0",
+ "MetricName": "imx8mp-ddr0-lcdif1-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0068\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY LCDIF1 write to DDR",
+ "BriefDescription": "imx8mp: bytes of display lcdif1 write to ddr0",
+ "MetricName": "imx8mp-ddr0-lcdif1-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0068\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY LCDIF2 read from DDR",
+ "BriefDescription": "imx8mp: bytes of display lcdif2 read from ddr0",
+ "MetricName": "imx8mp-ddr0-lcdif2-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0069\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY LCDIF2 write to DDR",
+ "BriefDescription": "imx8mp: bytes of display lcdif2 write to ddr0",
+ "MetricName": "imx8mp-ddr0-lcdif2-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0069\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISI1 read from DDR",
+ "BriefDescription": "imx8mp: bytes of display isi1 read from ddr0",
+ "MetricName": "imx8mp-ddr0-isi1-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006a\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISI1 write to DDR",
+ "BriefDescription": "imx8mp: bytes of display isi1 write to ddr0",
+ "MetricName": "imx8mp-ddr0-isi1-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006a\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISI2 read from DDR",
+ "BriefDescription": "imx8mp: bytes of display isi2 read from ddr0",
+ "MetricName": "imx8mp-ddr0-isi2-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006b\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISI2 write to DDR",
+ "BriefDescription": "imx8mp: bytes of display isi2 write to ddr0",
+ "MetricName": "imx8mp-ddr0-isi2-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006b\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISI3 read from DDR",
+ "BriefDescription": "imx8mp: bytes of display isi3 read from ddr0",
+ "MetricName": "imx8mp-ddr0-isi3-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006c\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISI3 write to DDR",
+ "BriefDescription": "imx8mp: bytes of display isi3 write to ddr0",
+ "MetricName": "imx8mp-ddr0-isi3-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006c\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISP1 read from DDR",
+ "BriefDescription": "imx8mp: bytes of display isp1 read from ddr0",
+ "MetricName": "imx8mp-ddr0-isp1-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006d\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISP1 write to DDR",
+ "BriefDescription": "imx8mp: bytes of display isp1 write to ddr0",
+ "MetricName": "imx8mp-ddr0-isp1-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006d\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISP2 read from DDR",
+ "BriefDescription": "imx8mp: bytes of display isp2 read from ddr0",
+ "MetricName": "imx8mp-ddr0-isp2-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006e\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY ISP2 write to DDR",
+ "BriefDescription": "imx8mp: bytes of display isp2 write to ddr0",
+ "MetricName": "imx8mp-ddr0-isp2-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006e\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY DEWARP read from DDR",
+ "BriefDescription": "imx8mp: bytes of display dewarp read from ddr0",
+ "MetricName": "imx8mp-ddr0-dewarp-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006f\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of DISPLAY DEWARP write to DDR",
+ "BriefDescription": "imx8mp: bytes of display dewarp write to ddr0",
+ "MetricName": "imx8mp-ddr0-dewarp-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x006f\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+
+
+ {
+ "PublicDescription": "bytes of VPU1 read from DDR",
+ "BriefDescription": "imx8mp: bytes of vpu1 read from ddr0",
+ "MetricName": "imx8mp-ddr0-vpu1-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x007c\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of VPU1 write to DDR",
+ "BriefDescription": "imx8mp: bytes of vpu1 write to ddr0",
+ "MetricName": "imx8mp-ddr0-vpu1-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x007c\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of VPU2 read from DDR",
+ "BriefDescription": "imx8mp: bytes of vpu2 read from ddr0",
+ "MetricName": "imx8mp-ddr0-vpu2-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x007d\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of VPU2 write to DDR",
+ "BriefDescription": "imx8mp: bytes of vpu2 write to ddr0",
+ "MetricName": "imx8mp-ddr0-vpu2-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x007d\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of VPU3 read from DDR",
+ "BriefDescription": "imx8mp: bytes of vpu3 read from ddr0",
+ "MetricName": "imx8mp-ddr0-vpu3-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x007e\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of VPU3 write to DDR",
+ "BriefDescription": "imx8mp: bytes of vpu3 write to ddr0",
+ "MetricName": "imx8mp-ddr0-vpu3-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x007e\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+
+
+ {
+ "PublicDescription": "bytes of NPU read from DDR",
+ "BriefDescription": "imx8mp: bytes of npu read from ddr0",
+ "MetricName": "imx8mp-ddr0-npu-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0073\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of NPU write to DDR",
+ "BriefDescription": "imx8mp: bytes of npu write to ddr0",
+ "MetricName": "imx8mp-ddr0-npu-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0073\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+
+
+ {
+ "PublicDescription": "bytes of HSIO USB1 read from DDR",
+ "BriefDescription": "imx8mp: bytes of hsio usb1 read from ddr0",
+ "MetricName": "imx8mp-ddr0-usb1-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0078\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HSIO USB1 write to DDR",
+ "BriefDescription": "imx8mp: bytes of hsio usb1 write to ddr0",
+ "MetricName": "imx8mp-ddr0-usb1-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0078\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HSIO USB2 read from DDR",
+ "BriefDescription": "imx8mp: bytes of hsio usb2 read from ddr0",
+ "MetricName": "imx8mp-ddr0-usb2-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0079\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HSIO USB2 write to DDR",
+ "BriefDescription": "imx8mp: bytes of hsio usb2 write to ddr0",
+ "MetricName": "imx8mp-ddr0-usb2-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0079\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HSIO PCI read from DDR",
+ "BriefDescription": "imx8mp: bytes of hsio pci read from ddr0",
+ "MetricName": "imx8mp-ddr0-pci-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x007a\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HSIO PCI write to DDR",
+ "BriefDescription": "imx8mp: bytes of hsio pci write to ddr0",
+ "MetricName": "imx8mp-ddr0-pci-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x007a\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+
+
+ {
+ "PublicDescription": "bytes of HDMI_TX HRV_MWR read from DDR",
+ "BriefDescription": "imx8mp: bytes of hdmi_tx hrv_mwr read from ddr0",
+ "MetricName": "imx8mp-ddr0-hdmi-hrv-mwr-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0074\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HDMI_TX HRV_MWR write to DDR",
+ "BriefDescription": "imx8mp: bytes of hdmi_tx hrv_mwr write to ddr0",
+ "MetricName": "imx8mp-ddr0-hdmi-hrv-mwr-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0074\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HDMI_TX LCDIF read from DDR",
+ "BriefDescription": "imx8mp: bytes of hdmi_tx lcdif read from ddr0",
+ "MetricName": "imx8mp-ddr0-hdmi-lcdif-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0075\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HDMI_TX LCDIF write to DDR",
+ "BriefDescription": "imx8mp: bytes of hdmi_tx lcdif write to ddr0",
+ "MetricName": "imx8mp-ddr0-hdmi-lcdif-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0075\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HDMI_TX TX_HDCP read from DDR",
+ "BriefDescription": "imx8mp: bytes of hdmi_tx tx_hdcp read from ddr0",
+ "MetricName": "imx8mp-ddr0-hdmi-hdcp-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0076\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of HDMI_TX TX_HDCP write to DDR",
+ "BriefDescription": "imx8mp: bytes of hdmi_tx tx_hdcp write to ddr0",
+ "MetricName": "imx8mp-ddr0-hdmi-hdcp-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0076\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+
+ {
+ "PublicDescription": "bytes of AUDIO DSP read from DDR",
+ "BriefDescription": "imx8mp: bytes of audio dsp read from ddr0",
+ "MetricName": "imx8mp-ddr0-audio-dsp-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0041\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO DSP write to DDR",
+ "BriefDescription": "imx8mp: bytes of audio dsp write to ddr0",
+ "MetricName": "imx8mp-ddr0-audio-dsp-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0041\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA2_PER read from DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma2_per read from ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma2-per-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0062\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA2_PER write to DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma2_per write to ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma2-per-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0062\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA2_BURST read from DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma2_burst read from ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma2-burst-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0063\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA2_BURST write to DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma2_burst write to ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma2-burst-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0063\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA3_PER read from DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma3_per read from ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma3-per-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0064\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA3_PER write to DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma3_per write to ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma3-per-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0064\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA3_BURST read from DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma3_burst read from ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma3-burst-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0065\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA3_BURST write to DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma3_burst write to ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma3-burst-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0065\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA_PIF read from DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma_pif read from ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma-pif-r",
+ "MetricExpr": "imx8_ddr0\\/axid\\-read\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0066\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ },
+ {
+ "PublicDescription": "bytes of AUDIO SDMA_PIF write to DDR",
+ "BriefDescription": "imx8mp: bytes of audio sdma_pif write to ddr0",
+ "MetricName": "imx8mp-ddr0-audio-sdma-pif-w",
+ "MetricExpr": "imx8_ddr0\\/axid\\-write\\,axi\\_mask\\=0x0000\\,axi\\_id\\=0x0066\\/",
+ "MetricGroup": "i.MX8MP_DDR_MON",
+ "SocName": "i.MX8MP"
+ }
+]
diff --git a/tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8qm-ddr-uncore.json b/tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8qm-ddr-uncore.json
new file mode 100644
index 000000000000..6a204cb20014
--- /dev/null
+++ b/tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8qm-ddr-uncore.json
@@ -0,0 +1,34 @@
+[
+ {
+ "PublicDescription": "Calculate bytes all masters read from DDR based on read-cycles event. DDR interface generates 2 up and 2 down edges in an internal clock cycle, can pass 4 beats of data. 4 bytes of each beat if DDR burst width is 32 bit.",
+ "BriefDescription": "imx8qm: bytes of all masters read from ddr0",
+ "MetricName": "imx8qm-ddr0-all-r",
+ "MetricExpr": "imx8_ddr0\\/read\\-cycles\\/ * 4 * 4",
+ "MetricGroup": "i.MX8QM_DDR_MON",
+ "SocName": "i.MX8QM"
+ },
+ {
+ "PublicDescription": "Calculate bytes all masters wirte to DDR based on write-cycles event. DDR interface generates 2 up and 2 down edges in an internal clock cycle, can pass 4 beats of data. 4 bytes of each beat if DDR burst width is 32 bit.",
+ "BriefDescription": "imx8qm: bytes of all masters write to ddr0",
+ "MetricName": "imx8qm-ddr0-all-w",
+ "MetricExpr": "imx8_ddr0\\/write\\-cycles\\/ * 4 * 4",
+ "MetricGroup": "i.MX8QM_DDR_MON",
+ "SocName": "i.MX8QM"
+ },
+ {
+ "PublicDescription": "Calculate bytes all masters read from DDR based on read-cycles event. DDR interface generates 2 up and 2 down edges in an internal clock cycle, can pass 4 beats of data. 4 bytes of each beat if DDR burst width is 32 bit.",
+ "BriefDescription": "imx8qm: bytes of all masters read from ddr1",
+ "MetricName": "imx8qm-ddr1-all-r",
+ "MetricExpr": "imx8_ddr1\\/read\\-cycles\\/ * 4 * 4",
+ "MetricGroup": "i.MX8QM_DDR_MON",
+ "SocName": "i.MX8QM"
+ },
+ {
+ "PublicDescription": "Calculate bytes all masters wirte to DDR based on write-cycles event. DDR interface generates 2 up and 2 down edges in an internal clock cycle, can pass 4 beats of data. 4 bytes of each beat if DDR burst width is 32 bit.",
+ "BriefDescription": "imx8qm: bytes of all masters write to ddr1",
+ "MetricName": "imx8qm-ddr1-all-w",
+ "MetricExpr": "imx8_ddr1\\/write\\-cycles\\/ * 4 * 4",
+ "MetricGroup": "i.MX8QM_DDR_MON",
+ "SocName": "i.MX8QM"
+ }
+]
diff --git a/tools/perf/pmu-events/arch/arm64/mapfile.csv b/tools/perf/pmu-events/arch/arm64/mapfile.csv
index 0d609149b82a..df5a348daa3f 100644
--- a/tools/perf/pmu-events/arch/arm64/mapfile.csv
+++ b/tools/perf/pmu-events/arch/arm64/mapfile.csv
@@ -14,6 +14,7 @@
#Family-model,Version,Filename,EventType
0x00000000410fd030,v1,arm/cortex-a53,core
0x00000000420f1000,v1,arm/cortex-a53,core
+0x00000000410fd040,v1,arm/cortex-a35,core
0x00000000410fd070,v1,arm/cortex-a57-a72,core
0x00000000410fd080,v1,arm/cortex-a57-a72,core
0x00000000410fd0b0,v1,arm/cortex-a76-n1,core
diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
index f4a0d72246cb..9ed9b887e985 100644
--- a/tools/perf/pmu-events/jevents.c
+++ b/tools/perf/pmu-events/jevents.c
@@ -322,7 +322,8 @@ static int print_events_table_entry(void *data, char *name, char *event,
char *desc, char *long_desc,
char *pmu, char *unit, char *perpkg,
char *metric_expr,
- char *metric_name, char *metric_group)
+ char *metric_name, char *metric_group,
+ char *socname)
{
struct perf_entry_data *pd = data;
FILE *outfp = pd->outfp;
@@ -354,6 +355,8 @@ static int print_events_table_entry(void *data, char *name, char *event,
fprintf(outfp, "\t.metric_name = \"%s\",\n", metric_name);
if (metric_group)
fprintf(outfp, "\t.metric_group = \"%s\",\n", metric_group);
+ if (socname)
+ fprintf(outfp, "\t.socname = \"%s\",\n", socname);
fprintf(outfp, "},\n");
return 0;
@@ -371,6 +374,7 @@ struct event_struct {
char *metric_expr;
char *metric_name;
char *metric_group;
+ char *socname;
};
#define ADD_EVENT_FIELD(field) do { if (field) { \
@@ -416,7 +420,8 @@ static void free_arch_std_events(void)
static int save_arch_std_events(void *data, char *name, char *event,
char *desc, char *long_desc, char *pmu,
char *unit, char *perpkg, char *metric_expr,
- char *metric_name, char *metric_group)
+ char *metric_name, char *metric_group,
+ char *socname)
{
struct event_struct *es;
@@ -507,7 +512,8 @@ int json_events(const char *fn,
char *long_desc,
char *pmu, char *unit, char *perpkg,
char *metric_expr,
- char *metric_name, char *metric_group),
+ char *metric_name, char *metric_group,
+ char *socname),
void *data)
{
int err;
@@ -536,6 +542,7 @@ int json_events(const char *fn,
char *metric_expr = NULL;
char *metric_name = NULL;
char *metric_group = NULL;
+ char *socname = NULL;
char *arch_std = NULL;
unsigned long long eventcode = 0;
struct msrmap *msr = NULL;
@@ -622,6 +629,8 @@ int json_events(const char *fn,
addfield(map, &metric_expr, "", "", val);
for (s = metric_expr; *s; s++)
*s = tolower(*s);
+ } else if (json_streq(map, field, "SocName")) {
+ addfield(map, &socname, "", "", val);
} else if (json_streq(map, field, "ArchStdEvent")) {
addfield(map, &arch_std, "", "", val);
for (s = arch_std; *s; s++)
@@ -663,7 +672,8 @@ int json_events(const char *fn,
goto free_strings;
}
err = func(data, name, real_event(name, event), desc, long_desc,
- pmu, unit, perpkg, metric_expr, metric_name, metric_group);
+ pmu, unit, perpkg, metric_expr, metric_name, metric_group,
+ socname);
free_strings:
free(event);
free(desc);
@@ -677,6 +687,7 @@ free_strings:
free(metric_expr);
free(metric_name);
free(metric_group);
+ free(socname);
free(arch_std);
if (err)
diff --git a/tools/perf/pmu-events/jevents.h b/tools/perf/pmu-events/jevents.h
index 4684c673c445..1aa7c4d78ed8 100644
--- a/tools/perf/pmu-events/jevents.h
+++ b/tools/perf/pmu-events/jevents.h
@@ -7,7 +7,8 @@ int json_events(const char *fn,
char *long_desc,
char *pmu,
char *unit, char *perpkg, char *metric_expr,
- char *metric_name, char *metric_group),
+ char *metric_name, char *metric_group,
+ char *socname),
void *data);
char *get_cpu_str(void);
diff --git a/tools/perf/pmu-events/pmu-events.h b/tools/perf/pmu-events/pmu-events.h
index 92a4d15ee0b9..c9bc94ffe5a5 100644
--- a/tools/perf/pmu-events/pmu-events.h
+++ b/tools/perf/pmu-events/pmu-events.h
@@ -17,6 +17,7 @@ struct pmu_event {
const char *metric_expr;
const char *metric_name;
const char *metric_group;
+ const char *socname;
};
/*
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c
index 451eee24165e..f5a9cb408808 100644
--- a/tools/perf/util/cs-etm.c
+++ b/tools/perf/util/cs-etm.c
@@ -94,6 +94,9 @@ struct cs_etm_queue {
struct cs_etm_traceid_queue **traceid_queues;
};
+/* RB tree for quick conversion between traceID and metadata pointers */
+static struct intlist *traceid_list;
+
static int cs_etm__update_queues(struct cs_etm_auxtrace *etm);
static int cs_etm__process_queues(struct cs_etm_auxtrace *etm);
static int cs_etm__process_timeless_queues(struct cs_etm_auxtrace *etm,
diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h
index 650ecc2a6349..4ad925d6d799 100644
--- a/tools/perf/util/cs-etm.h
+++ b/tools/perf/util/cs-etm.h
@@ -114,9 +114,6 @@ enum cs_etm_isa {
CS_ETM_ISA_T32,
};
-/* RB tree for quick conversion between traceID and metadata pointers */
-struct intlist *traceid_list;
-
struct cs_etm_queue;
struct cs_etm_packet {
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index d3412f2c0d18..177a860f87d9 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -845,6 +845,15 @@ int __weak strcmp_cpuid_str(const char *mapcpuid, const char *cpuid)
}
/*
+ * default soc_version_check(): nothing gets recorded
+ * actual implementation must be in arch/$(SRCARCH)/util/header.c
+ */
+int __weak soc_version_check(const char *soc_name __maybe_unused)
+{
+ return -1;
+}
+
+/*
* default get_cpuid(): nothing gets recorded
* actual implementation must be in arch/$(SRCARCH)/util/header.c
*/
diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h
index ca53a929e9fd..55a8d31d07c3 100644
--- a/tools/perf/util/header.h
+++ b/tools/perf/util/header.h
@@ -165,4 +165,6 @@ int get_cpuid(char *buffer, size_t sz);
char *get_cpuid_str(struct perf_pmu *pmu __maybe_unused);
int strcmp_cpuid_str(const char *s1, const char *s2);
+
+int soc_version_check(const char *soc_name __maybe_unused);
#endif /* __PERF_HEADER_H */
diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
index 7753c3091478..c08284ccc1b5 100644
--- a/tools/perf/util/metricgroup.c
+++ b/tools/perf/util/metricgroup.c
@@ -22,6 +22,7 @@
#include <linux/string.h>
#include <linux/zalloc.h>
#include <subcmd/parse-options.h>
+#include "header.h"
struct metric_event *metricgroup__lookup(struct rblist *metric_events,
struct evsel *evsel,
@@ -302,83 +303,91 @@ static void metricgroup__print_strlist(struct strlist *metrics, bool raw)
void metricgroup__print(bool metrics, bool metricgroups, char *filter,
bool raw, bool details)
{
- struct pmu_events_map *map = perf_pmu__find_map(NULL);
+ struct pmu_events_map *map;
+ struct perf_pmu *pmu;
struct pmu_event *pe;
int i;
struct rblist groups;
struct rb_node *node, *next;
struct strlist *metriclist = NULL;
- if (!map)
- return;
-
if (!metricgroups) {
metriclist = strlist__new(NULL, NULL);
if (!metriclist)
return;
}
- rblist__init(&groups);
- groups.node_new = mep_new;
- groups.node_cmp = mep_cmp;
- groups.node_delete = mep_delete;
- for (i = 0; ; i++) {
- const char *g;
- pe = &map->table[i];
+ pmu = NULL;
+ while ((pmu = perf_pmu__scan(pmu)) != NULL) {
+ map = perf_pmu__find_map(pmu);
- if (!pe->name && !pe->metric_group && !pe->metric_name)
- break;
- if (!pe->metric_expr)
+ if (!map)
continue;
- g = pe->metric_group;
- if (!g && pe->metric_name) {
- if (pe->name)
+
+ rblist__init(&groups);
+ groups.node_new = mep_new;
+ groups.node_cmp = mep_cmp;
+ groups.node_delete = mep_delete;
+ for (i = 0; ; i++) {
+ const char *g;
+ pe = &map->table[i];
+
+ if (pe->socname && soc_version_check(pe->socname))
continue;
- g = "No_group";
- }
- if (g) {
- char *omg;
- char *mg = strdup(g);
-
- if (!mg)
- return;
- omg = mg;
- while ((g = strsep(&mg, ";")) != NULL) {
- struct mep *me;
- char *s;
-
- g = skip_spaces(g);
- if (*g == 0)
- g = "No_group";
- if (filter && !strstr(g, filter))
+ if (!pe->name && !pe->metric_group && !pe->metric_name)
+ break;
+ if (!pe->metric_expr)
+ continue;
+ g = pe->metric_group;
+ if (!g && pe->metric_name) {
+ if (pe->name)
continue;
- if (raw)
- s = (char *)pe->metric_name;
- else {
- if (asprintf(&s, "%s\n%*s%s]",
- pe->metric_name, 8, "[", pe->desc) < 0)
- return;
-
- if (details) {
+ g = "No_group";
+ }
+ if (g) {
+ char *omg;
+ char *mg = strdup(g);
+
+ if (!mg)
+ return;
+ omg = mg;
+ while ((g = strsep(&mg, ";")) != NULL) {
+ struct mep *me;
+ char *s;
+
+ g = skip_spaces(g);
+ if (*g == 0)
+ g = "No_group";
+ if (filter && !strstr(g, filter))
+ continue;
+ if (raw)
+ s = (char *)pe->metric_name;
+ else {
if (asprintf(&s, "%s\n%*s%s]",
- s, 8, "[", pe->metric_expr) < 0)
+ pe->metric_name, 8, "[", pe->desc) < 0)
return;
- }
- }
- if (!s)
- continue;
+ if (details) {
+ if (asprintf(&s, "%s\n%*s%s]",
+ s, 8, "[", pe->metric_expr) < 0)
+ return;
+ }
+ }
- if (!metricgroups) {
- strlist__add(metriclist, s);
- } else {
- me = mep_lookup(&groups, g);
- if (!me)
+ if (!s)
continue;
- strlist__add(me->metrics, s);
+
+ if (!metricgroups) {
+ strlist__add(metriclist, s);
+ } else {
+ me = mep_lookup(&groups, g);
+ if (!me)
+ continue;
+ strlist__add(me->metrics, s);
+ }
}
+ free(omg);
}
- free(omg);
}
}
@@ -405,70 +414,80 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter,
static int metricgroup__add_metric(const char *metric, struct strbuf *events,
struct list_head *group_list)
{
- struct pmu_events_map *map = perf_pmu__find_map(NULL);
+ struct pmu_events_map *map;
+ struct perf_pmu *pmu;
struct pmu_event *pe;
int ret = -EINVAL;
int i, j;
- if (!map)
- return 0;
-
- for (i = 0; ; i++) {
- pe = &map->table[i];
+ pmu = NULL;
+ while ((pmu = perf_pmu__scan(pmu)) != NULL) {
+ map = perf_pmu__find_map(pmu);
- if (!pe->name && !pe->metric_group && !pe->metric_name)
- break;
- if (!pe->metric_expr)
+ if (!map)
continue;
- if (match_metric(pe->metric_group, metric) ||
- match_metric(pe->metric_name, metric)) {
- const char **ids;
- int idnum;
- struct egroup *eg;
- bool no_group = false;
- pr_debug("metric expr %s for %s\n", pe->metric_expr, pe->metric_name);
+ for (i = 0; ; i++) {
+ pe = &map->table[i];
- if (expr__find_other(pe->metric_expr,
- NULL, &ids, &idnum) < 0)
+ if (pe->socname && soc_version_check(pe->socname))
continue;
- if (events->len > 0)
- strbuf_addf(events, ",");
- for (j = 0; j < idnum; j++) {
- pr_debug("found event %s\n", ids[j]);
- /*
- * Duration time maps to a software event and can make
- * groups not count. Always use it outside a
- * group.
- */
- if (!strcmp(ids[j], "duration_time")) {
- if (j > 0)
- strbuf_addf(events, "}:W,");
- strbuf_addf(events, "duration_time");
- no_group = true;
+ if (!pe->name && !pe->metric_group && !pe->metric_name)
+ break;
+ if (!pe->metric_expr)
+ continue;
+ if (match_metric(pe->metric_group, metric) ||
+ match_metric(pe->metric_name, metric)) {
+ const char **ids;
+ int idnum;
+ struct egroup *eg;
+ bool no_group = false;
+
+ pr_debug("metric expr %s for %s\n", pe->metric_expr, pe->metric_name);
+
+ if (expr__find_other(pe->metric_expr,
+ NULL, &ids, &idnum) < 0)
continue;
+ if (events->len > 0)
+ strbuf_addf(events, ",");
+ for (j = 0; j < idnum; j++) {
+ pr_debug("found event %s\n", ids[j]);
+ /*
+ * Duration time maps to a software event and can make
+ * groups not count. Always use it outside a
+ * group.
+ */
+ if (!strcmp(ids[j], "duration_time")) {
+ if (j > 0)
+ strbuf_addf(events, "}:W,");
+ strbuf_addf(events, "duration_time");
+ no_group = true;
+ continue;
+ }
+ strbuf_addf(events, "%s%s",
+ j == 0 || no_group ? "{" : ",",
+ ids[j]);
+ no_group = false;
}
- strbuf_addf(events, "%s%s",
- j == 0 || no_group ? "{" : ",",
- ids[j]);
- no_group = false;
- }
- if (!no_group)
- strbuf_addf(events, "}:W");
+ if (!no_group)
+ strbuf_addf(events, "}:W");
- eg = malloc(sizeof(struct egroup));
- if (!eg) {
- ret = -ENOMEM;
- break;
+ eg = malloc(sizeof(struct egroup));
+ if (!eg) {
+ ret = -ENOMEM;
+ return ret;
+ }
+ eg->ids = ids;
+ eg->idnum = idnum;
+ eg->metric_name = pe->metric_name;
+ eg->metric_expr = pe->metric_expr;
+ eg->metric_unit = pe->unit;
+ list_add_tail(&eg->nd, group_list);
+ ret = 0;
}
- eg->ids = ids;
- eg->idnum = idnum;
- eg->metric_name = pe->metric_name;
- eg->metric_expr = pe->metric_expr;
- eg->metric_unit = pe->unit;
- list_add_tail(&eg->nd, group_list);
- ret = 0;
}
+ if (ret == 0)
+ return ret;
}
return ret;
}
@@ -528,6 +547,7 @@ int metricgroup__parse_groups(const struct option *opt,
ret = metricgroup__add_metric_list(str, &extra_events, &group_list);
if (ret)
return ret;
+
pr_debug("adding %s\n", extra_events.buf);
memset(&parse_error, 0, sizeof(struct parse_events_error));
ret = parse_events(perf_evlist, extra_events.buf, &parse_error);
@@ -545,22 +565,30 @@ out:
bool metricgroup__has_metric(const char *metric)
{
- struct pmu_events_map *map = perf_pmu__find_map(NULL);
+ struct pmu_events_map *map;
+ struct perf_pmu *pmu;
struct pmu_event *pe;
int i;
- if (!map)
- return false;
-
- for (i = 0; ; i++) {
- pe = &map->table[i];
+ pmu = NULL;
+ while ((pmu = perf_pmu__scan(pmu)) != NULL) {
+ map = perf_pmu__find_map(pmu);
- if (!pe->name && !pe->metric_group && !pe->metric_name)
- break;
- if (!pe->metric_expr)
+ if (!map)
continue;
- if (match_metric(pe->metric_name, metric))
- return true;
+
+ for (i = 0; ; i++) {
+ pe = &map->table[i];
+
+ if (pe->socname && soc_version_check(pe->socname))
+ continue;
+ if (!pe->name && !pe->metric_group && !pe->metric_name)
+ break;
+ if (!pe->metric_expr)
+ continue;
+ if (match_metric(pe->metric_name, metric))
+ return true;
+ }
}
return false;
}