target/arm: Implement FEAT_HAFDBS, dirty bit portion
Perform the atomic update for hardware management of the dirty bit. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20221024051851.3074715-14-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
71943a1e90
commit
65c123fdf5
|
@ -1165,7 +1165,7 @@ static void aarch64_max_initfn(Object *obj)
|
|||
cpu->isar.id_aa64mmfr0 = t;
|
||||
|
||||
t = cpu->isar.id_aa64mmfr1;
|
||||
t = FIELD_DP64(t, ID_AA64MMFR1, HAFDBS, 1); /* FEAT_HAFDBS, AF only */
|
||||
t = FIELD_DP64(t, ID_AA64MMFR1, HAFDBS, 2); /* FEAT_HAFDBS */
|
||||
t = FIELD_DP64(t, ID_AA64MMFR1, VMIDBITS, 2); /* FEAT_VMID16 */
|
||||
t = FIELD_DP64(t, ID_AA64MMFR1, VH, 1); /* FEAT_VHE */
|
||||
t = FIELD_DP64(t, ID_AA64MMFR1, HPDS, 1); /* FEAT_HPDS */
|
||||
|
|
|
@ -1445,6 +1445,22 @@ static bool get_phys_addr_lpae(CPUARMState *env, S1Translate *ptw,
|
|||
goto do_fault;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Dirty Bit.
|
||||
* If HD is enabled, pre-emptively set/clear the appropriate AP/S2AP
|
||||
* bit for writeback. The actual write protection test may still be
|
||||
* overridden by tableattrs, to be merged below.
|
||||
*/
|
||||
if (param.hd
|
||||
&& extract64(descriptor, 51, 1) /* DBM */
|
||||
&& access_type == MMU_DATA_STORE) {
|
||||
if (regime_is_stage2(mmu_idx)) {
|
||||
new_descriptor |= 1ull << 7; /* set S2AP[1] */
|
||||
} else {
|
||||
new_descriptor &= ~(1ull << 7); /* clear AP[2] */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue