diff --git a/tools/perf/util/arm-spe-decoder/arm-spe-decoder.h b/tools/perf/util/arm-spe-decoder/arm-spe-decoder.h index 713d778a4fad4c68c79aa3c5056ccbf949f5b542..83836eb43fdd11632cd1807556806b7d84f9dd02 100644 --- a/tools/perf/util/arm-spe-decoder/arm-spe-decoder.h +++ b/tools/perf/util/arm-spe-decoder/arm-spe-decoder.h @@ -68,20 +68,20 @@ enum arm_spe_neoverse_data_source { }; enum arm_spe_hisi_hip_data_source { - ARM_SPE_HISI_HIP_PEER_CPU = 0, - ARM_SPE_HISI_HIP_PEER_CPU_HITM = 1, - ARM_SPE_HISI_HIP_L3 = 2, - ARM_SPE_HISI_HIP_L3_HITM = 3, - ARM_SPE_HISI_HIP_PEER_CLUSTER = 4, - ARM_SPE_HISI_HIP_PEER_CLUSTER_HITM = 5, - ARM_SPE_HISI_HIP_REMOTE_SOCKET = 6, - ARM_SPE_HISI_HIP_REMOTE_SOCKET_HITM = 7, - ARM_SPE_HISI_HIP_LOCAL = 8, - ARM_SPE_HISI_HIP_REMOTE = 9, - ARM_SPE_HISI_HIP_NC_DEV = 13, - ARM_SPE_HISI_HIP_L2 = 16, - ARM_SPE_HISI_HIP_L2_HITM = 17, - ARM_SPE_HISI_HIP_L1 = 18, + ARM_SPE_HISI_HIP_PEER_CPU = 0, + ARM_SPE_HISI_HIP_PEER_CPU_HITM = 1, + ARM_SPE_HISI_HIP_L3 = 2, + ARM_SPE_HISI_HIP_L3_HITM = 3, + ARM_SPE_HISI_HIP_PEER_CLUSTER = 4, + ARM_SPE_HISI_HIP_PEER_CLUSTER_HITM = 5, + ARM_SPE_HISI_HIP_REMOTE_SOCKET = 6, + ARM_SPE_HISI_HIP_REMOTE_SOCKET_HITM = 7, + ARM_SPE_HISI_HIP_LOCAL_MEM = 8, + ARM_SPE_HISI_HIP_REMOTE_MEM = 9, + ARM_SPE_HISI_HIP_NC_DEV = 13, + ARM_SPE_HISI_HIP_L2 = 16, + ARM_SPE_HISI_HIP_L2_HITM = 17, + ARM_SPE_HISI_HIP_L1 = 18, }; struct arm_spe_record { diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c index dbc437532fb7e3af5ba5ba0ea37bcadd27de63a7..ec6339026aa647e5d8f380103730d3ada36a8825 100644 --- a/tools/perf/util/arm-spe.c +++ b/tools/perf/util/arm-spe.c @@ -416,6 +416,7 @@ static const struct midr_range neoverse_spe[] = { {}, }; + static const struct midr_range hisi_hip_ds_encoding_cpus[] = { MIDR_ALL_VERSIONS(MIDR_HISI_HIP12), {}, @@ -525,38 +526,35 @@ static void arm_spe__synth_data_source_hisi_hip(const struct arm_spe_record *rec { /* Use common synthesis method to handle store operations */ if (record->op & ARM_SPE_OP_ST) { - arm_spe__synth_data_source_generic(record, data_src); + arm_spe__synth_data_source_common(record, data_src); return; } switch (record->source) { case ARM_SPE_HISI_HIP_PEER_CPU: - data_src->mem_lvl = PERF_MEM_LVL_L3 | PERF_MEM_LVL_HIT; - data_src->mem_lvl_num = PERF_MEM_LVLNUM_L3; - data_src->mem_snoop = PERF_MEM_SNOOP_NONE; + data_src->mem_lvl = PERF_MEM_LVL_L2 | PERF_MEM_LVL_HIT; + data_src->mem_lvl_num = PERF_MEM_LVLNUM_L2; data_src->mem_snoopx = PERF_MEM_SNOOPX_PEER; break; case ARM_SPE_HISI_HIP_PEER_CPU_HITM: - data_src->mem_lvl = PERF_MEM_LVL_L3 | PERF_MEM_LVL_HIT; - data_src->mem_lvl_num = PERF_MEM_LVLNUM_L3; + data_src->mem_lvl = PERF_MEM_LVL_L2 | PERF_MEM_LVL_HIT; + data_src->mem_lvl_num = PERF_MEM_LVLNUM_L2; data_src->mem_snoop = PERF_MEM_SNOOP_HITM; data_src->mem_snoopx = PERF_MEM_SNOOPX_PEER; break; case ARM_SPE_HISI_HIP_L3: data_src->mem_lvl = PERF_MEM_LVL_L3 | PERF_MEM_LVL_HIT; data_src->mem_lvl_num = PERF_MEM_LVLNUM_L3; - data_src->mem_snoop = PERF_MEM_SNOOP_NONE; + data_src->mem_snoop = PERF_MEM_SNOOP_HIT; break; case ARM_SPE_HISI_HIP_L3_HITM: data_src->mem_lvl = PERF_MEM_LVL_L3 | PERF_MEM_LVL_HIT; data_src->mem_lvl_num = PERF_MEM_LVLNUM_L3; data_src->mem_snoop = PERF_MEM_SNOOP_HITM; - data_src->mem_snoopx = PERF_MEM_SNOOPX_PEER; break; case ARM_SPE_HISI_HIP_PEER_CLUSTER: data_src->mem_lvl = PERF_MEM_LVL_REM_CCE1 | PERF_MEM_LVL_HIT; data_src->mem_lvl_num = PERF_MEM_LVLNUM_L3; - data_src->mem_snoop = PERF_MEM_SNOOP_NONE; data_src->mem_snoopx = PERF_MEM_SNOOPX_PEER; break; case ARM_SPE_HISI_HIP_PEER_CLUSTER_HITM: @@ -578,15 +576,14 @@ static void arm_spe__synth_data_source_hisi_hip(const struct arm_spe_record *rec data_src->mem_remote = PERF_MEM_REMOTE_REMOTE; data_src->mem_snoopx = PERF_MEM_SNOOPX_PEER; break; - case ARM_SPE_HISI_HIP_LOCAL: + case ARM_SPE_HISI_HIP_LOCAL_MEM: data_src->mem_lvl = PERF_MEM_LVL_LOC_RAM | PERF_MEM_LVL_HIT; data_src->mem_lvl_num = PERF_MEM_LVLNUM_RAM; data_src->mem_snoop = PERF_MEM_SNOOP_NONE; break; - case ARM_SPE_HISI_HIP_REMOTE: + case ARM_SPE_HISI_HIP_REMOTE_MEM: data_src->mem_lvl = PERF_MEM_LVL_REM_RAM1 | PERF_MEM_LVL_HIT; data_src->mem_lvl_num = PERF_MEM_LVLNUM_RAM; - data_src->mem_snoop = PERF_MEM_SNOOP_NONE; data_src->mem_remote = PERF_MEM_REMOTE_REMOTE; break; case ARM_SPE_HISI_HIP_NC_DEV: @@ -603,7 +600,6 @@ static void arm_spe__synth_data_source_hisi_hip(const struct arm_spe_record *rec data_src->mem_lvl = PERF_MEM_LVL_L2 | PERF_MEM_LVL_HIT; data_src->mem_lvl_num = PERF_MEM_LVLNUM_L2; data_src->mem_snoop = PERF_MEM_SNOOP_HITM; - data_src->mem_snoopx = PERF_MEM_SNOOPX_PEER; break; case ARM_SPE_HISI_HIP_L1: data_src->mem_lvl = PERF_MEM_LVL_L1 | PERF_MEM_LVL_HIT; @@ -631,7 +627,7 @@ static u64 arm_spe__synth_data_source(const struct arm_spe_record *record, u64 m if (is_neoverse) arm_spe__synth_data_source_neoverse(record, &data_src); else if (is_hisilicon) - arm_spe__synth_data_source_hisi_hip(record, &data_src); + arm_spe_synth_data_source_hisi_hip(record, &data_src); else arm_spe__synth_data_source_generic(record, &data_src); diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c index 3a2e3687878c1862c64d0f723496a76ceb2f8229..a6996d3e32c01e37703d049cc235fe7abd457bc3 100644 --- a/tools/perf/util/mem-events.c +++ b/tools/perf/util/mem-events.c @@ -586,7 +586,10 @@ do { \ if (lvl & P(LVL, LFB)) stats->ld_fbhit++; if (lvl & P(LVL, L1 )) stats->ld_l1hit++; if (lvl & P(LVL, L2)) { - stats->ld_l2hit++; + if (snoop & P(SNOOP, HITM)) + HITM_INC(lcl_hitm); + else + stats->ld_l2hit++; if (snoopx & P(SNOOPX, PEER)) PEER_INC(lcl_peer);