[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v2 05/47] target/riscv/tcg/tcg-cpu.c: consider MISA bit choice in
From: |
Alistair Francis |
Subject: |
[PULL v2 05/47] target/riscv/tcg/tcg-cpu.c: consider MISA bit choice in implied rule |
Date: |
Wed, 25 Sep 2024 08:17:06 +1000 |
From: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Gitlab issue [1] reports a misleading error when trying to run a 'rv64'
cpu with 'zfinx' and without 'f':
$ ./build/qemu-system-riscv64 -nographic -M virt -cpu rv64,zfinx=true,f=false
qemu-system-riscv64: Zfinx cannot be supported together with F extension
The user explicitly disabled F and the error message mentions a conflict
with Zfinx and F.
The problem isn't the error reporting, but the logic used when applying
the implied ZFA rule that enables RVF unconditionally, without honoring
user choice (i.e. keep F disabled).
Change cpu_enable_implied_rule() to check if the user deliberately
disabled a MISA bit. In this case we shouldn't either re-enable the bit
nor apply any implied rules related to it.
After this change the error message now shows:
$ ./build/qemu-system-riscv64 -nographic -M virt -cpu rv64,zfinx=true,f=false
qemu-system-riscv64: Zfa extension requires F extension
Disabling 'zfa':
$ ./build/qemu-system-riscv64 -nographic -M virt -cpu
rv64,zfinx=true,f=false,zfa=false
qemu-system-riscv64: D extension requires F extension
And finally after disabling 'd':
$ ./build/qemu-system-riscv64 -nographic -M virt -cpu
rv64,zfinx=true,f=false,zfa=false,d=false
(OpenSBI boots ...)
[1] https://gitlab.com/qemu-project/qemu/-/issues/2486
Cc: Frank Chang <frank.chang@sifive.com>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2486
Fixes: 047da861f9 ("target/riscv: Introduce extension implied rule helpers")
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20240824173338.316666-1-dbarboza@ventanamicro.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
target/riscv/tcg/tcg-cpu.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c
index b8814ab753..dea8ab7a43 100644
--- a/target/riscv/tcg/tcg-cpu.c
+++ b/target/riscv/tcg/tcg-cpu.c
@@ -778,11 +778,18 @@ static void cpu_enable_implied_rule(RISCVCPU *cpu,
if (!enabled) {
/* Enable the implied MISAs. */
if (rule->implied_misa_exts) {
- riscv_cpu_set_misa_ext(env,
- env->misa_ext | rule->implied_misa_exts);
-
for (i = 0; misa_bits[i] != 0; i++) {
if (rule->implied_misa_exts & misa_bits[i]) {
+ /*
+ * If the user disabled the misa_bit do not re-enable it
+ * and do not apply any implied rules related to it.
+ */
+ if (cpu_misa_ext_is_user_set(misa_bits[i]) &&
+ !(env->misa_ext & misa_bits[i])) {
+ continue;
+ }
+
+ riscv_cpu_set_misa_ext(env, env->misa_ext | misa_bits[i]);
ir = g_hash_table_lookup(misa_ext_implied_rules,
GUINT_TO_POINTER(misa_bits[i]));
--
2.46.1
- [PULL v2 00/47] riscv-to-apply queue, Alistair Francis, 2024/09/24
- [PULL v2 01/47] target/riscv: Add a property to set vl to ceil(AVL/2), Alistair Francis, 2024/09/24
- [PULL v2 02/47] tests/acpi: Add empty ACPI SRAT data file for RISC-V, Alistair Francis, 2024/09/24
- [PULL v2 03/47] tests/qtest/bios-tables-test.c: Enable numamem testing for RISC-V, Alistair Francis, 2024/09/24
- [PULL v2 04/47] tests/acpi: Add expected ACPI SRAT AML file for RISC-V, Alistair Francis, 2024/09/24
- [PULL v2 05/47] target/riscv/tcg/tcg-cpu.c: consider MISA bit choice in implied rule,
Alistair Francis <=
- [PULL v2 06/47] target/riscv: fix za64rs enabling, Alistair Francis, 2024/09/24
- [PULL v2 07/47] target: riscv: Enable Bit Manip for OpenTitan Ibex CPU, Alistair Francis, 2024/09/24
- [PULL v2 08/47] target/riscv/kvm: Fix the group bit setting of AIA, Alistair Francis, 2024/09/24
- [PULL v2 09/47] target/riscv: Stop timer with infinite timecmp, Alistair Francis, 2024/09/24
- [PULL v2 10/47] target/riscv/cpu.c: Add 'fcsr' register to QEMU log as a part of F extension, Alistair Francis, 2024/09/24
- [PULL v2 11/47] util/util/cpuinfo-riscv.c: fix riscv64 build on musl libc, Alistair Francis, 2024/09/24
- [PULL v2 12/47] target/riscv: Preliminary textra trigger CSR writting support, Alistair Francis, 2024/09/24
- [PULL v2 13/47] target/riscv: Add textra matching condition for the triggers, Alistair Francis, 2024/09/24
- [PULL v2 14/47] exec/memtxattr: add process identifier to the transaction attributes, Alistair Francis, 2024/09/24
- [PULL v2 15/47] hw/riscv: add riscv-iommu-bits.h, Alistair Francis, 2024/09/24