diff options
author | Nicholas Piggin <npiggin@gmail.com> | 2017-04-18 15:12:17 -0400 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2017-05-03 06:45:55 -0400 |
commit | 700b7eadd5625d22b8235fb21259b3d7d564c000 (patch) | |
tree | dfc4d8ea12ce0770a45761adef12fe46194d4622 | |
parent | 6b3d12a948d27977816a15eb48409a298902a548 (diff) |
powerpc/64s: Power9 has no LPCR[VRMASD] field so don't set it
Power9/ISAv3 has no VRMASD field in LPCR, we shouldn't be setting reserved bits,
so don't set them on Power9.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r-- | arch/powerpc/kernel/cpu_setup_power.S | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/arch/powerpc/kernel/cpu_setup_power.S b/arch/powerpc/kernel/cpu_setup_power.S index 1fce4ddd2e6c..10cb2896b2ae 100644 --- a/arch/powerpc/kernel/cpu_setup_power.S +++ b/arch/powerpc/kernel/cpu_setup_power.S | |||
@@ -30,7 +30,7 @@ _GLOBAL(__setup_cpu_power7) | |||
30 | mtspr SPRN_LPID,r0 | 30 | mtspr SPRN_LPID,r0 |
31 | mfspr r3,SPRN_LPCR | 31 | mfspr r3,SPRN_LPCR |
32 | li r4,(LPCR_LPES1 >> LPCR_LPES_SH) | 32 | li r4,(LPCR_LPES1 >> LPCR_LPES_SH) |
33 | bl __init_LPCR | 33 | bl __init_LPCR_ISA206 |
34 | bl __init_tlb_power7 | 34 | bl __init_tlb_power7 |
35 | mtlr r11 | 35 | mtlr r11 |
36 | blr | 36 | blr |
@@ -44,7 +44,7 @@ _GLOBAL(__restore_cpu_power7) | |||
44 | mtspr SPRN_LPID,r0 | 44 | mtspr SPRN_LPID,r0 |
45 | mfspr r3,SPRN_LPCR | 45 | mfspr r3,SPRN_LPCR |
46 | li r4,(LPCR_LPES1 >> LPCR_LPES_SH) | 46 | li r4,(LPCR_LPES1 >> LPCR_LPES_SH) |
47 | bl __init_LPCR | 47 | bl __init_LPCR_ISA206 |
48 | bl __init_tlb_power7 | 48 | bl __init_tlb_power7 |
49 | mtlr r11 | 49 | mtlr r11 |
50 | blr | 50 | blr |
@@ -62,7 +62,7 @@ _GLOBAL(__setup_cpu_power8) | |||
62 | mfspr r3,SPRN_LPCR | 62 | mfspr r3,SPRN_LPCR |
63 | ori r3, r3, LPCR_PECEDH | 63 | ori r3, r3, LPCR_PECEDH |
64 | li r4,0 /* LPES = 0 */ | 64 | li r4,0 /* LPES = 0 */ |
65 | bl __init_LPCR | 65 | bl __init_LPCR_ISA206 |
66 | bl __init_HFSCR | 66 | bl __init_HFSCR |
67 | bl __init_tlb_power8 | 67 | bl __init_tlb_power8 |
68 | bl __init_PMU_HV | 68 | bl __init_PMU_HV |
@@ -84,7 +84,7 @@ _GLOBAL(__restore_cpu_power8) | |||
84 | mfspr r3,SPRN_LPCR | 84 | mfspr r3,SPRN_LPCR |
85 | ori r3, r3, LPCR_PECEDH | 85 | ori r3, r3, LPCR_PECEDH |
86 | li r4,0 /* LPES = 0 */ | 86 | li r4,0 /* LPES = 0 */ |
87 | bl __init_LPCR | 87 | bl __init_LPCR_ISA206 |
88 | bl __init_HFSCR | 88 | bl __init_HFSCR |
89 | bl __init_tlb_power8 | 89 | bl __init_tlb_power8 |
90 | bl __init_PMU_HV | 90 | bl __init_PMU_HV |
@@ -108,7 +108,7 @@ _GLOBAL(__setup_cpu_power9) | |||
108 | LOAD_REG_IMMEDIATE(r4, LPCR_UPRT | LPCR_HR) | 108 | LOAD_REG_IMMEDIATE(r4, LPCR_UPRT | LPCR_HR) |
109 | andc r3, r3, r4 | 109 | andc r3, r3, r4 |
110 | li r4,0 /* LPES = 0 */ | 110 | li r4,0 /* LPES = 0 */ |
111 | bl __init_LPCR | 111 | bl __init_LPCR_ISA300 |
112 | bl __init_HFSCR | 112 | bl __init_HFSCR |
113 | bl __init_tlb_power9 | 113 | bl __init_tlb_power9 |
114 | bl __init_PMU_HV | 114 | bl __init_PMU_HV |
@@ -132,7 +132,7 @@ _GLOBAL(__restore_cpu_power9) | |||
132 | LOAD_REG_IMMEDIATE(r4, LPCR_UPRT | LPCR_HR) | 132 | LOAD_REG_IMMEDIATE(r4, LPCR_UPRT | LPCR_HR) |
133 | andc r3, r3, r4 | 133 | andc r3, r3, r4 |
134 | li r4,0 /* LPES = 0 */ | 134 | li r4,0 /* LPES = 0 */ |
135 | bl __init_LPCR | 135 | bl __init_LPCR_ISA300 |
136 | bl __init_HFSCR | 136 | bl __init_HFSCR |
137 | bl __init_tlb_power9 | 137 | bl __init_tlb_power9 |
138 | bl __init_PMU_HV | 138 | bl __init_PMU_HV |
@@ -150,7 +150,7 @@ __init_hvmode_206: | |||
150 | std r5,CPU_SPEC_FEATURES(r4) | 150 | std r5,CPU_SPEC_FEATURES(r4) |
151 | blr | 151 | blr |
152 | 152 | ||
153 | __init_LPCR: | 153 | __init_LPCR_ISA206: |
154 | /* Setup a sane LPCR: | 154 | /* Setup a sane LPCR: |
155 | * Called with initial LPCR in R3 and desired LPES 2-bit value in R4 | 155 | * Called with initial LPCR in R3 and desired LPES 2-bit value in R4 |
156 | * | 156 | * |
@@ -163,6 +163,11 @@ __init_LPCR: | |||
163 | * | 163 | * |
164 | * Other bits untouched for now | 164 | * Other bits untouched for now |
165 | */ | 165 | */ |
166 | li r5,0x10 | ||
167 | rldimi r3,r5, LPCR_VRMASD_SH, 64-LPCR_VRMASD_SH-5 | ||
168 | |||
169 | /* POWER9 has no VRMASD */ | ||
170 | __init_LPCR_ISA300: | ||
166 | rldimi r3,r4, LPCR_LPES_SH, 64-LPCR_LPES_SH-2 | 171 | rldimi r3,r4, LPCR_LPES_SH, 64-LPCR_LPES_SH-2 |
167 | ori r3,r3,(LPCR_PECE0|LPCR_PECE1|LPCR_PECE2) | 172 | ori r3,r3,(LPCR_PECE0|LPCR_PECE1|LPCR_PECE2) |
168 | li r5,4 | 173 | li r5,4 |
@@ -170,8 +175,6 @@ __init_LPCR: | |||
170 | clrrdi r3,r3,1 /* clear HDICE */ | 175 | clrrdi r3,r3,1 /* clear HDICE */ |
171 | li r5,4 | 176 | li r5,4 |
172 | rldimi r3,r5, LPCR_VC_SH, 0 | 177 | rldimi r3,r5, LPCR_VC_SH, 0 |
173 | li r5,0x10 | ||
174 | rldimi r3,r5, LPCR_VRMASD_SH, 64-LPCR_VRMASD_SH-5 | ||
175 | mtspr SPRN_LPCR,r3 | 178 | mtspr SPRN_LPCR,r3 |
176 | isync | 179 | isync |
177 | blr | 180 | blr |