diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2013-04-25 15:28:22 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-04-26 02:11:06 -0400 |
commit | 240686c1368775b5dc80aae863301189b25f9bfa (patch) | |
tree | ff231854aed343e77fce506d9c93479861971be9 /arch | |
parent | 959c9bdd5828981d3d226873aba930019798fa65 (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.h | 6 | ||||
-rw-r--r-- | arch/powerpc/kernel/cpu_setup_power.S | 21 |
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 |
142 | 1: blr | 146 | 1: 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 | ||