|
|
@@ -117,22 +117,39 @@ static __initconst const u64 amd_hw_cache_event_ids
|
|
|
};
|
|
|
|
|
|
/*
|
|
|
- * AMD Performance Monitor K7 and later.
|
|
|
+ * AMD Performance Monitor K7 and later, up to and including Family 16h:
|
|
|
*/
|
|
|
static const u64 amd_perfmon_event_map[PERF_COUNT_HW_MAX] =
|
|
|
{
|
|
|
- [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,
|
|
|
- [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
|
|
|
- [PERF_COUNT_HW_CACHE_REFERENCES] = 0x077d,
|
|
|
- [PERF_COUNT_HW_CACHE_MISSES] = 0x077e,
|
|
|
- [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c2,
|
|
|
- [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c3,
|
|
|
- [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = 0x00d0, /* "Decoder empty" event */
|
|
|
- [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = 0x00d1, /* "Dispatch stalls" event */
|
|
|
+ [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,
|
|
|
+ [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
|
|
|
+ [PERF_COUNT_HW_CACHE_REFERENCES] = 0x077d,
|
|
|
+ [PERF_COUNT_HW_CACHE_MISSES] = 0x077e,
|
|
|
+ [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c2,
|
|
|
+ [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c3,
|
|
|
+ [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = 0x00d0, /* "Decoder empty" event */
|
|
|
+ [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = 0x00d1, /* "Dispatch stalls" event */
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * AMD Performance Monitor Family 17h and later:
|
|
|
+ */
|
|
|
+static const u64 amd_f17h_perfmon_event_map[PERF_COUNT_HW_MAX] =
|
|
|
+{
|
|
|
+ [PERF_COUNT_HW_CPU_CYCLES] = 0x0076,
|
|
|
+ [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0,
|
|
|
+ [PERF_COUNT_HW_CACHE_REFERENCES] = 0xff60,
|
|
|
+ [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c2,
|
|
|
+ [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c3,
|
|
|
+ [PERF_COUNT_HW_STALLED_CYCLES_FRONTEND] = 0x0287,
|
|
|
+ [PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = 0x0187,
|
|
|
};
|
|
|
|
|
|
static u64 amd_pmu_event_map(int hw_event)
|
|
|
{
|
|
|
+ if (boot_cpu_data.x86 >= 0x17)
|
|
|
+ return amd_f17h_perfmon_event_map[hw_event];
|
|
|
+
|
|
|
return amd_perfmon_event_map[hw_event];
|
|
|
}
|
|
|
|