WIP
Signed-off-by: Marc Zyngier <maz@kernel.org>
diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
index 109a85e..5680f84 100644
--- a/arch/arm64/include/asm/kvm_arm.h
+++ b/arch/arm64/include/asm/kvm_arm.h
@@ -343,12 +343,11 @@
/*
* FGT register definitions
*
- * RES0 and polarity masks as of DDI0487J.a, to be updated as needed.
- * We're not using the generated masks as they are usually ahead of
- * the published ARM ARM, which we use as a reference.
+ * For each FGT register, define 3 constants:
*
- * Once we get to a point where the two describe the same thing, we'll
- * merge the definitions. One day.
+ * __H*FG*TR_EL2_RES0: the RES0 bits that apply to this register
+ * __H*FG*TR_EL2_MASK: the bits that are active when set to 1
+ * __H*FG*TR_EL2_nMASK: the bits that are RES0 or active when set to 0
*/
#define __HFGRTR_EL2_RES0 HFGxTR_EL2_RES0
#define __HFGRTR_EL2_MASK GENMASK(49, 0)
diff --git a/arch/arm64/kvm/emulate-nested.c b/arch/arm64/kvm/emulate-nested.c
index 092a73f..f92b224 100644
--- a/arch/arm64/kvm/emulate-nested.c
+++ b/arch/arm64/kvm/emulate-nested.c
@@ -84,7 +84,9 @@ enum cgt_group_id {
CGT_CPTR_TCPAC,
CGT_HCRX_EnFPM,
+ CGT_HCRX_SCTLR2En,
CGT_HCRX_TCR2En,
+ CGT_HCRX_TALLINT,
/*
* Anything after this point is a combination of coarse trap
@@ -379,12 +381,24 @@ static const struct trap_bits coarse_trap_bits[] = {
.mask = HCRX_EL2_EnFPM,
.behaviour = BEHAVE_FORWARD_ANY,
},
+ [CGT_HCRX_SCTLR2En] = {
+ .index = HCRX_EL2,
+ .value = 0,
+ .mask = HCRX_EL2_SCTLR2En,
+ .behaviour = BEHAVE_FORWARD_ANY,
+ },
[CGT_HCRX_TCR2En] = {
.index = HCRX_EL2,
.value = 0,
.mask = HCRX_EL2_TCR2En,
.behaviour = BEHAVE_FORWARD_ANY,
},
+ [CGT_HCRX_TALLINT] = {
+ .index = HCRX_EL2,
+ .value = 1,
+ .mask = HCRX_EL2_TALLINT,
+ .behaviour = BEHAVE_FORWARD_WRITE,
+ },
};
#define MCB(id, ...) \