summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMihai Caraman <mihai.caraman@freescale.com>2013-04-17 15:52:35 (GMT)
committerFleming Andrew-AFLEMING <AFLEMING@freescale.com>2013-04-17 20:26:37 (GMT)
commit39cb0fe7a4aea2652fca70f88bd1c2e33e5966ae (patch)
treeb2717fb205778d778da28ba527fc90bdf45be7ec /arch
parent8153955f97d3c99c1204a3690937c991a0aa92df (diff)
downloadlinux-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.h5
-rw-r--r--arch/powerpc/kvm/e500_emulate.c9
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;
}