aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Rutland <mark.rutland@arm.com>2012-12-19 11:33:24 -0500
committerWill Deacon <will.deacon@arm.com>2014-07-02 10:48:25 -0400
commit3d1ff755e36705ad9ec96f740edc08d20c3e9a87 (patch)
treefa383e35e84c16d07d4b535e7bb989ba0f4791e0
parentf929f5759f7e4dded314c23ad2b3b8abb5f35c4f (diff)
arm: perf: clean up PMU names
The perf userspace tools can't handle dashes or spaces in PMU names, which conflicts with the current naming scheme in the arm perf backend. This prevents these PMUs from being accessed by name from the perf tools. Additionally the ARMv6 pmus are named "v6", which does not fully distinguish them in the sys/bus/event_source namespace. This patch renames the PMUs consistently to a lower case form with underscores, e.g. "armv6_1176", "armv7_cortex_a9". This is both readily accepted by today's perf tool, and far easier to type than the (apparently unused) convention in use previously. The OProfile name conversion code is updated to handle this. Due to a copy-paste error involving two "xscale1" entries, "xscale2" has never been matched by the name OProfile name mapping. While we're updating names, this is corrected. Acked-by: Will Deacon <will.deacon@arm.com> Tested-by: Christopher Covington <cov@codeaurora.org> Signed-off-by: Mark Rutland <mark.rutland@arm.com> [sachin: fixed missing semicolons in armv6 backend] Signed-off-by: Sachin Kamat <sachin.kamat@samsung.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
-rw-r--r--arch/arm/kernel/perf_event_cpu.c10
-rw-r--r--arch/arm/kernel/perf_event_v6.c36
-rw-r--r--arch/arm/kernel/perf_event_v7.c16
-rw-r--r--arch/arm/kernel/perf_event_xscale.c4
-rw-r--r--arch/arm/oprofile/common.c14
5 files changed, 57 insertions, 23 deletions
diff --git a/arch/arm/kernel/perf_event_cpu.c b/arch/arm/kernel/perf_event_cpu.c
index af9e35e8836f..191aff0295c3 100644
--- a/arch/arm/kernel/perf_event_cpu.c
+++ b/arch/arm/kernel/perf_event_cpu.c
@@ -233,8 +233,8 @@ static struct of_device_id cpu_pmu_of_device_ids[] = {
233 {.compatible = "arm,cortex-a7-pmu", .data = armv7_a7_pmu_init}, 233 {.compatible = "arm,cortex-a7-pmu", .data = armv7_a7_pmu_init},
234 {.compatible = "arm,cortex-a5-pmu", .data = armv7_a5_pmu_init}, 234 {.compatible = "arm,cortex-a5-pmu", .data = armv7_a5_pmu_init},
235 {.compatible = "arm,arm11mpcore-pmu", .data = armv6mpcore_pmu_init}, 235 {.compatible = "arm,arm11mpcore-pmu", .data = armv6mpcore_pmu_init},
236 {.compatible = "arm,arm1176-pmu", .data = armv6pmu_init}, 236 {.compatible = "arm,arm1176-pmu", .data = armv6_1176_pmu_init},
237 {.compatible = "arm,arm1136-pmu", .data = armv6pmu_init}, 237 {.compatible = "arm,arm1136-pmu", .data = armv6_1136_pmu_init},
238 {.compatible = "qcom,krait-pmu", .data = krait_pmu_init}, 238 {.compatible = "qcom,krait-pmu", .data = krait_pmu_init},
239 {}, 239 {},
240}; 240};
@@ -260,9 +260,13 @@ static int probe_current_pmu(struct arm_pmu *pmu)
260 if (implementor == ARM_CPU_IMP_ARM) { 260 if (implementor == ARM_CPU_IMP_ARM) {
261 switch (part_number) { 261 switch (part_number) {
262 case ARM_CPU_PART_ARM1136: 262 case ARM_CPU_PART_ARM1136:
263 ret = armv6_1136_pmu_init(pmu);
264 break;
263 case ARM_CPU_PART_ARM1156: 265 case ARM_CPU_PART_ARM1156:
266 ret = armv6_1156_pmu_init(pmu);
267 break;
264 case ARM_CPU_PART_ARM1176: 268 case ARM_CPU_PART_ARM1176:
265 ret = armv6pmu_init(pmu); 269 ret = armv6_1176_pmu_init(pmu);
266 break; 270 break;
267 case ARM_CPU_PART_ARM11MPCORE: 271 case ARM_CPU_PART_ARM11MPCORE:
268 ret = armv6mpcore_pmu_init(pmu); 272 ret = armv6mpcore_pmu_init(pmu);
diff --git a/arch/arm/kernel/perf_event_v6.c b/arch/arm/kernel/perf_event_v6.c
index 0fd4290f911f..abfeb04f3213 100644
--- a/arch/arm/kernel/perf_event_v6.c
+++ b/arch/arm/kernel/perf_event_v6.c
@@ -476,9 +476,8 @@ static int armv6_map_event(struct perf_event *event)
476 &armv6_perf_cache_map, 0xFF); 476 &armv6_perf_cache_map, 0xFF);
477} 477}
478 478
479static int armv6pmu_init(struct arm_pmu *cpu_pmu) 479static void armv6pmu_init(struct arm_pmu *cpu_pmu)
480{ 480{
481 cpu_pmu->name = "v6";
482 cpu_pmu->handle_irq = armv6pmu_handle_irq; 481 cpu_pmu->handle_irq = armv6pmu_handle_irq;
483 cpu_pmu->enable = armv6pmu_enable_event; 482 cpu_pmu->enable = armv6pmu_enable_event;
484 cpu_pmu->disable = armv6pmu_disable_event; 483 cpu_pmu->disable = armv6pmu_disable_event;
@@ -490,7 +489,26 @@ static int armv6pmu_init(struct arm_pmu *cpu_pmu)
490 cpu_pmu->map_event = armv6_map_event; 489 cpu_pmu->map_event = armv6_map_event;
491 cpu_pmu->num_events = 3; 490 cpu_pmu->num_events = 3;
492 cpu_pmu->max_period = (1LLU << 32) - 1; 491 cpu_pmu->max_period = (1LLU << 32) - 1;
492}
493
494static int armv6_1136_pmu_init(struct arm_pmu *cpu_pmu)
495{
496 armv6pmu_init(cpu_pmu);
497 cpu_pmu->name = "armv6_1136";
498 return 0;
499}
500
501static int armv6_1156_pmu_init(struct arm_pmu *cpu_pmu)
502{
503 armv6pmu_init(cpu_pmu);
504 cpu_pmu->name = "armv6_1156";
505 return 0;
506}
493 507
508static int armv6_1176_pmu_init(struct arm_pmu *cpu_pmu)
509{
510 armv6pmu_init(cpu_pmu);
511 cpu_pmu->name = "armv6_1176";
494 return 0; 512 return 0;
495} 513}
496 514
@@ -510,7 +528,7 @@ static int armv6mpcore_map_event(struct perf_event *event)
510 528
511static int armv6mpcore_pmu_init(struct arm_pmu *cpu_pmu) 529static int armv6mpcore_pmu_init(struct arm_pmu *cpu_pmu)
512{ 530{
513 cpu_pmu->name = "v6mpcore"; 531 cpu_pmu->name = "armv6_11mpcore";
514 cpu_pmu->handle_irq = armv6pmu_handle_irq; 532 cpu_pmu->handle_irq = armv6pmu_handle_irq;
515 cpu_pmu->enable = armv6pmu_enable_event; 533 cpu_pmu->enable = armv6pmu_enable_event;
516 cpu_pmu->disable = armv6mpcore_pmu_disable_event; 534 cpu_pmu->disable = armv6mpcore_pmu_disable_event;
@@ -526,7 +544,17 @@ static int armv6mpcore_pmu_init(struct arm_pmu *cpu_pmu)
526 return 0; 544 return 0;
527} 545}
528#else 546#else
529static int armv6pmu_init(struct arm_pmu *cpu_pmu) 547static int armv6_1136_pmu_init(struct arm_pmu *cpu_pmu)
548{
549 return -ENODEV;
550}
551
552static int armv6_1156_pmu_init(struct arm_pmu *cpu_pmu)
553{
554 return -ENODEV;
555}
556
557static int armv6_1176_pmu_init(struct arm_pmu *cpu_pmu)
530{ 558{
531 return -ENODEV; 559 return -ENODEV;
532} 560}
diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c
index 871c465d08da..d4129bc06402 100644
--- a/arch/arm/kernel/perf_event_v7.c
+++ b/arch/arm/kernel/perf_event_v7.c
@@ -1008,7 +1008,7 @@ static u32 armv7_read_num_pmnc_events(void)
1008static int armv7_a8_pmu_init(struct arm_pmu *cpu_pmu) 1008static int armv7_a8_pmu_init(struct arm_pmu *cpu_pmu)
1009{ 1009{
1010 armv7pmu_init(cpu_pmu); 1010 armv7pmu_init(cpu_pmu);
1011 cpu_pmu->name = "ARMv7 Cortex-A8"; 1011 cpu_pmu->name = "armv7_cortex_a8";
1012 cpu_pmu->map_event = armv7_a8_map_event; 1012 cpu_pmu->map_event = armv7_a8_map_event;
1013 cpu_pmu->num_events = armv7_read_num_pmnc_events(); 1013 cpu_pmu->num_events = armv7_read_num_pmnc_events();
1014 return 0; 1014 return 0;
@@ -1017,7 +1017,7 @@ static int armv7_a8_pmu_init(struct arm_pmu *cpu_pmu)
1017static int armv7_a9_pmu_init(struct arm_pmu *cpu_pmu) 1017static int armv7_a9_pmu_init(struct arm_pmu *cpu_pmu)
1018{ 1018{
1019 armv7pmu_init(cpu_pmu); 1019 armv7pmu_init(cpu_pmu);
1020 cpu_pmu->name = "ARMv7 Cortex-A9"; 1020 cpu_pmu->name = "armv7_cortex_a9";
1021 cpu_pmu->map_event = armv7_a9_map_event; 1021 cpu_pmu->map_event = armv7_a9_map_event;
1022 cpu_pmu->num_events = armv7_read_num_pmnc_events(); 1022 cpu_pmu->num_events = armv7_read_num_pmnc_events();
1023 return 0; 1023 return 0;
@@ -1026,7 +1026,7 @@ static int armv7_a9_pmu_init(struct arm_pmu *cpu_pmu)
1026static int armv7_a5_pmu_init(struct arm_pmu *cpu_pmu) 1026static int armv7_a5_pmu_init(struct arm_pmu *cpu_pmu)
1027{ 1027{
1028 armv7pmu_init(cpu_pmu); 1028 armv7pmu_init(cpu_pmu);
1029 cpu_pmu->name = "ARMv7 Cortex-A5"; 1029 cpu_pmu->name = "armv7_cortex_a5";
1030 cpu_pmu->map_event = armv7_a5_map_event; 1030 cpu_pmu->map_event = armv7_a5_map_event;
1031 cpu_pmu->num_events = armv7_read_num_pmnc_events(); 1031 cpu_pmu->num_events = armv7_read_num_pmnc_events();
1032 return 0; 1032 return 0;
@@ -1035,7 +1035,7 @@ static int armv7_a5_pmu_init(struct arm_pmu *cpu_pmu)
1035static int armv7_a15_pmu_init(struct arm_pmu *cpu_pmu) 1035static int armv7_a15_pmu_init(struct arm_pmu *cpu_pmu)
1036{ 1036{
1037 armv7pmu_init(cpu_pmu); 1037 armv7pmu_init(cpu_pmu);
1038 cpu_pmu->name = "ARMv7 Cortex-A15"; 1038 cpu_pmu->name = "armv7_cortex_a15";
1039 cpu_pmu->map_event = armv7_a15_map_event; 1039 cpu_pmu->map_event = armv7_a15_map_event;
1040 cpu_pmu->num_events = armv7_read_num_pmnc_events(); 1040 cpu_pmu->num_events = armv7_read_num_pmnc_events();
1041 cpu_pmu->set_event_filter = armv7pmu_set_event_filter; 1041 cpu_pmu->set_event_filter = armv7pmu_set_event_filter;
@@ -1045,7 +1045,7 @@ static int armv7_a15_pmu_init(struct arm_pmu *cpu_pmu)
1045static int armv7_a7_pmu_init(struct arm_pmu *cpu_pmu) 1045static int armv7_a7_pmu_init(struct arm_pmu *cpu_pmu)
1046{ 1046{
1047 armv7pmu_init(cpu_pmu); 1047 armv7pmu_init(cpu_pmu);
1048 cpu_pmu->name = "ARMv7 Cortex-A7"; 1048 cpu_pmu->name = "armv7_cortex_a7";
1049 cpu_pmu->map_event = armv7_a7_map_event; 1049 cpu_pmu->map_event = armv7_a7_map_event;
1050 cpu_pmu->num_events = armv7_read_num_pmnc_events(); 1050 cpu_pmu->num_events = armv7_read_num_pmnc_events();
1051 cpu_pmu->set_event_filter = armv7pmu_set_event_filter; 1051 cpu_pmu->set_event_filter = armv7pmu_set_event_filter;
@@ -1055,7 +1055,7 @@ static int armv7_a7_pmu_init(struct arm_pmu *cpu_pmu)
1055static int armv7_a12_pmu_init(struct arm_pmu *cpu_pmu) 1055static int armv7_a12_pmu_init(struct arm_pmu *cpu_pmu)
1056{ 1056{
1057 armv7pmu_init(cpu_pmu); 1057 armv7pmu_init(cpu_pmu);
1058 cpu_pmu->name = "ARMv7 Cortex-A12"; 1058 cpu_pmu->name = "armv7_cortex_a12";
1059 cpu_pmu->map_event = armv7_a12_map_event; 1059 cpu_pmu->map_event = armv7_a12_map_event;
1060 cpu_pmu->num_events = armv7_read_num_pmnc_events(); 1060 cpu_pmu->num_events = armv7_read_num_pmnc_events();
1061 cpu_pmu->set_event_filter = armv7pmu_set_event_filter; 1061 cpu_pmu->set_event_filter = armv7pmu_set_event_filter;
@@ -1065,7 +1065,7 @@ static int armv7_a12_pmu_init(struct arm_pmu *cpu_pmu)
1065static int armv7_a17_pmu_init(struct arm_pmu *cpu_pmu) 1065static int armv7_a17_pmu_init(struct arm_pmu *cpu_pmu)
1066{ 1066{
1067 armv7_a12_pmu_init(cpu_pmu); 1067 armv7_a12_pmu_init(cpu_pmu);
1068 cpu_pmu->name = "ARMv7 Cortex-A17"; 1068 cpu_pmu->name = "armv7_cortex_a17";
1069 return 0; 1069 return 0;
1070} 1070}
1071 1071
@@ -1444,7 +1444,7 @@ static void krait_pmu_clear_event_idx(struct pmu_hw_events *cpuc,
1444static int krait_pmu_init(struct arm_pmu *cpu_pmu) 1444static int krait_pmu_init(struct arm_pmu *cpu_pmu)
1445{ 1445{
1446 armv7pmu_init(cpu_pmu); 1446 armv7pmu_init(cpu_pmu);
1447 cpu_pmu->name = "ARMv7 Krait"; 1447 cpu_pmu->name = "armv7_krait";
1448 /* Some early versions of Krait don't support PC write events */ 1448 /* Some early versions of Krait don't support PC write events */
1449 if (of_property_read_bool(cpu_pmu->plat_device->dev.of_node, 1449 if (of_property_read_bool(cpu_pmu->plat_device->dev.of_node,
1450 "qcom,no-pc-write")) 1450 "qcom,no-pc-write"))
diff --git a/arch/arm/kernel/perf_event_xscale.c b/arch/arm/kernel/perf_event_xscale.c
index 3d47984d87fe..08da0af550b7 100644
--- a/arch/arm/kernel/perf_event_xscale.c
+++ b/arch/arm/kernel/perf_event_xscale.c
@@ -355,7 +355,7 @@ static int xscale_map_event(struct perf_event *event)
355 355
356static int xscale1pmu_init(struct arm_pmu *cpu_pmu) 356static int xscale1pmu_init(struct arm_pmu *cpu_pmu)
357{ 357{
358 cpu_pmu->name = "xscale1"; 358 cpu_pmu->name = "armv5_xscale1";
359 cpu_pmu->handle_irq = xscale1pmu_handle_irq; 359 cpu_pmu->handle_irq = xscale1pmu_handle_irq;
360 cpu_pmu->enable = xscale1pmu_enable_event; 360 cpu_pmu->enable = xscale1pmu_enable_event;
361 cpu_pmu->disable = xscale1pmu_disable_event; 361 cpu_pmu->disable = xscale1pmu_disable_event;
@@ -725,7 +725,7 @@ static inline void xscale2pmu_write_counter(struct perf_event *event, u32 val)
725 725
726static int xscale2pmu_init(struct arm_pmu *cpu_pmu) 726static int xscale2pmu_init(struct arm_pmu *cpu_pmu)
727{ 727{
728 cpu_pmu->name = "xscale2"; 728 cpu_pmu->name = "armv5_xscale2";
729 cpu_pmu->handle_irq = xscale2pmu_handle_irq; 729 cpu_pmu->handle_irq = xscale2pmu_handle_irq;
730 cpu_pmu->enable = xscale2pmu_enable_event; 730 cpu_pmu->enable = xscale2pmu_enable_event;
731 cpu_pmu->disable = xscale2pmu_disable_event; 731 cpu_pmu->disable = xscale2pmu_disable_event;
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c
index 99c63d4b6af8..6826e3571df9 100644
--- a/arch/arm/oprofile/common.c
+++ b/arch/arm/oprofile/common.c
@@ -33,12 +33,14 @@ static struct op_perf_name {
33 char *perf_name; 33 char *perf_name;
34 char *op_name; 34 char *op_name;
35} op_perf_name_map[] = { 35} op_perf_name_map[] = {
36 { "xscale1", "arm/xscale1" }, 36 { "armv5_xscale1", "arm/xscale1" },
37 { "xscale1", "arm/xscale2" }, 37 { "armv5_xscale2", "arm/xscale2" },
38 { "v6", "arm/armv6" }, 38 { "armv6_1136", "arm/armv6" },
39 { "v6mpcore", "arm/mpcore" }, 39 { "armv6_1156", "arm/armv6" },
40 { "ARMv7 Cortex-A8", "arm/armv7" }, 40 { "armv6_1176", "arm/armv6" },
41 { "ARMv7 Cortex-A9", "arm/armv7-ca9" }, 41 { "armv6_11mpcore", "arm/mpcore" },
42 { "armv7_cortex_a8", "arm/armv7" },
43 { "armv7_cortex_a9", "arm/armv7-ca9" },
42}; 44};
43 45
44char *op_name_from_perf_id(void) 46char *op_name_from_perf_id(void)