All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
To: qemu-devel@nongnu.org
Cc: qemu-riscv@nongnu.org, alistair.francis@wdc.com,
	bmeng@tinylab.org, liwei1518@gmail.com,
	zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com,
	ajones@ventanamicro.com,
	Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Subject: [PATCH v13 18/26] target/riscv: add 'rva22u64' CPU
Date: Mon, 18 Dec 2023 09:53:26 -0300	[thread overview]
Message-ID: <20231218125334.37184-19-dbarboza@ventanamicro.com> (raw)
In-Reply-To: <20231218125334.37184-1-dbarboza@ventanamicro.com>

This CPU was suggested by Alistair [1] and others during the profile
design discussions. It consists of the bare 'rv64i' CPU with rva22u64
enabled by default, like an alias of '-cpu rv64i,rva22u64=true'.

Users now have an even easier way of consuming this user-mode profile by
doing '-cpu rva22u64'. Extensions can be enabled/disabled at will on top
of it.

We can boot Linux with this "user-mode" CPU by doing:

-cpu rva22u64,sv39=true,s=true,zifencei=true

[1] https://lore.kernel.org/qemu-riscv/CAKmqyKP7xzZ9Sx=-Lbx2Ob0qCfB7Z+JO944FQ2TQ+49mqo0q_Q@mail.gmail.com/

Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
---
 target/riscv/cpu-qom.h     |  1 +
 target/riscv/cpu.c         | 17 +++++++++++++++++
 target/riscv/tcg/tcg-cpu.c |  9 +++++++++
 3 files changed, 27 insertions(+)

diff --git a/target/riscv/cpu-qom.h b/target/riscv/cpu-qom.h
index 4d1aa54311..12fe78fc52 100644
--- a/target/riscv/cpu-qom.h
+++ b/target/riscv/cpu-qom.h
@@ -35,6 +35,7 @@
 #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_RV64I            RISCV_CPU_TYPE_NAME("rv64i")
+#define TYPE_RISCV_CPU_RVA22U64         RISCV_CPU_TYPE_NAME("rva22u64")
 #define TYPE_RISCV_CPU_IBEX             RISCV_CPU_TYPE_NAME("lowrisc-ibex")
 #define TYPE_RISCV_CPU_SHAKTI_C         RISCV_CPU_TYPE_NAME("shakti-c")
 #define TYPE_RISCV_CPU_SIFIVE_E31       RISCV_CPU_TYPE_NAME("sifive-e31")
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index b9057c8da2..a38d78b2d6 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -1576,6 +1576,15 @@ static Property riscv_cpu_properties[] = {
     DEFINE_PROP_END_OF_LIST(),
 };
 
+#if defined(TARGET_RISCV64)
+static void rva22u64_profile_cpu_init(Object *obj)
+{
+    rv64i_bare_cpu_init(obj);
+
+    RVA22U64.enabled = true;
+}
+#endif
+
 static const gchar *riscv_gdb_arch_name(CPUState *cs)
 {
     RISCVCPU *cpu = RISCV_CPU(cs);
@@ -1866,6 +1875,13 @@ void riscv_cpu_list(void)
         .instance_init = initfn            \
     }
 
+#define DEFINE_PROFILE_CPU(type_name, initfn) \
+    {                                         \
+        .name = type_name,                    \
+        .parent = TYPE_RISCV_BARE_CPU,        \
+        .instance_init = initfn               \
+    }
+
 static const TypeInfo riscv_cpu_type_infos[] = {
     {
         .name = TYPE_RISCV_CPU,
@@ -1910,6 +1926,7 @@ static const TypeInfo riscv_cpu_type_infos[] = {
     DEFINE_VENDOR_CPU(TYPE_RISCV_CPU_VEYRON_V1,   rv64_veyron_v1_cpu_init),
     DEFINE_DYNAMIC_CPU(TYPE_RISCV_CPU_BASE128,  rv128_base_cpu_init),
     DEFINE_BARE_CPU(TYPE_RISCV_CPU_RV64I, rv64i_bare_cpu_init),
+    DEFINE_PROFILE_CPU(TYPE_RISCV_CPU_RVA22U64, rva22u64_profile_cpu_init),
 #endif
 };
 
diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c
index 005d8be26b..04aedf3840 100644
--- a/target/riscv/tcg/tcg-cpu.c
+++ b/target/riscv/tcg/tcg-cpu.c
@@ -1095,6 +1095,15 @@ static void riscv_cpu_add_profiles(Object *cpu_obj)
         object_property_add(cpu_obj, profile->name, "bool",
                             cpu_get_profile, cpu_set_profile,
                             NULL, (void *)profile);
+
+        /*
+         * CPUs might enable a profile right from the start.
+         * Enable its mandatory extensions right away in this
+         * case.
+         */
+        if (profile->enabled) {
+            object_property_set_bool(cpu_obj, profile->name, true, NULL);
+        }
     }
 }
 
-- 
2.43.0



  parent reply	other threads:[~2023-12-18 13:00 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-18 12:53 [PATCH v13 00/26] riscv: RVA22 profiles support Daniel Henrique Barboza
2023-12-18 12:53 ` [PATCH v13 01/26] target/riscv: create TYPE_RISCV_VENDOR_CPU Daniel Henrique Barboza
2023-12-18 12:53 ` [PATCH v13 02/26] target/riscv/tcg: do not use "!generic" CPU checks Daniel Henrique Barboza
2023-12-18 12:53 ` [PATCH v13 03/26] target/riscv/tcg: update priv_ver on user_set extensions Daniel Henrique Barboza
2024-01-04  4:02   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 04/26] target/riscv: add rv64i CPU Daniel Henrique Barboza
2024-01-04  4:11   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 05/26] target/riscv: add zicbop extension flag Daniel Henrique Barboza
2024-01-04  4:12   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 06/26] target/riscv/tcg: add 'zic64b' support Daniel Henrique Barboza
2024-01-04  5:00   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 07/26] riscv-qmp-cmds.c: expose named features in cpu_model_expansion Daniel Henrique Barboza
2024-01-04  5:13   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 08/26] target/riscv: add rva22u64 profile definition Daniel Henrique Barboza
2023-12-18 12:53 ` [PATCH v13 09/26] target/riscv/kvm: add 'rva22u64' flag as unavailable Daniel Henrique Barboza
2023-12-18 12:53 ` [PATCH v13 10/26] target/riscv/tcg: add user flag for profile support Daniel Henrique Barboza
2024-01-04  6:19   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 11/26] target/riscv/tcg: add MISA user options hash Daniel Henrique Barboza
2023-12-18 12:53 ` [PATCH v13 12/26] target/riscv/tcg: add riscv_cpu_write_misa_bit() Daniel Henrique Barboza
2023-12-18 12:53 ` [PATCH v13 13/26] target/riscv/tcg: handle profile MISA bits Daniel Henrique Barboza
2023-12-18 12:53 ` [PATCH v13 14/26] target/riscv/tcg: add hash table insert helpers Daniel Henrique Barboza
2024-01-04  6:25   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 15/26] target/riscv/tcg: honor user choice for G MISA bits Daniel Henrique Barboza
2023-12-18 12:53 ` [PATCH v13 16/26] target/riscv/tcg: validate profiles during finalize Daniel Henrique Barboza
2024-01-04  6:27   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 17/26] riscv-qmp-cmds.c: add profile flags in cpu-model-expansion Daniel Henrique Barboza
2024-01-04  6:29   ` Alistair Francis
2023-12-18 12:53 ` Daniel Henrique Barboza [this message]
2024-01-04  6:31   ` [PATCH v13 18/26] target/riscv: add 'rva22u64' CPU Alistair Francis
2023-12-18 12:53 ` [PATCH v13 19/26] target/riscv: implement svade Daniel Henrique Barboza
2024-01-04 22:59   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 20/26] target/riscv: add priv ver restriction to profiles Daniel Henrique Barboza
2024-01-04 23:02   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 21/26] target/riscv/cpu.c: finalize satp_mode earlier Daniel Henrique Barboza
2024-01-04 23:02   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 22/26] target/riscv/cpu.c: add riscv_cpu_is_32bit() Daniel Henrique Barboza
2024-01-04 23:04   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 23/26] target/riscv: add satp_mode profile support Daniel Henrique Barboza
2024-01-04 23:07   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 24/26] target/riscv: add 'parent' in profile description Daniel Henrique Barboza
2024-01-05  2:21   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 25/26] target/riscv: add RVA22S64 profile Daniel Henrique Barboza
2024-01-05  2:24   ` Alistair Francis
2023-12-18 12:53 ` [PATCH v13 26/26] target/riscv: add rva22s64 cpu Daniel Henrique Barboza
2024-01-05  2:25   ` Alistair Francis
2024-01-02 11:40 ` [PATCH v13 00/26] riscv: RVA22 profiles support Daniel Henrique Barboza
2024-01-02 15:12   ` Andrew Jones
2024-01-05  2:39 ` Alistair Francis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231218125334.37184-19-dbarboza@ventanamicro.com \
    --to=dbarboza@ventanamicro.com \
    --cc=ajones@ventanamicro.com \
    --cc=alistair.francis@wdc.com \
    --cc=bmeng@tinylab.org \
    --cc=liwei1518@gmail.com \
    --cc=palmer@rivosinc.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    --cc=zhiwei_liu@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.