mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
target/riscv: Gate hardware A/D PTE bit updating
Gate hardware A/D PTE bit updating on {m,h}envcfg.ADUE and only enable menvcfg.ADUE on reset if svade has not been selected. Now that we also consider svade, we have four possible configurations: 1) !svade && !svadu use hardware updating and there's no way to disable it (the default, which maintains past behavior. Maintaining the default, even with !svadu is a change that fixes [1]) 2) !svade && svadu use hardware updating, but also provide {m,h}envcfg.ADUE, allowing software to switch to exception mode (being able to switch is a change which fixes [1]) 3) svade && !svadu use exception mode and there's no way to switch to hardware updating (this behavior change fixes [2]) 4) svade && svadu use exception mode, but also provide {m,h}envcfg.ADUE, allowing software to switch to hardware updating (this behavior change fixes [2]) Fixes:0af3f115e6
("target/riscv: Add *envcfg.HADE related check in address translation") [1] Fixes:48531f5adb
("target/riscv: implement svade") [2] Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Signed-off-by: Andrew Jones <ajones@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20240215223955.969568-6-dbarboza@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
148189ff13
commit
70d22fd92c
3 changed files with 22 additions and 15 deletions
|
@ -960,7 +960,8 @@ static void riscv_cpu_reset_hold(Object *obj)
|
|||
env->two_stage_lookup = false;
|
||||
|
||||
env->menvcfg = (cpu->cfg.ext_svpbmt ? MENVCFG_PBMTE : 0) |
|
||||
(cpu->cfg.ext_svadu ? MENVCFG_ADUE : 0);
|
||||
(!cpu->cfg.ext_svade && cpu->cfg.ext_svadu ?
|
||||
MENVCFG_ADUE : 0);
|
||||
env->henvcfg = 0;
|
||||
|
||||
/* Initialized default priorities of local interrupts. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue