aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/reg.h1
-rw-r--r--arch/powerpc/perf/core-book3s.c5
-rw-r--r--arch/powerpc/perf/power8-pmu.c4
3 files changed, 8 insertions, 2 deletions
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
index 4a9e408644fe..362142b69d5b 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -626,6 +626,7 @@
626#define MMCR0_TRIGGER 0x00002000UL /* TRIGGER enable */ 626#define MMCR0_TRIGGER 0x00002000UL /* TRIGGER enable */
627#define MMCR0_PMAO 0x00000080UL /* performance monitor alert has occurred, set to 0 after handling exception */ 627#define MMCR0_PMAO 0x00000080UL /* performance monitor alert has occurred, set to 0 after handling exception */
628#define MMCR0_SHRFC 0x00000040UL /* SHRre freeze conditions between threads */ 628#define MMCR0_SHRFC 0x00000040UL /* SHRre freeze conditions between threads */
629#define MMCR0_FC56 0x00000010UL /* freeze counters 5 and 6 */
629#define MMCR0_FCTI 0x00000008UL /* freeze counters in tags inactive mode */ 630#define MMCR0_FCTI 0x00000008UL /* freeze counters in tags inactive mode */
630#define MMCR0_FCTA 0x00000004UL /* freeze counters in tags active mode */ 631#define MMCR0_FCTA 0x00000004UL /* freeze counters in tags active mode */
631#define MMCR0_FCWAIT 0x00000002UL /* freeze counter in WAIT state */ 632#define MMCR0_FCWAIT 0x00000002UL /* freeze counter in WAIT state */
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index 1ab306815ff3..3d566ee896e2 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -75,6 +75,7 @@ static unsigned int freeze_events_kernel = MMCR0_FCS;
75 75
76#define MMCR0_FCHV 0 76#define MMCR0_FCHV 0
77#define MMCR0_PMCjCE MMCR0_PMCnCE 77#define MMCR0_PMCjCE MMCR0_PMCnCE
78#define MMCR0_FC56 0
78#define MMCR0_PMAO 0 79#define MMCR0_PMAO 0
79 80
80#define SPRN_MMCRA SPRN_MMCR2 81#define SPRN_MMCRA SPRN_MMCR2
@@ -870,11 +871,11 @@ static void power_pmu_disable(struct pmu *pmu)
870 } 871 }
871 872
872 /* 873 /*
873 * Set the 'freeze counters' bit, clear PMAO. 874 * Set the 'freeze counters' bit, clear PMAO/FC56.
874 */ 875 */
875 val = mfspr(SPRN_MMCR0); 876 val = mfspr(SPRN_MMCR0);
876 val |= MMCR0_FC; 877 val |= MMCR0_FC;
877 val &= ~MMCR0_PMAO; 878 val &= ~(MMCR0_PMAO | MMCR0_FC56);
878 879
879 /* 880 /*
880 * The barrier is to make sure the mtspr has been 881 * The barrier is to make sure the mtspr has been
diff --git a/arch/powerpc/perf/power8-pmu.c b/arch/powerpc/perf/power8-pmu.c
index 84cdc6d892e3..d59f5b2d4c2f 100644
--- a/arch/powerpc/perf/power8-pmu.c
+++ b/arch/powerpc/perf/power8-pmu.c
@@ -391,6 +391,10 @@ static int power8_compute_mmcr(u64 event[], int n_ev,
391 if (pmc_inuse & 0x7c) 391 if (pmc_inuse & 0x7c)
392 mmcr[0] |= MMCR0_PMCjCE; 392 mmcr[0] |= MMCR0_PMCjCE;
393 393
394 /* If we're not using PMC 5 or 6, freeze them */
395 if (!(pmc_inuse & 0x60))
396 mmcr[0] |= MMCR0_FC56;
397
394 mmcr[1] = mmcr1; 398 mmcr[1] = mmcr1;
395 mmcr[2] = mmcra; 399 mmcr[2] = mmcra;
396 400