diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-06 13:49:42 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-06 13:49:42 -0400 |
commit | 39eda2aba6be642b71f2e0ad623dcb09fd9d79cf (patch) | |
tree | cd0c8f547847641af73e38aab2478f3119dee490 /arch/powerpc/kvm | |
parent | 2e515bf096c245ba87f20ab4b4ea20f911afaeda (diff) | |
parent | 9f24b0c9ef9b6b1292579c9e2cd7ff07ddc372b7 (diff) |
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
Pull powerpc updates from Ben Herrenschmidt:
"Here's the powerpc batch for this merge window. Some of the
highlights are:
- A bunch of endian fixes ! We don't have full LE support yet in that
release but this contains a lot of fixes all over arch/powerpc to
use the proper accessors, call the firmware with the right endian
mode, etc...
- A few updates to our "powernv" platform (non-virtualized, the one
to run KVM on), among other, support for bridging the P8 LPC bus
for UARTs, support and some EEH fixes.
- Some mpc51xx clock API cleanups in preparation for a clock API
overhaul
- A pile of cleanups of our old math emulation code, including better
support for using it to emulate optional FP instructions on
embedded chips that otherwise have a HW FPU.
- Some infrastructure in selftest, for powerpc now, but could be
generalized, initially used by some tests for our perf instruction
counting code.
- A pile of fixes for hotplug on pseries (that was seriously
bitrotting)
- The usual slew of freescale embedded updates, new boards, 64-bit
hiberation support, e6500 core PMU support, etc..."
* 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (146 commits)
powerpc: Correct FSCR bit definitions
powerpc/xmon: Fix printing of set of CPUs in xmon
powerpc/pseries: Move lparcfg.c to platforms/pseries
powerpc/powernv: Return secondary CPUs to firmware on kexec
powerpc/btext: Fix CONFIG_PPC_EARLY_DEBUG_BOOTX on ppc32
powerpc: Cleanup handling of the DSCR bit in the FSCR register
powerpc/pseries: Child nodes are not detached by dlpar_detach_node
powerpc/pseries: Add mising of_node_put in delete_dt_node
powerpc/pseries: Make dlpar_configure_connector parent node aware
powerpc/pseries: Do all node initialization in dlpar_parse_cc_node
powerpc/pseries: Fix parsing of initial node path in update_dt_node
powerpc/pseries: Pack update_props_workarea to map correctly to rtas buffer header
powerpc/pseries: Fix over writing of rtas return code in update_dt_node
powerpc/pseries: Fix creation of loop in device node property list
powerpc: Skip emulating & leave interrupts off for kernel program checks
powerpc: Add more exception trampolines for hypervisor exceptions
powerpc: Fix location and rename exception trampolines
powerpc: Add more trap names to xmon
powerpc/pseries: Add a warning in the case of cross-cpu VPA registration
powerpc: Update the 00-Index in Documentation/powerpc
...
Diffstat (limited to 'arch/powerpc/kvm')
-rw-r--r-- | arch/powerpc/kvm/book3s_64_slb.S | 4 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_rm_mmu.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 12 | ||||
-rw-r--r-- | arch/powerpc/kvm/emulate.c | 45 |
5 files changed, 22 insertions, 45 deletions
diff --git a/arch/powerpc/kvm/book3s_64_slb.S b/arch/powerpc/kvm/book3s_64_slb.S index 4f0caecc0f9d..4f12e8f0c718 100644 --- a/arch/powerpc/kvm/book3s_64_slb.S +++ b/arch/powerpc/kvm/book3s_64_slb.S | |||
@@ -17,6 +17,10 @@ | |||
17 | * Authors: Alexander Graf <agraf@suse.de> | 17 | * Authors: Alexander Graf <agraf@suse.de> |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #ifdef __LITTLE_ENDIAN__ | ||
21 | #error Need to fix SLB shadow accesses in little endian mode | ||
22 | #endif | ||
23 | |||
20 | #define SHADOW_SLB_ESID(num) (SLBSHADOW_SAVEAREA + (num * 0x10)) | 24 | #define SHADOW_SLB_ESID(num) (SLBSHADOW_SAVEAREA + (num * 0x10)) |
21 | #define SHADOW_SLB_VSID(num) (SLBSHADOW_SAVEAREA + (num * 0x10) + 0x8) | 25 | #define SHADOW_SLB_VSID(num) (SLBSHADOW_SAVEAREA + (num * 0x10) + 0x8) |
22 | #define UNBOLT_SLB_ENTRY(num) \ | 26 | #define UNBOLT_SLB_ENTRY(num) \ |
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c index b0ee3bc9ca76..62a2b5ab08ed 100644 --- a/arch/powerpc/kvm/book3s_hv.c +++ b/arch/powerpc/kvm/book3s_hv.c | |||
@@ -217,7 +217,7 @@ struct kvm_vcpu *kvmppc_find_vcpu(struct kvm *kvm, int id) | |||
217 | 217 | ||
218 | static void init_vpa(struct kvm_vcpu *vcpu, struct lppaca *vpa) | 218 | static void init_vpa(struct kvm_vcpu *vcpu, struct lppaca *vpa) |
219 | { | 219 | { |
220 | vpa->shared_proc = 1; | 220 | vpa->__old_status |= LPPACA_OLD_SHARED_PROC; |
221 | vpa->yield_count = 1; | 221 | vpa->yield_count = 1; |
222 | } | 222 | } |
223 | 223 | ||
diff --git a/arch/powerpc/kvm/book3s_hv_rm_mmu.c b/arch/powerpc/kvm/book3s_hv_rm_mmu.c index 45e30d6e462b..9c515440ad1a 100644 --- a/arch/powerpc/kvm/book3s_hv_rm_mmu.c +++ b/arch/powerpc/kvm/book3s_hv_rm_mmu.c | |||
@@ -363,7 +363,11 @@ long kvmppc_h_enter(struct kvm_vcpu *vcpu, unsigned long flags, | |||
363 | vcpu->arch.pgdir, true, &vcpu->arch.gpr[4]); | 363 | vcpu->arch.pgdir, true, &vcpu->arch.gpr[4]); |
364 | } | 364 | } |
365 | 365 | ||
366 | #ifdef __BIG_ENDIAN__ | ||
366 | #define LOCK_TOKEN (*(u32 *)(&get_paca()->lock_token)) | 367 | #define LOCK_TOKEN (*(u32 *)(&get_paca()->lock_token)) |
368 | #else | ||
369 | #define LOCK_TOKEN (*(u32 *)(&get_paca()->paca_index)) | ||
370 | #endif | ||
367 | 371 | ||
368 | static inline int try_lock_tlbie(unsigned int *lock) | 372 | static inline int try_lock_tlbie(unsigned int *lock) |
369 | { | 373 | { |
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index 60dce5bfab3f..294b7af28cdd 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | |||
@@ -29,6 +29,10 @@ | |||
29 | #include <asm/kvm_book3s_asm.h> | 29 | #include <asm/kvm_book3s_asm.h> |
30 | #include <asm/mmu-hash64.h> | 30 | #include <asm/mmu-hash64.h> |
31 | 31 | ||
32 | #ifdef __LITTLE_ENDIAN__ | ||
33 | #error Need to fix lppaca and SLB shadow accesses in little endian mode | ||
34 | #endif | ||
35 | |||
32 | /***************************************************************************** | 36 | /***************************************************************************** |
33 | * * | 37 | * * |
34 | * Real Mode handlers that need to be in the linear mapping * | 38 | * Real Mode handlers that need to be in the linear mapping * |
@@ -389,7 +393,11 @@ toc_tlbie_lock: | |||
389 | .tc native_tlbie_lock[TC],native_tlbie_lock | 393 | .tc native_tlbie_lock[TC],native_tlbie_lock |
390 | .previous | 394 | .previous |
391 | ld r3,toc_tlbie_lock@toc(2) | 395 | ld r3,toc_tlbie_lock@toc(2) |
396 | #ifdef __BIG_ENDIAN__ | ||
392 | lwz r8,PACA_LOCK_TOKEN(r13) | 397 | lwz r8,PACA_LOCK_TOKEN(r13) |
398 | #else | ||
399 | lwz r8,PACAPACAINDEX(r13) | ||
400 | #endif | ||
393 | 24: lwarx r0,0,r3 | 401 | 24: lwarx r0,0,r3 |
394 | cmpwi r0,0 | 402 | cmpwi r0,0 |
395 | bne 24b | 403 | bne 24b |
@@ -964,7 +972,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_201) | |||
964 | 32: ld r4,VCPU_KVM(r9) /* pointer to struct kvm */ | 972 | 32: ld r4,VCPU_KVM(r9) /* pointer to struct kvm */ |
965 | 973 | ||
966 | /* Take the guest's tlbie_lock */ | 974 | /* Take the guest's tlbie_lock */ |
975 | #ifdef __BIG_ENDIAN__ | ||
967 | lwz r8,PACA_LOCK_TOKEN(r13) | 976 | lwz r8,PACA_LOCK_TOKEN(r13) |
977 | #else | ||
978 | lwz r8,PACAPACAINDEX(r13) | ||
979 | #endif | ||
968 | addi r3,r4,KVM_TLBIE_LOCK | 980 | addi r3,r4,KVM_TLBIE_LOCK |
969 | 24: lwarx r0,0,r3 | 981 | 24: lwarx r0,0,r3 |
970 | cmpwi r0,0 | 982 | cmpwi r0,0 |
diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c index 2c52ada30775..751cd45f65a0 100644 --- a/arch/powerpc/kvm/emulate.c +++ b/arch/powerpc/kvm/emulate.c | |||
@@ -30,53 +30,10 @@ | |||
30 | #include <asm/byteorder.h> | 30 | #include <asm/byteorder.h> |
31 | #include <asm/kvm_ppc.h> | 31 | #include <asm/kvm_ppc.h> |
32 | #include <asm/disassemble.h> | 32 | #include <asm/disassemble.h> |
33 | #include <asm/ppc-opcode.h> | ||
33 | #include "timing.h" | 34 | #include "timing.h" |
34 | #include "trace.h" | 35 | #include "trace.h" |
35 | 36 | ||
36 | #define OP_TRAP 3 | ||
37 | #define OP_TRAP_64 2 | ||
38 | |||
39 | #define OP_31_XOP_TRAP 4 | ||
40 | #define OP_31_XOP_LWZX 23 | ||
41 | #define OP_31_XOP_DCBST 54 | ||
42 | #define OP_31_XOP_TRAP_64 68 | ||
43 | #define OP_31_XOP_DCBF 86 | ||
44 | #define OP_31_XOP_LBZX 87 | ||
45 | #define OP_31_XOP_STWX 151 | ||
46 | #define OP_31_XOP_STBX 215 | ||
47 | #define OP_31_XOP_LBZUX 119 | ||
48 | #define OP_31_XOP_STBUX 247 | ||
49 | #define OP_31_XOP_LHZX 279 | ||
50 | #define OP_31_XOP_LHZUX 311 | ||
51 | #define OP_31_XOP_MFSPR 339 | ||
52 | #define OP_31_XOP_LHAX 343 | ||
53 | #define OP_31_XOP_STHX 407 | ||
54 | #define OP_31_XOP_STHUX 439 | ||
55 | #define OP_31_XOP_MTSPR 467 | ||
56 | #define OP_31_XOP_DCBI 470 | ||
57 | #define OP_31_XOP_LWBRX 534 | ||
58 | #define OP_31_XOP_TLBSYNC 566 | ||
59 | #define OP_31_XOP_STWBRX 662 | ||
60 | #define OP_31_XOP_LHBRX 790 | ||
61 | #define OP_31_XOP_STHBRX 918 | ||
62 | |||
63 | #define OP_LWZ 32 | ||
64 | #define OP_LD 58 | ||
65 | #define OP_LWZU 33 | ||
66 | #define OP_LBZ 34 | ||
67 | #define OP_LBZU 35 | ||
68 | #define OP_STW 36 | ||
69 | #define OP_STWU 37 | ||
70 | #define OP_STD 62 | ||
71 | #define OP_STB 38 | ||
72 | #define OP_STBU 39 | ||
73 | #define OP_LHZ 40 | ||
74 | #define OP_LHZU 41 | ||
75 | #define OP_LHA 42 | ||
76 | #define OP_LHAU 43 | ||
77 | #define OP_STH 44 | ||
78 | #define OP_STHU 45 | ||
79 | |||
80 | void kvmppc_emulate_dec(struct kvm_vcpu *vcpu) | 37 | void kvmppc_emulate_dec(struct kvm_vcpu *vcpu) |
81 | { | 38 | { |
82 | unsigned long dec_nsec; | 39 | unsigned long dec_nsec; |