diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/Documentation/perf-stat.txt | 2 | ||||
-rw-r--r-- | tools/perf/arch/arm64/util/header.c | 28 | ||||
-rw-r--r-- | tools/perf/builtin-stat.c | 1 | ||||
-rw-r--r-- | tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8dxl-ddr-uncore.json | 609 | ||||
-rw-r--r-- | tools/perf/pmu-events/arch/arm64/arm/cortex-a35/imx8qxp-ddr-uncore.json | 18 | ||||
-rw-r--r-- | tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mm-ddr-uncore.json | 160 | ||||
-rw-r--r-- | tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8mp-ddr-uncore.json | 493 | ||||
-rw-r--r-- | tools/perf/pmu-events/arch/arm64/arm/cortex-a53/imx8qm-ddr-uncore.json | 34 | ||||
-rw-r--r-- | tools/perf/pmu-events/arch/arm64/mapfile.csv | 1 | ||||
-rw-r--r-- | tools/perf/pmu-events/jevents.c | 19 | ||||
-rw-r--r-- | tools/perf/pmu-events/jevents.h | 3 | ||||
-rw-r--r-- | tools/perf/pmu-events/pmu-events.h | 1 | ||||
-rw-r--r-- | tools/perf/util/cs-etm.c | 3 | ||||
-rw-r--r-- | tools/perf/util/cs-etm.h | 3 | ||||
-rw-r--r-- | tools/perf/util/header.c | 9 | ||||
-rw-r--r-- | tools/perf/util/header.h | 2 | ||||
-rw-r--r-- | tools/perf/util/metricgroup.c | 258 |
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; } |