aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2013-04-25 15:28:22 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-04-26 02:11:06 -0400
commit240686c1368775b5dc80aae863301189b25f9bfa (patch)
treeff231854aed343e77fce506d9c93479861971be9 /arch
parent959c9bdd5828981d3d226873aba930019798fa65 (diff)
powerpc: Initialise PMU related regs on Power8
For both HV and guest kernels, intialise PMU regs to something sane. Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Acked-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/include/asm/reg.h6
-rw-r--r--arch/powerpc/kernel/cpu_setup_power.S21
2 files changed, 26 insertions, 1 deletions
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
index 4ae2d446dedb..5735ebbd5888 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -271,6 +271,7 @@
271#define SPRN_HFSCR 0xbe /* HV=1 Facility Status & Control Register */ 271#define SPRN_HFSCR 0xbe /* HV=1 Facility Status & Control Register */
272#define HFSCR_TAR (1 << (63-55)) /* Enable Target Address Register */ 272#define HFSCR_TAR (1 << (63-55)) /* Enable Target Address Register */
273#define HFSCR_TM (1 << (63-58)) /* Enable Transactional Memory */ 273#define HFSCR_TM (1 << (63-58)) /* Enable Transactional Memory */
274#define HFSCR_PM (1 << (63-60)) /* Enable prob/priv access to PMU SPRs */
274#define HFSCR_DSCR (1 << (63-61)) /* Enable Data Stream Control Register */ 275#define HFSCR_DSCR (1 << (63-61)) /* Enable Data Stream Control Register */
275#define HFSCR_VECVSX (1 << (63-62)) /* Enable VMX/VSX */ 276#define HFSCR_VECVSX (1 << (63-62)) /* Enable VMX/VSX */
276#define HFSCR_FP (1 << (63-63)) /* Enable Floating Point */ 277#define HFSCR_FP (1 << (63-63)) /* Enable Floating Point */
@@ -637,6 +638,7 @@
637#define MMCR0_FCWAIT 0x00000002UL /* freeze counter in WAIT state */ 638#define MMCR0_FCWAIT 0x00000002UL /* freeze counter in WAIT state */
638#define MMCR0_FCHV 0x00000001UL /* freeze conditions in hypervisor mode */ 639#define MMCR0_FCHV 0x00000001UL /* freeze conditions in hypervisor mode */
639#define SPRN_MMCR1 798 640#define SPRN_MMCR1 798
641#define SPRN_MMCR2 769
640#define SPRN_MMCRA 0x312 642#define SPRN_MMCRA 0x312
641#define MMCRA_SDSYNC 0x80000000UL /* SDAR synced with SIAR */ 643#define MMCRA_SDSYNC 0x80000000UL /* SDAR synced with SIAR */
642#define MMCRA_SDAR_DCACHE_MISS 0x40000000UL 644#define MMCRA_SDAR_DCACHE_MISS 0x40000000UL
@@ -655,6 +657,10 @@
655#define POWER7P_MMCRA_SIAR_VALID 0x10000000 /* P7+ SIAR contents valid */ 657#define POWER7P_MMCRA_SIAR_VALID 0x10000000 /* P7+ SIAR contents valid */
656#define POWER7P_MMCRA_SDAR_VALID 0x08000000 /* P7+ SDAR contents valid */ 658#define POWER7P_MMCRA_SDAR_VALID 0x08000000 /* P7+ SDAR contents valid */
657 659
660#define SPRN_MMCRH 316 /* Hypervisor monitor mode control register */
661#define SPRN_MMCRS 894 /* Supervisor monitor mode control register */
662#define SPRN_MMCRC 851 /* Core monitor mode control register */
663
658#define SPRN_PMC1 787 664#define SPRN_PMC1 787
659#define SPRN_PMC2 788 665#define SPRN_PMC2 788
660#define SPRN_PMC3 789 666#define SPRN_PMC3 789
diff --git a/arch/powerpc/kernel/cpu_setup_power.S b/arch/powerpc/kernel/cpu_setup_power.S
index 4daa5b799010..e0c419b8d65b 100644
--- a/arch/powerpc/kernel/cpu_setup_power.S
+++ b/arch/powerpc/kernel/cpu_setup_power.S
@@ -49,6 +49,7 @@ _GLOBAL(__restore_cpu_power7)
49_GLOBAL(__setup_cpu_power8) 49_GLOBAL(__setup_cpu_power8)
50 mflr r11 50 mflr r11
51 bl __init_FSCR 51 bl __init_FSCR
52 bl __init_PMU
52 bl __init_hvmode_206 53 bl __init_hvmode_206
53 mtlr r11 54 mtlr r11
54 beqlr 55 beqlr
@@ -59,12 +60,14 @@ _GLOBAL(__setup_cpu_power8)
59 bl __init_LPCR 60 bl __init_LPCR
60 bl __init_HFSCR 61 bl __init_HFSCR
61 bl __init_TLB 62 bl __init_TLB
63 bl __init_PMU_HV
62 mtlr r11 64 mtlr r11
63 blr 65 blr
64 66
65_GLOBAL(__restore_cpu_power8) 67_GLOBAL(__restore_cpu_power8)
66 mflr r11 68 mflr r11
67 bl __init_FSCR 69 bl __init_FSCR
70 bl __init_PMU
68 mfmsr r3 71 mfmsr r3
69 rldicl. r0,r3,4,63 72 rldicl. r0,r3,4,63
70 mtlr r11 73 mtlr r11
@@ -76,6 +79,7 @@ _GLOBAL(__restore_cpu_power8)
76 bl __init_LPCR 79 bl __init_LPCR
77 bl __init_HFSCR 80 bl __init_HFSCR
78 bl __init_TLB 81 bl __init_TLB
82 bl __init_PMU_HV
79 mtlr r11 83 mtlr r11
80 blr 84 blr
81 85
@@ -125,7 +129,7 @@ __init_FSCR:
125 129
126__init_HFSCR: 130__init_HFSCR:
127 mfspr r3,SPRN_HFSCR 131 mfspr r3,SPRN_HFSCR
128 ori r3,r3,HFSCR_TAR|HFSCR_TM|HFSCR_DSCR|HFSCR_VECVSX|HFSCR_FP 132 ori r3,r3,HFSCR_TAR|HFSCR_TM|HFSCR_DSCR|HFSCR_VECVSX|HFSCR_FP|HFSCR_PM
129 mtspr SPRN_HFSCR,r3 133 mtspr SPRN_HFSCR,r3
130 blr 134 blr
131 135
@@ -140,3 +144,18 @@ __init_TLB:
140 bdnz 2b 144 bdnz 2b
141 ptesync 145 ptesync
1421: blr 1461: blr
147
148__init_PMU_HV:
149 li r5,0
150 mtspr SPRN_MMCRC,r5
151 mtspr SPRN_MMCRH,r5
152 blr
153
154__init_PMU:
155 li r5,0
156 mtspr SPRN_MMCRS,r5
157 mtspr SPRN_MMCRA,r5
158 mtspr SPRN_MMCR0,r5
159 mtspr SPRN_MMCR1,r5
160 mtspr SPRN_MMCR2,r5
161 blr