Hi, This new version contains changes suggested by Weiwei Li. I've also reworked write_misa() to cover more cases. write_misa() is now able to properly enable RVG, RVV and RVE.
A more in-depth description of what was attempted here can be found in [1]. Note that the current validation flow already prevents certain misa bits from being disabled (e.g. RVF) due to the presence of Z extensions that are already enabled in the hart, so I decided not to add extra logic to handle these cases. Patches are rebased on top of Alistair's riscv-to-apply.next. Changes from v2: - patches removed: - patch 15 ('do not allow RVG in write_misa()') - patch 19 ('add misa_ext V-> D & F dependency') - patch 15: - add zfinx dependency to enable RVG - patch 19 (former patch 17): - remove misa_ext* assignment from validate_set_extensions() - patch 23 (former 25): - enable RVE in write_misa() - new patch 25: - enable RVG in write_misa() - new patch 26: - enable RVV in write_misa() - v2 link: https://lists.gnu.org/archive/html/qemu-devel/2023-03/msg04424.html [1] https://lists.gnu.org/archive/html/qemu-devel/2023-03/msg04674.html Daniel Henrique Barboza (26): target/riscv/cpu.c: add riscv_cpu_validate_v() target/riscv/cpu.c: remove set_vext_version() target/riscv/cpu.c: remove set_priv_version() target/riscv: add PRIV_VERSION_LATEST target/riscv/cpu.c: add priv_spec validate/disable_exts helpers target/riscv/cpu.c: add riscv_cpu_validate_misa_mxl() target/riscv: move pmp and epmp validations to validate_set_extensions() target/riscv/cpu.c: validate extensions before riscv_timer_init() target/riscv/cpu.c: remove cfg setup from riscv_cpu_init() target/riscv/cpu.c: avoid set_misa() in validate_set_extensions() target/riscv/cpu.c: set cpu config in set_misa() target/riscv/cpu.c: redesign register_cpu_props() target/riscv: put env->misa_ext <-> cpu->cfg code into helpers target/riscv: add RVG target/riscv/cpu.c: split RVG code from validate_set_extensions() target/riscv/cpu.c: add riscv_cpu_validate_misa_ext() target/riscv: move riscv_cpu_validate_v() to validate_misa_ext() target/riscv: error out on priv failure for RVH target/riscv: write env->misa_ext* in register_generic_cpu_props() target/riscv: make validate_misa_ext() use a misa_ext val target/riscv: split riscv_cpu_validate_set_extensions() target/riscv: use misa_ext val in riscv_cpu_validate_extensions() target/riscv: rework write_misa() target/riscv: update cpu->cfg misa bits in commit_cpu_cfg() target/riscv: allow write_misa() to enable RVG target/riscv: allow write_misa() to enable RVV target/riscv/cpu.c | 691 +++++++++++++++++++++++++++++---------------- target/riscv/cpu.h | 17 +- target/riscv/csr.c | 85 ++++-- 3 files changed, 522 insertions(+), 271 deletions(-) -- 2.39.2