[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 61/61] target/riscv: add rv32i, rv32e and rv64e CPUs
From: |
Alistair Francis |
Subject: |
[PULL 61/61] target/riscv: add rv32i, rv32e and rv64e CPUs |
Date: |
Fri, 9 Feb 2024 20:58:13 +1000 |
From: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
A bare bones 32 bit RVI CPU, rv32i, will make users lives easier when a
full customized 32 bit CPU is desired, and users won't need to disable
defaults by hand as they would with the rv32 CPU. [1] has an example of
a situation that would be avoided with rv32i.
In fact, add bare bones CPUs for RVE as well. Trying to use RVE in QEMU
requires one to disable every single default extension, including RVI,
and then add the desirable extension set. Adding rv32e/rv64e makes it
more pleasant to use embedded CPUs in QEMU.
[1]
https://lore.kernel.org/qemu-riscv/258be47f-97be-4308-bed5-dc34ef7ff954@Spark/
Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20240122123348.973288-3-dbarboza@ventanamicro.com>
[ Changes by AF:
- Rebase on latest changes
]
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
target/riscv/cpu-qom.h | 3 +++
target/riscv/cpu.c | 21 +++++++++++++++++++++
2 files changed, 24 insertions(+)
diff --git a/target/riscv/cpu-qom.h b/target/riscv/cpu-qom.h
index 9219c2fcc3..3670cfe6d9 100644
--- a/target/riscv/cpu-qom.h
+++ b/target/riscv/cpu-qom.h
@@ -34,7 +34,10 @@
#define TYPE_RISCV_CPU_BASE32 RISCV_CPU_TYPE_NAME("rv32")
#define TYPE_RISCV_CPU_BASE64 RISCV_CPU_TYPE_NAME("rv64")
#define TYPE_RISCV_CPU_BASE128 RISCV_CPU_TYPE_NAME("x-rv128")
+#define TYPE_RISCV_CPU_RV32I RISCV_CPU_TYPE_NAME("rv32i")
+#define TYPE_RISCV_CPU_RV32E RISCV_CPU_TYPE_NAME("rv32e")
#define TYPE_RISCV_CPU_RV64I RISCV_CPU_TYPE_NAME("rv64i")
+#define TYPE_RISCV_CPU_RV64E RISCV_CPU_TYPE_NAME("rv64e")
#define TYPE_RISCV_CPU_RVA22U64 RISCV_CPU_TYPE_NAME("rva22u64")
#define TYPE_RISCV_CPU_RVA22S64 RISCV_CPU_TYPE_NAME("rva22s64")
#define TYPE_RISCV_CPU_IBEX RISCV_CPU_TYPE_NAME("lowrisc-ibex")
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index 08fc24c3f4..1b8d001d23 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -606,6 +606,12 @@ static void rv64i_bare_cpu_init(Object *obj)
CPURISCVState *env = &RISCV_CPU(obj)->env;
riscv_cpu_set_misa_ext(env, RVI);
}
+
+static void rv64e_bare_cpu_init(Object *obj)
+{
+ CPURISCVState *env = &RISCV_CPU(obj)->env;
+ riscv_cpu_set_misa_ext(env, RVE);
+}
#else
static void rv32_base_cpu_init(Object *obj)
{
@@ -689,6 +695,18 @@ static void rv32_imafcu_nommu_cpu_init(Object *obj)
cpu->cfg.ext_zicsr = true;
cpu->cfg.pmp = true;
}
+
+static void rv32i_bare_cpu_init(Object *obj)
+{
+ CPURISCVState *env = &RISCV_CPU(obj)->env;
+ riscv_cpu_set_misa_ext(env, RVI);
+}
+
+static void rv32e_bare_cpu_init(Object *obj)
+{
+ CPURISCVState *env = &RISCV_CPU(obj)->env;
+ riscv_cpu_set_misa_ext(env, RVE);
+}
#endif
static ObjectClass *riscv_cpu_class_by_name(const char *cpu_model)
@@ -2528,6 +2546,8 @@ static const TypeInfo riscv_cpu_type_infos[] = {
DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_SIFIVE_E31, MXL_RV32,
rv32_sifive_e_cpu_init),
DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_SIFIVE_E34, MXL_RV32,
rv32_imafcu_nommu_cpu_init),
DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_SIFIVE_U34, MXL_RV32,
rv32_sifive_u_cpu_init),
+ DEFINE_BARE_CPU(TYPE_RISCV_CPU_RV32I, MXL_RV32,
rv32i_bare_cpu_init),
+ DEFINE_BARE_CPU(TYPE_RISCV_CPU_RV32E, MXL_RV32,
rv32e_bare_cpu_init),
#elif defined(TARGET_RISCV64)
DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_ANY, MXL_RV64,
riscv_any_cpu_init),
DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_MAX, MXL_RV64,
riscv_max_cpu_init),
@@ -2539,6 +2559,7 @@ static const TypeInfo riscv_cpu_type_infos[] = {
DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_VEYRON_V1, MXL_RV64,
rv64_veyron_v1_cpu_init),
DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE128, MXL_RV128,
rv128_base_cpu_init),
DEFINE_BARE_CPU(TYPE_RISCV_CPU_RV64I, MXL_RV64,
rv64i_bare_cpu_init),
+ DEFINE_BARE_CPU(TYPE_RISCV_CPU_RV64E, MXL_RV64,
rv64e_bare_cpu_init),
DEFINE_PROFILE_CPU(TYPE_RISCV_CPU_RVA22U64, MXL_RV64,
rva22u64_profile_cpu_init),
DEFINE_PROFILE_CPU(TYPE_RISCV_CPU_RVA22S64, MXL_RV64,
rva22s64_profile_cpu_init),
#endif
--
2.43.0
- [PULL 39/61] target/riscv: Move misa_mxl_max to class, (continued)
- [PULL 39/61] target/riscv: Move misa_mxl_max to class, Alistair Francis, 2024/02/09
- [PULL 52/61] target/riscv: Expose Zaamo and Zalrsc extensions, Alistair Francis, 2024/02/09
- [PULL 45/61] hw/riscv/virt.c: use g_autofree in create_fdt_socket_cpus(), Alistair Francis, 2024/02/09
- [PULL 48/61] hw/riscv/virt.c: use g_autofree in virt_machine_init(), Alistair Francis, 2024/02/09
- [PULL 35/61] target/riscv/kvm: change kvm_reg_id to uint64_t, Alistair Francis, 2024/02/09
- [PULL 36/61] target/riscv/kvm: initialize 'vlenb' via get-reg-list, Alistair Francis, 2024/02/09
- [PULL 46/61] hw/riscv/virt.c: use g_autofree in create_fdt_sockets(), Alistair Francis, 2024/02/09
- [PULL 49/61] hw/riscv/virt.c: use g_autofree in create_fdt_*, Alistair Francis, 2024/02/09
- [PULL 55/61] smbios: add processor-family option, Alistair Francis, 2024/02/09
- [PULL 59/61] target/riscv: Enable xtheadsync under user mode, Alistair Francis, 2024/02/09
- [PULL 61/61] target/riscv: add rv32i, rv32e and rv64e CPUs,
Alistair Francis <=
- [PULL 40/61] target/riscv: Validate misa_mxl_max only once, Alistair Francis, 2024/02/09
- [PULL 42/61] target/riscv: Use RISCVException as return type for all csr ops, Alistair Francis, 2024/02/09
- [PULL 54/61] target/riscv: support new isa extension detection devicetree properties, Alistair Francis, 2024/02/09
- [PULL 60/61] target/riscv/cpu.c: add riscv_bare_cpu_init(), Alistair Francis, 2024/02/09
- [PULL 32/61] target/riscv: change vext_get_vlmax() arguments, Alistair Francis, 2024/02/09
- [PULL 34/61] target/riscv/cpu.c: remove cpu->cfg.vlen, Alistair Francis, 2024/02/09
- [PULL 41/61] target/riscv: FCSR doesn't contain vxrm and vxsat, Alistair Francis, 2024/02/09
- [PULL 43/61] hw/riscv/virt-acpi-build.c: fix leak in build_rhct(), Alistair Francis, 2024/02/09
- [PULL 44/61] hw/riscv/numa.c: use g_autofree in socket_fdt_write_distance_matrix(), Alistair Francis, 2024/02/09
- [PULL 57/61] target/riscv: SMBIOS support for RISC-V virt machine, Alistair Francis, 2024/02/09