diff options
author | Mihai Caraman <mihai.caraman@freescale.com> | 2013-04-17 15:52:35 (GMT) |
---|---|---|
committer | Fleming Andrew-AFLEMING <AFLEMING@freescale.com> | 2013-04-17 20:26:37 (GMT) |
commit | 39cb0fe7a4aea2652fca70f88bd1c2e33e5966ae (patch) | |
tree | b2717fb205778d778da28ba527fc90bdf45be7ec /arch | |
parent | 8153955f97d3c99c1204a3690937c991a0aa92df (diff) | |
download | linux-fsl-qoriq-39cb0fe7a4aea2652fca70f88bd1c2e33e5966ae.tar.xz |
KVM: PPC: e500: Emulate TMCFG0 TMRN register
Emulate TMCFG0 TMRN register exposing one HW thread per vcpu.
Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
Change-Id: I979a199c089a01d4f8039496314ae44512f9b980
Reviewed-on: http://git.am.freescale.net:8181/1474
Reviewed-by: Yoder Stuart-B08248 <stuart.yoder@freescale.com>
Tested-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/include/asm/disassemble.h | 5 | ||||
-rw-r--r-- | arch/powerpc/kvm/e500_emulate.c | 9 |
2 files changed, 14 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/disassemble.h b/arch/powerpc/include/asm/disassemble.h index 9b198d1..4f5512d 100644 --- a/arch/powerpc/include/asm/disassemble.h +++ b/arch/powerpc/include/asm/disassemble.h @@ -42,6 +42,11 @@ static inline unsigned int get_dcrn(u32 inst) return ((inst >> 16) & 0x1f) | ((inst >> 6) & 0x3e0); } +static inline unsigned int get_tmrn(u32 inst) +{ + return ((inst >> 16) & 0x1f) | ((inst >> 6) & 0x3e0); +} + static inline unsigned int get_rt(u32 inst) { return (inst >> 21) & 0x1f; diff --git a/arch/powerpc/kvm/e500_emulate.c b/arch/powerpc/kvm/e500_emulate.c index b10a012..b80d4cd 100644 --- a/arch/powerpc/kvm/e500_emulate.c +++ b/arch/powerpc/kvm/e500_emulate.c @@ -21,6 +21,7 @@ #define XOP_MSGSND 206 #define XOP_MSGCLR 238 +#define XOP_MFTMR 366 #define XOP_TLBIVAX 786 #define XOP_TLBSX 914 #define XOP_TLBRE 946 @@ -130,6 +131,14 @@ int kvmppc_core_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu, emulated = kvmppc_e500_emul_tlbivax(vcpu, ea); break; + case XOP_MFTMR: + /* Expose one thread per vcpu */ + if (get_tmrn(inst) == TMRN_TMCFG0) + kvmppc_set_gpr(vcpu, rt, 1 | (1 << 8)); + else + emulated = EMULATE_FAIL; + break; + default: emulated = EMULATE_FAIL; } |