[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 06/10] target/riscv/tcg: commit profiles during realize()
From: |
Daniel Henrique Barboza |
Subject: |
[PATCH v2 06/10] target/riscv/tcg: commit profiles during realize() |
Date: |
Fri, 6 Oct 2023 10:21:30 -0300 |
To 'commit' a profile means enabling/disabling all its mandatory
extensions after taking into account individual user choice w.r.t MISA
and multi-letter extensions. We'll handle multi-letter extennsions now -
MISA extensions needs additional steps that we'll take care later.
riscv_cpu_manage_profiles() will scroll through all profiles available
in QEMU and call riscv_cpu_commit_profile() for any profile that the
user set, either to 'true' or 'false'.
Setting a profile to 'true' means 'enable all mandatory extensions of
this profile'. Setting it to 'false' means disabling all its mandatory
extensions. Since we're doing it during realize() time we already have
all user choices for individual extensions sorted out, and they'll take
precedence. This will make us independent of left-to-right ordering in
the QEMU command line, i.e. the following QEMU command lines:
-cpu rv64,zicbom=false,rva22u64=true,Zifencei=false
-cpu rv64,zicbom=false,Zifencei=false,rva22u64=true
-cpu rv64,rva22u64=true,zicbom=false,Zifencei=false
They mean the same thing: "enable all mandatory extensions of the
rva22u64 profile while keeping zicbom and Zifencei disabled".
Enabling extensions in the profile is also considered an user choice, so
all extensions enabled will be added in the multi_ext_user_opts hash.
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
---
target/riscv/tcg/tcg-cpu.c | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c
index a8ea869e6e..8fb77e9e35 100644
--- a/target/riscv/tcg/tcg-cpu.c
+++ b/target/riscv/tcg/tcg-cpu.c
@@ -264,6 +264,41 @@ static void riscv_cpu_disable_priv_spec_isa_exts(RISCVCPU
*cpu)
}
}
+static void riscv_cpu_commit_profile(RISCVCPU *cpu, RISCVCPUProfile *profile)
+{
+ int i;
+
+ for (i = 0;; i++) {
+ int ext_offset = profile->ext_offsets[i];
+
+ if (ext_offset == RISCV_PROFILE_EXT_LIST_END) {
+ break;
+ }
+
+ if (cpu_cfg_ext_is_user_set(ext_offset)) {
+ continue;
+ }
+
+ g_hash_table_insert(multi_ext_user_opts,
+ GUINT_TO_POINTER(ext_offset),
+ (gpointer)profile->enabled);
+ isa_ext_update_enabled(cpu, ext_offset, profile->enabled);
+ }
+}
+
+static void riscv_cpu_manage_profiles(RISCVCPU *cpu)
+{
+ for (int i = 0; riscv_profiles[i] != NULL; i++) {
+ RISCVCPUProfile *profile = riscv_profiles[i];
+
+ if (!profile->user_set) {
+ continue;
+ }
+
+ riscv_cpu_commit_profile(cpu, profile);
+ }
+}
+
/*
* Check consistency between chosen extensions while setting
* cpu->cfg accordingly.
@@ -273,6 +308,8 @@ void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error
**errp)
CPURISCVState *env = &cpu->env;
Error *local_err = NULL;
+ riscv_cpu_manage_profiles(cpu);
+
/* Do some ISA extension error checking */
if (riscv_has_ext(env, RVG) &&
!(riscv_has_ext(env, RVI) && riscv_has_ext(env, RVM) &&
--
2.41.0
- Re: [PATCH v2 01/10] target/riscv/cpu.c: add zicntr extension flag, (continued)
- [PATCH v2 02/10] target/riscv/cpu.c: add zihpm extension flag, Daniel Henrique Barboza, 2023/10/06
- [PATCH v2 03/10] target/riscv: add rva22u64 profile definition, Daniel Henrique Barboza, 2023/10/06
- [PATCH v2 05/10] target/riscv/tcg: add user flag for profile support, Daniel Henrique Barboza, 2023/10/06
- [PATCH v2 04/10] target/riscv/kvm: add 'rva22u64' flag as unavailable, Daniel Henrique Barboza, 2023/10/06
- [PATCH v2 07/10] target/riscv/tcg: add MISA user options hash, Daniel Henrique Barboza, 2023/10/06
- [PATCH v2 06/10] target/riscv/tcg: commit profiles during realize(),
Daniel Henrique Barboza <=
- [PATCH v2 08/10] target/riscv/tcg: add riscv_cpu_write_misa_bit(), Daniel Henrique Barboza, 2023/10/06
- [PATCH v2 09/10] target/riscv/tcg: handle MISA bits on profile commit, Daniel Henrique Barboza, 2023/10/06
- [PATCH v2 10/10] target/riscv/tcg: add hash table insert helpers, Daniel Henrique Barboza, 2023/10/06
- Re: [PATCH v2 00/10] riscv: RVA22U64 profile support, Alistair Francis, 2023/10/10