diff options
author | Michael Neuling <mikey@neuling.org> | 2014-01-08 05:25:19 -0500 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2014-01-27 10:00:57 -0500 |
commit | eee7ff9d2cc0eaaa00496bdf4193144104c7dc63 (patch) | |
tree | e7aee083afa0cb8f581d314cb816fbb171a1f6c8 | |
parent | 6c85f52b10fd60e45c6e30c5b85d116406bd3c9b (diff) |
KVM: PPC: Book3S HV: Don't set DABR on POWER8
POWER8 doesn't have the DABR and DABRX registers; instead it has
new DAWR/DAWRX registers, which will be handled in a later patch.
Signed-off-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_interrupts.S | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 13 |
2 files changed, 12 insertions, 3 deletions
diff --git a/arch/powerpc/kvm/book3s_hv_interrupts.S b/arch/powerpc/kvm/book3s_hv_interrupts.S index 928142c64cb0..00b7ed41ea17 100644 --- a/arch/powerpc/kvm/book3s_hv_interrupts.S +++ b/arch/powerpc/kvm/book3s_hv_interrupts.S | |||
@@ -57,9 +57,11 @@ BEGIN_FTR_SECTION | |||
57 | std r3, HSTATE_DSCR(r13) | 57 | std r3, HSTATE_DSCR(r13) |
58 | END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) | 58 | END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) |
59 | 59 | ||
60 | BEGIN_FTR_SECTION | ||
60 | /* Save host DABR */ | 61 | /* Save host DABR */ |
61 | mfspr r3, SPRN_DABR | 62 | mfspr r3, SPRN_DABR |
62 | std r3, HSTATE_DABR(r13) | 63 | std r3, HSTATE_DABR(r13) |
64 | END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) | ||
63 | 65 | ||
64 | /* Hard-disable interrupts */ | 66 | /* Hard-disable interrupts */ |
65 | mfmsr r10 | 67 | mfmsr r10 |
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index acbd1d6afba0..66db71c9156a 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | |||
@@ -61,11 +61,13 @@ kvmppc_call_hv_entry: | |||
61 | 61 | ||
62 | /* Back from guest - restore host state and return to caller */ | 62 | /* Back from guest - restore host state and return to caller */ |
63 | 63 | ||
64 | BEGIN_FTR_SECTION | ||
64 | /* Restore host DABR and DABRX */ | 65 | /* Restore host DABR and DABRX */ |
65 | ld r5,HSTATE_DABR(r13) | 66 | ld r5,HSTATE_DABR(r13) |
66 | li r6,7 | 67 | li r6,7 |
67 | mtspr SPRN_DABR,r5 | 68 | mtspr SPRN_DABR,r5 |
68 | mtspr SPRN_DABRX,r6 | 69 | mtspr SPRN_DABRX,r6 |
70 | END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) | ||
69 | 71 | ||
70 | /* Restore SPRG3 */ | 72 | /* Restore SPRG3 */ |
71 | ld r3,PACA_SPRG3(r13) | 73 | ld r3,PACA_SPRG3(r13) |
@@ -284,15 +286,17 @@ kvmppc_hv_entry: | |||
284 | std r0, PPC_LR_STKOFF(r1) | 286 | std r0, PPC_LR_STKOFF(r1) |
285 | stdu r1, -112(r1) | 287 | stdu r1, -112(r1) |
286 | 288 | ||
289 | BEGIN_FTR_SECTION | ||
287 | /* Set partition DABR */ | 290 | /* Set partition DABR */ |
288 | /* Do this before re-enabling PMU to avoid P7 DABR corruption bug */ | 291 | /* Do this before re-enabling PMU to avoid P7 DABR corruption bug */ |
289 | li r5,3 | 292 | li r5,3 |
290 | ld r6,VCPU_DABR(r4) | 293 | ld r6,VCPU_DABR(r4) |
291 | mtspr SPRN_DABRX,r5 | 294 | mtspr SPRN_DABRX,r5 |
292 | mtspr SPRN_DABR,r6 | 295 | mtspr SPRN_DABR,r6 |
293 | BEGIN_FTR_SECTION | 296 | BEGIN_FTR_SECTION_NESTED(89) |
294 | isync | 297 | isync |
295 | END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206) | 298 | END_FTR_SECTION_NESTED(CPU_FTR_ARCH_206, CPU_FTR_ARCH_206, 89) |
299 | END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) | ||
296 | 300 | ||
297 | /* Load guest PMU registers */ | 301 | /* Load guest PMU registers */ |
298 | /* R4 is live here (vcpu pointer) */ | 302 | /* R4 is live here (vcpu pointer) */ |
@@ -1609,6 +1613,9 @@ ignore_hdec: | |||
1609 | b fast_guest_return | 1613 | b fast_guest_return |
1610 | 1614 | ||
1611 | _GLOBAL(kvmppc_h_set_dabr) | 1615 | _GLOBAL(kvmppc_h_set_dabr) |
1616 | BEGIN_FTR_SECTION | ||
1617 | b 2f | ||
1618 | END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) | ||
1612 | std r4,VCPU_DABR(r3) | 1619 | std r4,VCPU_DABR(r3) |
1613 | /* Work around P7 bug where DABR can get corrupted on mtspr */ | 1620 | /* Work around P7 bug where DABR can get corrupted on mtspr */ |
1614 | 1: mtspr SPRN_DABR,r4 | 1621 | 1: mtspr SPRN_DABR,r4 |
@@ -1616,7 +1623,7 @@ _GLOBAL(kvmppc_h_set_dabr) | |||
1616 | cmpd r4, r5 | 1623 | cmpd r4, r5 |
1617 | bne 1b | 1624 | bne 1b |
1618 | isync | 1625 | isync |
1619 | li r3,0 | 1626 | 2: li r3,0 |
1620 | blr | 1627 | blr |
1621 | 1628 | ||
1622 | _GLOBAL(kvmppc_h_cede) | 1629 | _GLOBAL(kvmppc_h_cede) |