mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
target/arm: Set CTR_EL0.{IDC,DIC} for the 'max' CPU
The CTR_EL0 register has some bits which allow the implementation to tell the guest that it does not need to do cache maintenance for data-to-instruction coherence and instruction-to-data coherence. QEMU doesn't emulate caches and so our cache maintenance insns are all NOPs. We already have some models of specific CPUs where we set these bits (e.g. the Neoverse V1), but the 'max' CPU still uses the settings it inherits from Cortex-A57. Set the bits for 'max' as well, so the guest doesn't need to do unnecessary work. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Tested-by: Miguel Luis <miguel.luis@oracle.com>
This commit is contained in:
parent
f503bc4b6b
commit
3d65b958c5
1 changed files with 10 additions and 0 deletions
|
@ -1105,6 +1105,16 @@ void aarch64_max_tcg_initfn(Object *obj)
|
|||
u = FIELD_DP32(u, CLIDR_EL1, LOUU, 0);
|
||||
cpu->clidr = u;
|
||||
|
||||
/*
|
||||
* Set CTR_EL0.DIC and IDC to tell the guest it doesnt' need to
|
||||
* do any cache maintenance for data-to-instruction or
|
||||
* instruction-to-guest coherence. (Our cache ops are nops.)
|
||||
*/
|
||||
t = cpu->ctr;
|
||||
t = FIELD_DP64(t, CTR_EL0, IDC, 1);
|
||||
t = FIELD_DP64(t, CTR_EL0, DIC, 1);
|
||||
cpu->ctr = t;
|
||||
|
||||
t = cpu->isar.id_aa64isar0;
|
||||
t = FIELD_DP64(t, ID_AA64ISAR0, AES, 2); /* FEAT_PMULL */
|
||||
t = FIELD_DP64(t, ID_AA64ISAR0, SHA1, 1); /* FEAT_SHA1 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue