[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v8 03/19] target/riscv/cpu.c: set satp_max_supported in cpu_riscv
From: |
Daniel Henrique Barboza |
Subject: |
[PATCH v8 03/19] target/riscv/cpu.c: set satp_max_supported in cpu_riscv_set_satp() |
Date: |
Wed, 1 Nov 2023 17:41:48 -0300 |
The setter() for the boolean attributes that set satp_mode (sv32, sv39,
sv48, sv57, sv64) considers that the CPU will always do a
set_satp_mode_max_supported() during cpu_init().
This is not the case for the KVM 'host' CPU, and we'll add another CPU
that won't set satp_mode_max() during cpu_init(). Users should be able
to set a max_support in these circunstances.
Allow cpu_riscv_set_satp() to set satp_mode_max_supported if the CPU
didn't set one prior.
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
---
target/riscv/cpu.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index 822970345c..9f6837ecb7 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -1100,6 +1100,7 @@ static void cpu_riscv_get_satp(Object *obj, Visitor *v,
const char *name,
static void cpu_riscv_set_satp(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
+ RISCVCPU *cpu = RISCV_CPU(obj);
RISCVSATPMap *satp_map = opaque;
uint8_t satp = satp_mode_from_str(name);
bool value;
@@ -1108,6 +1109,16 @@ static void cpu_riscv_set_satp(Object *obj, Visitor *v,
const char *name,
return;
}
+ /*
+ * Allow users to set satp max supported if the CPU didn't
+ * set any during cpu_init(). First value set to 'true'
+ * in this case is assumed to be the max supported for
+ * the CPU.
+ */
+ if (value && cpu->cfg.satp_mode.supported == 0) {
+ set_satp_mode_max_supported(cpu, satp);
+ }
+
satp_map->map = deposit32(satp_map->map, satp, 1, value);
satp_map->init |= 1 << satp;
}
--
2.41.0
[PATCH v8 06/19] target/riscv: add rv64i CPU, Daniel Henrique Barboza, 2023/11/01