aboutsummaryrefslogtreecommitdiff
path: root/driver/gator_events_perf_pmu.c
diff options
context:
space:
mode:
authorDrew Richardson <drew.richardson@arm.com>2012-12-14 12:00:00 -0800
committerDrew Richardson <drew.richardson@arm.com>2014-12-19 15:33:02 -0800
commita01058e248133bb7c1ba0238ab380e4fac924e97 (patch)
tree8fc08c126fcb711fc9a2011eb6314c68d429b800 /driver/gator_events_perf_pmu.c
parentb04e8aefeed42f23955e88c7aa1611e49bdf5909 (diff)
gator: Version 5.135.13
Signed-off-by: Drew Richardson <drew.richardson@arm.com>
Diffstat (limited to 'driver/gator_events_perf_pmu.c')
-rw-r--r--driver/gator_events_perf_pmu.c77
1 files changed, 18 insertions, 59 deletions
diff --git a/driver/gator_events_perf_pmu.c b/driver/gator_events_perf_pmu.c
index e025155..ce3a40f 100644
--- a/driver/gator_events_perf_pmu.c
+++ b/driver/gator_events_perf_pmu.c
@@ -45,7 +45,7 @@ static int gator_events_perf_pmu_create_files(struct super_block *sb, struct den
if (i == 0) {
snprintf(buf, sizeof buf, "%s_ccnt", pmnc_name);
} else {
- snprintf(buf, sizeof buf, "%s_cnt%d", pmnc_name, i-1);
+ snprintf(buf, sizeof buf, "%s_cnt%d", pmnc_name, i - 1);
}
dir = gatorfs_mkdir(sb, root, buf);
if (!dir) {
@@ -80,13 +80,13 @@ static void dummy_handler(struct perf_event *event, struct perf_sample_data *dat
// Required as perf_event_create_kernel_counter() requires an overflow handler, even though all we do is poll
}
-static int gator_events_perf_pmu_online(int** buffer)
+static int gator_events_perf_pmu_online(int **buffer)
{
int cnt, len = 0, cpu = smp_processor_id();
// read the counters and toss the invalid data, return zero instead
for (cnt = 0; cnt < pmnc_counters; cnt++) {
- struct perf_event * ev = per_cpu(pevent, cpu)[cnt];
+ struct perf_event *ev = per_cpu(pevent, cpu)[cnt];
if (ev != NULL && ev->state == PERF_EVENT_STATE_ACTIVE) {
ev->pmu->read(ev);
per_cpu(perfPrev, cpu)[cnt] = per_cpu(perfCurr, cpu)[cnt] = local64_read(&ev->count);
@@ -140,7 +140,7 @@ static void gator_events_perf_pmu_online_dispatch(int cpu)
static void gator_events_perf_pmu_offline_dispatch(int cpu)
{
int cnt;
- struct perf_event * pe;
+ struct perf_event *pe;
for (cnt = 0; cnt < pmnc_counters; cnt++) {
pe = NULL;
@@ -177,7 +177,7 @@ static int gator_events_perf_pmu_start(void)
for_each_present_cpu(cpu) {
for (cnt = 0; cnt < pmnc_counters; cnt++) {
per_cpu(pevent, cpu)[cnt] = NULL;
- if (!pmnc_enabled[cnt]) // Skip disabled counters
+ if (!pmnc_enabled[cnt]) // Skip disabled counters
continue;
per_cpu(perfPrev, cpu)[cnt] = 0;
@@ -233,7 +233,7 @@ static int gator_events_perf_pmu_read(int **buffer)
int cpu = smp_processor_id();
for (cnt = 0; cnt < pmnc_counters; cnt++) {
- struct perf_event * ev = per_cpu(pevent, cpu)[cnt];
+ struct perf_event *ev = per_cpu(pevent, cpu)[cnt];
if (ev != NULL && ev->state == PERF_EVENT_STATE_ACTIVE) {
ev->pmu->read(ev);
per_cpu(perfCurr, cpu)[cnt] = local64_read(&ev->count);
@@ -268,62 +268,21 @@ static struct gator_interface gator_events_perf_pmu_interface = {
int gator_events_perf_pmu_init(void)
{
unsigned int cnt;
-
- switch (gator_cpuid()) {
- case ARM1136:
- case ARM1156:
- case ARM1176:
- pmnc_name = "ARM_ARM11";
- pmnc_counters = 3;
- ccnt = 2;
- break;
- case ARM11MPCORE:
- pmnc_name = "ARM_ARM11MPCore";
- pmnc_counters = 3;
- break;
- case CORTEX_A5:
- pmnc_name = "ARM_Cortex-A5";
- pmnc_counters = 2;
- break;
- case CORTEX_A7:
- pmnc_name = "ARM_Cortex-A7";
- pmnc_counters = 4;
- break;
- case CORTEX_A8:
- pmnc_name = "ARM_Cortex-A8";
- pmnc_counters = 4;
- break;
- case CORTEX_A9:
- pmnc_name = "ARM_Cortex-A9";
- pmnc_counters = 6;
- break;
- case CORTEX_A15:
- pmnc_name = "ARM_Cortex-A15";
- pmnc_counters = 6;
- break;
- case SCORPION:
- pmnc_name = "Scorpion";
- pmnc_counters = 4;
- break;
- case SCORPIONMP:
- pmnc_name = "ScorpionMP";
- pmnc_counters = 4;
- break;
- case KRAITSIM:
- case KRAIT:
- pmnc_name = "Krait";
- pmnc_counters = 4;
- break;
- case AARCH64:
- pmnc_name = "ARM_AArch64";
- // Copied from A15, get the correct number
- pmnc_counters = 6;
- break;
- default:
+ const u32 cpuid = gator_cpuid();
+
+ for (cnt = 0; gator_cpus[cnt].cpuid != 0; ++cnt) {
+ if (gator_cpus[cnt].cpuid == cpuid) {
+ pmnc_name = gator_cpus[cnt].pmnc_name;
+ pmnc_counters = gator_cpus[cnt].pmnc_counters;
+ ccnt = gator_cpus[cnt].ccnt;
+ break;
+ }
+ }
+ if (gator_cpus[cnt].cpuid == 0) {
return -1;
}
- pmnc_counters++; // CNT[n] + CCNT
+ pmnc_counters++; // CNT[n] + CCNT
for (cnt = 0; cnt < CNTMAX; cnt++) {
pmnc_enabled[cnt] = 0;