From: Doug Cook <[email protected]> ARM_CP_CONST registers ignore writes, so readback assertion fails.
Not asserting now because all entries in the whpx_sreg_match table are invalid. Needs to be fixed now so that we can fix the table entries. Signed-off-by: Doug Cook <[email protected]> Reviewed-by: Mohamed Mediouni <[email protected]> Signed-off-by: Peter Maydell <[email protected]> (cherry picked from commit 6ae0b04267052bca51fe2f3c99e7053c6fdc19ae) Signed-off-by: Michael Tokarev <[email protected]> diff --git a/target/arm/whpx/whpx-all.c b/target/arm/whpx/whpx-all.c index 00a5de8cdc1..9a5a575b5e9 100644 --- a/target/arm/whpx/whpx-all.c +++ b/target/arm/whpx/whpx-all.c @@ -223,6 +223,8 @@ static struct whpx_sreg_match whpx_sreg_match[] = { { WHvArm64RegisterMpidrEl1, ENCODE_AA64_CP_REG(0, 0, 3, 0, 5) }, { WHvArm64RegisterIdPfr0El1, ENCODE_AA64_CP_REG(0, 4, 3, 0, 0) }, #endif +#ifdef SYNC_CONST_ID_REGS + /* ID registers are ARM_CP_CONST (writes ignored). */ { WHvArm64RegisterIdAa64Pfr1El1, ENCODE_AA64_CP_REG(0, 4, 3, 0, 1), true }, { WHvArm64RegisterIdAa64Dfr0El1, ENCODE_AA64_CP_REG(0, 5, 3, 0, 0), true }, { WHvArm64RegisterIdAa64Dfr1El1, ENCODE_AA64_CP_REG(0, 5, 3, 0, 1), true }, @@ -235,6 +237,7 @@ static struct whpx_sreg_match whpx_sreg_match[] = { { WHvArm64RegisterIdAa64Mmfr1El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 1), true }, { WHvArm64RegisterIdAa64Mmfr2El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 2), true }, { WHvArm64RegisterIdAa64Mmfr3El1, ENCODE_AA64_CP_REG(0, 7, 3, 0, 3), true }, +#endif { WHvArm64RegisterMdscrEl1, ENCODE_AA64_CP_REG(0, 2, 2, 0, 2) }, { WHvArm64RegisterSctlrEl1, ENCODE_AA64_CP_REG(1, 0, 3, 0, 0) }, @@ -790,7 +793,7 @@ int whpx_init_vcpu(CPUState *cpu) ri = get_arm_cp_reginfo(arm_cpu->cp_regs, key); if (ri) { - assert(!(ri->type & ARM_CP_NO_RAW)); + assert(!(ri->type & (ARM_CP_NO_RAW | ARM_CP_CONST))); whpx_sreg_match[i].cp_idx = sregs_cnt; arm_cpu->cpreg_indexes[sregs_cnt++] = cpreg_to_kvm_id(key); } else { -- 2.47.3
