]> Pileus Git - ~andy/linux/blobdiff - arch/powerpc/perf/core-fsl-emb.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth
[~andy/linux] / arch / powerpc / perf / core-fsl-emb.c
index 106c533546758280ae59da38ce45a2c88a7f49b5..d35ae52c69dca3a20fb96e5dcb9fccc05bd5a54d 100644 (file)
@@ -70,6 +70,12 @@ static unsigned long read_pmc(int idx)
        case 3:
                val = mfpmr(PMRN_PMC3);
                break;
+       case 4:
+               val = mfpmr(PMRN_PMC4);
+               break;
+       case 5:
+               val = mfpmr(PMRN_PMC5);
+               break;
        default:
                printk(KERN_ERR "oops trying to read PMC%d\n", idx);
                val = 0;
@@ -95,6 +101,12 @@ static void write_pmc(int idx, unsigned long val)
        case 3:
                mtpmr(PMRN_PMC3, val);
                break;
+       case 4:
+               mtpmr(PMRN_PMC4, val);
+               break;
+       case 5:
+               mtpmr(PMRN_PMC5, val);
+               break;
        default:
                printk(KERN_ERR "oops trying to write PMC%d\n", idx);
        }
@@ -120,6 +132,12 @@ static void write_pmlca(int idx, unsigned long val)
        case 3:
                mtpmr(PMRN_PMLCA3, val);
                break;
+       case 4:
+               mtpmr(PMRN_PMLCA4, val);
+               break;
+       case 5:
+               mtpmr(PMRN_PMLCA5, val);
+               break;
        default:
                printk(KERN_ERR "oops trying to write PMLCA%d\n", idx);
        }
@@ -145,6 +163,12 @@ static void write_pmlcb(int idx, unsigned long val)
        case 3:
                mtpmr(PMRN_PMLCB3, val);
                break;
+       case 4:
+               mtpmr(PMRN_PMLCB4, val);
+               break;
+       case 5:
+               mtpmr(PMRN_PMLCB5, val);
+               break;
        default:
                printk(KERN_ERR "oops trying to write PMLCB%d\n", idx);
        }
@@ -462,6 +486,12 @@ static int fsl_emb_pmu_event_init(struct perf_event *event)
        int num_restricted;
        int i;
 
+       if (ppmu->n_counter > MAX_HWEVENTS) {
+               WARN(1, "No. of perf counters (%d) is higher than max array size(%d)\n",
+                       ppmu->n_counter, MAX_HWEVENTS);
+               ppmu->n_counter = MAX_HWEVENTS;
+       }
+
        switch (event->attr.type) {
        case PERF_TYPE_HARDWARE:
                ev = event->attr.config;