KVM: arm64: Expose ID_AA64MMFR4_EL1 to guests
authorMarc Zyngier <maz@kernel.org>
Mon, 22 Jan 2024 18:13:42 +0000 (18:13 +0000)
committerOliver Upton <oliver.upton@linux.dev>
Thu, 8 Feb 2024 15:12:45 +0000 (15:12 +0000)
We can now expose ID_AA64MMFR4_EL1 to guests, and let NV guests
understand that they cannot really switch HCR_EL2.E2H to 0 on
some platforms.

Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20240122181344.258974-9-maz@kernel.org
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/nested.c
arch/arm64/kvm/sys_regs.c

index ba95d044bc98fd397d2b59e48aeb92d56a39c656..d55e809e26cb377e736621c681619b37df66d69f 100644 (file)
@@ -133,6 +133,13 @@ static u64 limit_nv_id_reg(u32 id, u64 val)
                val |= FIELD_PREP(NV_FTR(MMFR2, TTL), 0b0001);
                break;
 
+       case SYS_ID_AA64MMFR4_EL1:
+               val = 0;
+               if (!cpus_have_final_cap(ARM64_HAS_HCR_NV1))
+                       val |= FIELD_PREP(NV_FTR(MMFR4, E2H0),
+                                         ID_AA64MMFR4_EL1_E2H0_NI_NV1);
+               break;
+
        case SYS_ID_AA64DFR0_EL1:
                /* Only limited support for PMU, Debug, BPs and WPs */
                val &= (NV_FTR(DFR0, PMUVer)    |
index 88b8fbeafaa0b7f398599564172dbbab31ae0814..08a9571fa80919eaad43a22389f28776b53794ac 100644 (file)
@@ -2350,7 +2350,7 @@ static const struct sys_reg_desc sys_reg_descs[] = {
                                        ID_AA64MMFR2_EL1_NV |
                                        ID_AA64MMFR2_EL1_CCIDX)),
        ID_SANITISED(ID_AA64MMFR3_EL1),
-       ID_UNALLOCATED(7,4),
+       ID_SANITISED(ID_AA64MMFR4_EL1),
        ID_UNALLOCATED(7,5),
        ID_UNALLOCATED(7,6),
        ID_UNALLOCATED(7,7),