|
@@ -77,6 +77,16 @@ EXPORT_SYMBOL_GPL(perf_num_counters);
|
|
|
|
|
|
#define CACHE_OP_UNSUPPORTED 0xFFFF
|
|
|
|
|
|
+#define PERF_MAP_ALL_UNSUPPORTED \
|
|
|
+ [0 ... PERF_COUNT_HW_MAX - 1] = HW_OP_UNSUPPORTED
|
|
|
+
|
|
|
+#define PERF_CACHE_MAP_ALL_UNSUPPORTED \
|
|
|
+[0 ... C(MAX) - 1] = { \
|
|
|
+ [0 ... C(OP_MAX) - 1] = { \
|
|
|
+ [0 ... C(RESULT_MAX) - 1] = CACHE_OP_UNSUPPORTED, \
|
|
|
+ }, \
|
|
|
+}
|
|
|
+
|
|
|
static int
|
|
|
armpmu_map_cache_event(const unsigned (*cache_map)
|
|
|
[PERF_COUNT_HW_CACHE_MAX]
|
|
@@ -700,118 +710,28 @@ enum armv8_pmuv3_perf_types {
|
|
|
|
|
|
/* PMUv3 HW events mapping. */
|
|
|
static const unsigned armv8_pmuv3_perf_map[PERF_COUNT_HW_MAX] = {
|
|
|
+ PERF_MAP_ALL_UNSUPPORTED,
|
|
|
[PERF_COUNT_HW_CPU_CYCLES] = ARMV8_PMUV3_PERFCTR_CLOCK_CYCLES,
|
|
|
[PERF_COUNT_HW_INSTRUCTIONS] = ARMV8_PMUV3_PERFCTR_INSTR_EXECUTED,
|
|
|
[PERF_COUNT_HW_CACHE_REFERENCES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS,
|
|
|
[PERF_COUNT_HW_CACHE_MISSES] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL,
|
|
|
- [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = HW_OP_UNSUPPORTED,
|
|
|
[PERF_COUNT_HW_BRANCH_MISSES] = ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED,
|
|
|
- [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED,
|
|
|
- [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = HW_OP_UNSUPPORTED,
|
|
|
- [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = HW_OP_UNSUPPORTED,
|
|
|
};
|
|
|
|
|
|
static const unsigned armv8_pmuv3_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
|
|
|
[PERF_COUNT_HW_CACHE_OP_MAX]
|
|
|
[PERF_COUNT_HW_CACHE_RESULT_MAX] = {
|
|
|
- [C(L1D)] = {
|
|
|
- [C(OP_READ)] = {
|
|
|
- [C(RESULT_ACCESS)] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS,
|
|
|
- [C(RESULT_MISS)] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL,
|
|
|
- },
|
|
|
- [C(OP_WRITE)] = {
|
|
|
- [C(RESULT_ACCESS)] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS,
|
|
|
- [C(RESULT_MISS)] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL,
|
|
|
- },
|
|
|
- [C(OP_PREFETCH)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- },
|
|
|
- [C(L1I)] = {
|
|
|
- [C(OP_READ)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_WRITE)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_PREFETCH)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- },
|
|
|
- [C(LL)] = {
|
|
|
- [C(OP_READ)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_WRITE)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_PREFETCH)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- },
|
|
|
- [C(DTLB)] = {
|
|
|
- [C(OP_READ)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_WRITE)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_PREFETCH)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- },
|
|
|
- [C(ITLB)] = {
|
|
|
- [C(OP_READ)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_WRITE)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_PREFETCH)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- },
|
|
|
- [C(BPU)] = {
|
|
|
- [C(OP_READ)] = {
|
|
|
- [C(RESULT_ACCESS)] = ARMV8_PMUV3_PERFCTR_PC_BRANCH_PRED,
|
|
|
- [C(RESULT_MISS)] = ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED,
|
|
|
- },
|
|
|
- [C(OP_WRITE)] = {
|
|
|
- [C(RESULT_ACCESS)] = ARMV8_PMUV3_PERFCTR_PC_BRANCH_PRED,
|
|
|
- [C(RESULT_MISS)] = ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED,
|
|
|
- },
|
|
|
- [C(OP_PREFETCH)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- },
|
|
|
- [C(NODE)] = {
|
|
|
- [C(OP_READ)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_WRITE)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- [C(OP_PREFETCH)] = {
|
|
|
- [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
|
|
|
- },
|
|
|
- },
|
|
|
+ PERF_CACHE_MAP_ALL_UNSUPPORTED,
|
|
|
+
|
|
|
+ [C(L1D)][C(OP_READ)][C(RESULT_ACCESS)] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS,
|
|
|
+ [C(L1D)][C(OP_READ)][C(RESULT_MISS)] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL,
|
|
|
+ [C(L1D)][C(OP_WRITE)][C(RESULT_ACCESS)] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_ACCESS,
|
|
|
+ [C(L1D)][C(OP_WRITE)][C(RESULT_MISS)] = ARMV8_PMUV3_PERFCTR_L1_DCACHE_REFILL,
|
|
|
+
|
|
|
+ [C(BPU)][C(OP_READ)][C(RESULT_ACCESS)] = ARMV8_PMUV3_PERFCTR_PC_BRANCH_PRED,
|
|
|
+ [C(BPU)][C(OP_READ)][C(RESULT_MISS)] = ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED,
|
|
|
+ [C(BPU)][C(OP_WRITE)][C(RESULT_ACCESS)] = ARMV8_PMUV3_PERFCTR_PC_BRANCH_PRED,
|
|
|
+ [C(BPU)][C(OP_WRITE)][C(RESULT_MISS)] = ARMV8_PMUV3_PERFCTR_PC_BRANCH_MIS_PRED,
|
|
|
};
|
|
|
|
|
|
/*
|