Commit c2b49a32 authored by Jia Qingtong's avatar Jia Qingtong Committed by Thomas Bogendoerfer

MIPS: perf: Add support for OCTEON III perf events.

According to Hardware Reference Manual, OCTEON III
are mostly same as previous OCTEON models. So just
enable them and extend supported event code.
0x3e and 0x3f still reserved.
Signed-off-by: default avatarJia Qingtong <jiaqingtong97@163.com>
Signed-off-by: default avatarThomas Bogendoerfer <tsbogend@alpha.franken.de>
parent 68324a68
...@@ -1919,19 +1919,22 @@ static const struct mips_perf_event *mipsxx_pmu_map_raw_event(u64 config) ...@@ -1919,19 +1919,22 @@ static const struct mips_perf_event *mipsxx_pmu_map_raw_event(u64 config)
static const struct mips_perf_event *octeon_pmu_map_raw_event(u64 config) static const struct mips_perf_event *octeon_pmu_map_raw_event(u64 config)
{ {
unsigned int raw_id = config & 0xff; unsigned int base_id = config & 0x7f;
unsigned int base_id = raw_id & 0x7f; unsigned int event_max;
raw_event.cntr_mask = CNTR_ALL; raw_event.cntr_mask = CNTR_ALL;
raw_event.event_id = base_id; raw_event.event_id = base_id;
if (current_cpu_type() == CPU_CAVIUM_OCTEON2) { if (current_cpu_type() == CPU_CAVIUM_OCTEON3)
if (base_id > 0x42) event_max = 0x5f;
return ERR_PTR(-EOPNOTSUPP); else if (current_cpu_type() == CPU_CAVIUM_OCTEON2)
} else { event_max = 0x42;
if (base_id > 0x3a) else
return ERR_PTR(-EOPNOTSUPP); event_max = 0x3a;
if (base_id > event_max) {
return ERR_PTR(-EOPNOTSUPP);
} }
switch (base_id) { switch (base_id) {
...@@ -1941,7 +1944,7 @@ static const struct mips_perf_event *octeon_pmu_map_raw_event(u64 config) ...@@ -1941,7 +1944,7 @@ static const struct mips_perf_event *octeon_pmu_map_raw_event(u64 config)
case 0x1f: case 0x1f:
case 0x2f: case 0x2f:
case 0x34: case 0x34:
case 0x3b ... 0x3f: case 0x3e ... 0x3f:
return ERR_PTR(-EOPNOTSUPP); return ERR_PTR(-EOPNOTSUPP);
default: default:
break; break;
...@@ -2077,6 +2080,7 @@ init_hw_perf_events(void) ...@@ -2077,6 +2080,7 @@ init_hw_perf_events(void)
case CPU_CAVIUM_OCTEON: case CPU_CAVIUM_OCTEON:
case CPU_CAVIUM_OCTEON_PLUS: case CPU_CAVIUM_OCTEON_PLUS:
case CPU_CAVIUM_OCTEON2: case CPU_CAVIUM_OCTEON2:
case CPU_CAVIUM_OCTEON3:
mipspmu.name = "octeon"; mipspmu.name = "octeon";
mipspmu.general_event_map = &octeon_event_map; mipspmu.general_event_map = &octeon_event_map;
mipspmu.cache_event_map = &octeon_cache_map; mipspmu.cache_event_map = &octeon_cache_map;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment