* [PATCH v3 1/6] target/riscv: Reuse the conversion function of priv_spec
2024-06-04 6:27 [PATCH v3 0/6] target/riscv: Support RISC-V privilege 1.13 spec Fea.Wang
@ 2024-06-04 6:27 ` Fea.Wang
2024-06-04 6:27 ` [PATCH v3 2/6] target/riscv: Define macros and variables for ss1p13 Fea.Wang
` (4 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Fea.Wang @ 2024-06-04 6:27 UTC (permalink / raw)
To: qemu-devel, qemu-riscv
Cc: Palmer Dabbelt, Alistair Francis, Bin Meng, Weiwei Li,
Daniel Henrique Barboza, Liu Zhiwei, Jim Shu, Fea . Wang,
Frank Chang
From: Jim Shu <jim.shu@sifive.com>
Public the conversion function of priv_spec in cpu.h, so that tcg-cpu.c
could also use it.
Signed-off-by: Jim Shu <jim.shu@sifive.com>
Signed-off-by: Fea.Wang <fea.wang@sifive.com>
Reviewed-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
---
target/riscv/cpu.c | 2 +-
target/riscv/cpu.h | 1 +
target/riscv/tcg/tcg-cpu.c | 13 ++++---------
3 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index cee6fc4a9a..e9e69b9863 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -1786,7 +1786,7 @@ static int priv_spec_from_str(const char *priv_spec_str)
return priv_version;
}
-static const char *priv_spec_to_str(int priv_version)
+const char *priv_spec_to_str(int priv_version)
{
switch (priv_version) {
case PRIV_VERSION_1_10_0:
diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
index 12d8b5344a..94600b91fa 100644
--- a/target/riscv/cpu.h
+++ b/target/riscv/cpu.h
@@ -829,4 +829,5 @@ const char *satp_mode_str(uint8_t satp_mode, bool is_32_bit);
/* Implemented in th_csr.c */
void th_register_custom_csrs(RISCVCPU *cpu);
+const char *priv_spec_to_str(int priv_version);
#endif /* RISCV_CPU_H */
diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c
index 683f604d9f..60fe0fd060 100644
--- a/target/riscv/tcg/tcg-cpu.c
+++ b/target/riscv/tcg/tcg-cpu.c
@@ -76,16 +76,11 @@ static void riscv_cpu_write_misa_bit(RISCVCPU *cpu, uint32_t bit,
static const char *cpu_priv_ver_to_str(int priv_ver)
{
- switch (priv_ver) {
- case PRIV_VERSION_1_10_0:
- return "v1.10.0";
- case PRIV_VERSION_1_11_0:
- return "v1.11.0";
- case PRIV_VERSION_1_12_0:
- return "v1.12.0";
- }
+ const char *priv_spec_str = priv_spec_to_str(priv_ver);
- g_assert_not_reached();
+ g_assert(priv_spec_str);
+
+ return priv_spec_str;
}
static void riscv_cpu_synchronize_from_tb(CPUState *cs,
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v3 2/6] target/riscv: Define macros and variables for ss1p13
2024-06-04 6:27 [PATCH v3 0/6] target/riscv: Support RISC-V privilege 1.13 spec Fea.Wang
2024-06-04 6:27 ` [PATCH v3 1/6] target/riscv: Reuse the conversion function of priv_spec Fea.Wang
@ 2024-06-04 6:27 ` Fea.Wang
2024-06-05 23:53 ` Alistair Francis
2024-06-04 6:27 ` [PATCH v3 3/6] target/riscv: Support the version " Fea.Wang
` (3 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Fea.Wang @ 2024-06-04 6:27 UTC (permalink / raw)
To: qemu-devel, qemu-riscv
Cc: Palmer Dabbelt, Alistair Francis, Bin Meng, Weiwei Li,
Daniel Henrique Barboza, Liu Zhiwei, Fea.Wang, Frank Chang
Add macros and variables for RISC-V privilege 1.13 support.
Signed-off-by: Fea.Wang <fea.wang@sifive.com>
Reviewed-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Weiwei Li <liwei1518@gmail.com>
Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
---
target/riscv/cpu.h | 4 +++-
target/riscv/cpu_cfg.h | 1 +
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
index 94600b91fa..4d73486ea2 100644
--- a/target/riscv/cpu.h
+++ b/target/riscv/cpu.h
@@ -96,12 +96,14 @@ extern RISCVCPUProfile *riscv_profiles[];
#define PRIV_VER_1_10_0_STR "v1.10.0"
#define PRIV_VER_1_11_0_STR "v1.11.0"
#define PRIV_VER_1_12_0_STR "v1.12.0"
+#define PRIV_VER_1_13_0_STR "v1.13.0"
enum {
PRIV_VERSION_1_10_0 = 0,
PRIV_VERSION_1_11_0,
PRIV_VERSION_1_12_0,
+ PRIV_VERSION_1_13_0,
- PRIV_VERSION_LATEST = PRIV_VERSION_1_12_0,
+ PRIV_VERSION_LATEST = PRIV_VERSION_1_13_0,
};
#define VEXT_VERSION_1_00_0 0x00010000
diff --git a/target/riscv/cpu_cfg.h b/target/riscv/cpu_cfg.h
index e1e4f32698..fb7eebde52 100644
--- a/target/riscv/cpu_cfg.h
+++ b/target/riscv/cpu_cfg.h
@@ -136,6 +136,7 @@ struct RISCVCPUConfig {
* TCG always implement/can't be user disabled,
* based on spec version.
*/
+ bool has_priv_1_13;
bool has_priv_1_12;
bool has_priv_1_11;
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH v3 2/6] target/riscv: Define macros and variables for ss1p13
2024-06-04 6:27 ` [PATCH v3 2/6] target/riscv: Define macros and variables for ss1p13 Fea.Wang
@ 2024-06-05 23:53 ` Alistair Francis
0 siblings, 0 replies; 11+ messages in thread
From: Alistair Francis @ 2024-06-05 23:53 UTC (permalink / raw)
To: Fea.Wang
Cc: qemu-devel, qemu-riscv, Palmer Dabbelt, Alistair Francis,
Bin Meng, Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei,
Frank Chang
On Tue, Jun 4, 2024 at 4:23 PM Fea.Wang <fea.wang@sifive.com> wrote:
>
> Add macros and variables for RISC-V privilege 1.13 support.
>
> Signed-off-by: Fea.Wang <fea.wang@sifive.com>
> Reviewed-by: Frank Chang <frank.chang@sifive.com>
> Reviewed-by: Weiwei Li <liwei1518@gmail.com>
> Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Alistair
> ---
> target/riscv/cpu.h | 4 +++-
> target/riscv/cpu_cfg.h | 1 +
> 2 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> index 94600b91fa..4d73486ea2 100644
> --- a/target/riscv/cpu.h
> +++ b/target/riscv/cpu.h
> @@ -96,12 +96,14 @@ extern RISCVCPUProfile *riscv_profiles[];
> #define PRIV_VER_1_10_0_STR "v1.10.0"
> #define PRIV_VER_1_11_0_STR "v1.11.0"
> #define PRIV_VER_1_12_0_STR "v1.12.0"
> +#define PRIV_VER_1_13_0_STR "v1.13.0"
> enum {
> PRIV_VERSION_1_10_0 = 0,
> PRIV_VERSION_1_11_0,
> PRIV_VERSION_1_12_0,
> + PRIV_VERSION_1_13_0,
>
> - PRIV_VERSION_LATEST = PRIV_VERSION_1_12_0,
> + PRIV_VERSION_LATEST = PRIV_VERSION_1_13_0,
> };
>
> #define VEXT_VERSION_1_00_0 0x00010000
> diff --git a/target/riscv/cpu_cfg.h b/target/riscv/cpu_cfg.h
> index e1e4f32698..fb7eebde52 100644
> --- a/target/riscv/cpu_cfg.h
> +++ b/target/riscv/cpu_cfg.h
> @@ -136,6 +136,7 @@ struct RISCVCPUConfig {
> * TCG always implement/can't be user disabled,
> * based on spec version.
> */
> + bool has_priv_1_13;
> bool has_priv_1_12;
> bool has_priv_1_11;
>
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 3/6] target/riscv: Support the version for ss1p13
2024-06-04 6:27 [PATCH v3 0/6] target/riscv: Support RISC-V privilege 1.13 spec Fea.Wang
2024-06-04 6:27 ` [PATCH v3 1/6] target/riscv: Reuse the conversion function of priv_spec Fea.Wang
2024-06-04 6:27 ` [PATCH v3 2/6] target/riscv: Define macros and variables for ss1p13 Fea.Wang
@ 2024-06-04 6:27 ` Fea.Wang
2024-06-05 23:58 ` Alistair Francis
2024-06-04 6:27 ` [PATCH v3 4/6] target/riscv: Add 'P1P13' bit in SMSTATEEN0 Fea.Wang
` (2 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Fea.Wang @ 2024-06-04 6:27 UTC (permalink / raw)
To: qemu-devel, qemu-riscv
Cc: Palmer Dabbelt, Alistair Francis, Bin Meng, Weiwei Li,
Daniel Henrique Barboza, Liu Zhiwei, Fea.Wang, Frank Chang
Add RISC-V privilege 1.13 support.
Signed-off-by: Fea.Wang <fea.wang@sifive.com>
Signed-off-by: Fea.Wang <fea.wang@sifive.com>
Reviewed-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Weiwei Li <liwei1518@gmail.com>
Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
---
target/riscv/cpu.c | 6 +++++-
target/riscv/tcg/tcg-cpu.c | 4 ++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
index e9e69b9863..02c1e12a03 100644
--- a/target/riscv/cpu.c
+++ b/target/riscv/cpu.c
@@ -1775,7 +1775,9 @@ static int priv_spec_from_str(const char *priv_spec_str)
{
int priv_version = -1;
- if (!g_strcmp0(priv_spec_str, PRIV_VER_1_12_0_STR)) {
+ if (!g_strcmp0(priv_spec_str, PRIV_VER_1_13_0_STR)) {
+ priv_version = PRIV_VERSION_1_13_0;
+ } else if (!g_strcmp0(priv_spec_str, PRIV_VER_1_12_0_STR)) {
priv_version = PRIV_VERSION_1_12_0;
} else if (!g_strcmp0(priv_spec_str, PRIV_VER_1_11_0_STR)) {
priv_version = PRIV_VERSION_1_11_0;
@@ -1795,6 +1797,8 @@ const char *priv_spec_to_str(int priv_version)
return PRIV_VER_1_11_0_STR;
case PRIV_VERSION_1_12_0:
return PRIV_VER_1_12_0_STR;
+ case PRIV_VERSION_1_13_0:
+ return PRIV_VER_1_13_0_STR;
default:
return NULL;
}
diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c
index 60fe0fd060..595d3b5b8f 100644
--- a/target/riscv/tcg/tcg-cpu.c
+++ b/target/riscv/tcg/tcg-cpu.c
@@ -318,6 +318,10 @@ static void riscv_cpu_update_named_features(RISCVCPU *cpu)
cpu->cfg.has_priv_1_12 = true;
}
+ if (cpu->env.priv_ver >= PRIV_VERSION_1_13_0) {
+ cpu->cfg.has_priv_1_13 = true;
+ }
+
/* zic64b is 1.12 or later */
cpu->cfg.ext_zic64b = cpu->cfg.cbom_blocksize == 64 &&
cpu->cfg.cbop_blocksize == 64 &&
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH v3 3/6] target/riscv: Support the version for ss1p13
2024-06-04 6:27 ` [PATCH v3 3/6] target/riscv: Support the version " Fea.Wang
@ 2024-06-05 23:58 ` Alistair Francis
2024-06-06 13:43 ` Fea Wang
0 siblings, 1 reply; 11+ messages in thread
From: Alistair Francis @ 2024-06-05 23:58 UTC (permalink / raw)
To: Fea.Wang
Cc: qemu-devel, qemu-riscv, Palmer Dabbelt, Alistair Francis,
Bin Meng, Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei,
Frank Chang
On Tue, Jun 4, 2024 at 4:23 PM Fea.Wang <fea.wang@sifive.com> wrote:
>
> Add RISC-V privilege 1.13 support.
>
> Signed-off-by: Fea.Wang <fea.wang@sifive.com>
> Signed-off-by: Fea.Wang <fea.wang@sifive.com>
> Reviewed-by: Frank Chang <frank.chang@sifive.com>
> Reviewed-by: Weiwei Li <liwei1518@gmail.com>
> Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
This should be the last patch in the series. The idea is that we add
support and then let users enable it.
Alistair
> ---
> target/riscv/cpu.c | 6 +++++-
> target/riscv/tcg/tcg-cpu.c | 4 ++++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> index e9e69b9863..02c1e12a03 100644
> --- a/target/riscv/cpu.c
> +++ b/target/riscv/cpu.c
> @@ -1775,7 +1775,9 @@ static int priv_spec_from_str(const char *priv_spec_str)
> {
> int priv_version = -1;
>
> - if (!g_strcmp0(priv_spec_str, PRIV_VER_1_12_0_STR)) {
> + if (!g_strcmp0(priv_spec_str, PRIV_VER_1_13_0_STR)) {
> + priv_version = PRIV_VERSION_1_13_0;
> + } else if (!g_strcmp0(priv_spec_str, PRIV_VER_1_12_0_STR)) {
> priv_version = PRIV_VERSION_1_12_0;
> } else if (!g_strcmp0(priv_spec_str, PRIV_VER_1_11_0_STR)) {
> priv_version = PRIV_VERSION_1_11_0;
> @@ -1795,6 +1797,8 @@ const char *priv_spec_to_str(int priv_version)
> return PRIV_VER_1_11_0_STR;
> case PRIV_VERSION_1_12_0:
> return PRIV_VER_1_12_0_STR;
> + case PRIV_VERSION_1_13_0:
> + return PRIV_VER_1_13_0_STR;
> default:
> return NULL;
> }
> diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c
> index 60fe0fd060..595d3b5b8f 100644
> --- a/target/riscv/tcg/tcg-cpu.c
> +++ b/target/riscv/tcg/tcg-cpu.c
> @@ -318,6 +318,10 @@ static void riscv_cpu_update_named_features(RISCVCPU *cpu)
> cpu->cfg.has_priv_1_12 = true;
> }
>
> + if (cpu->env.priv_ver >= PRIV_VERSION_1_13_0) {
> + cpu->cfg.has_priv_1_13 = true;
> + }
> +
> /* zic64b is 1.12 or later */
> cpu->cfg.ext_zic64b = cpu->cfg.cbom_blocksize == 64 &&
> cpu->cfg.cbop_blocksize == 64 &&
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v3 3/6] target/riscv: Support the version for ss1p13
2024-06-05 23:58 ` Alistair Francis
@ 2024-06-06 13:43 ` Fea Wang
0 siblings, 0 replies; 11+ messages in thread
From: Fea Wang @ 2024-06-06 13:43 UTC (permalink / raw)
To: Alistair Francis
Cc: qemu-devel, qemu-riscv, Palmer Dabbelt, Alistair Francis,
Bin Meng, Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei,
Frank Chang
[-- Attachment #1: Type: text/plain, Size: 2563 bytes --]
Sure, I will reorder the commits in the next patch series.
Thank you
Sincerely,
Fea
On Thu, Jun 6, 2024 at 7:58 AM Alistair Francis <alistair23@gmail.com>
wrote:
> On Tue, Jun 4, 2024 at 4:23 PM Fea.Wang <fea.wang@sifive.com> wrote:
> >
> > Add RISC-V privilege 1.13 support.
> >
> > Signed-off-by: Fea.Wang <fea.wang@sifive.com>
> > Signed-off-by: Fea.Wang <fea.wang@sifive.com>
> > Reviewed-by: Frank Chang <frank.chang@sifive.com>
> > Reviewed-by: Weiwei Li <liwei1518@gmail.com>
> > Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
>
> This should be the last patch in the series. The idea is that we add
> support and then let users enable it.
>
> Alistair
>
> > ---
> > target/riscv/cpu.c | 6 +++++-
> > target/riscv/tcg/tcg-cpu.c | 4 ++++
> > 2 files changed, 9 insertions(+), 1 deletion(-)
> >
> > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> > index e9e69b9863..02c1e12a03 100644
> > --- a/target/riscv/cpu.c
> > +++ b/target/riscv/cpu.c
> > @@ -1775,7 +1775,9 @@ static int priv_spec_from_str(const char
> *priv_spec_str)
> > {
> > int priv_version = -1;
> >
> > - if (!g_strcmp0(priv_spec_str, PRIV_VER_1_12_0_STR)) {
> > + if (!g_strcmp0(priv_spec_str, PRIV_VER_1_13_0_STR)) {
> > + priv_version = PRIV_VERSION_1_13_0;
> > + } else if (!g_strcmp0(priv_spec_str, PRIV_VER_1_12_0_STR)) {
> > priv_version = PRIV_VERSION_1_12_0;
> > } else if (!g_strcmp0(priv_spec_str, PRIV_VER_1_11_0_STR)) {
> > priv_version = PRIV_VERSION_1_11_0;
> > @@ -1795,6 +1797,8 @@ const char *priv_spec_to_str(int priv_version)
> > return PRIV_VER_1_11_0_STR;
> > case PRIV_VERSION_1_12_0:
> > return PRIV_VER_1_12_0_STR;
> > + case PRIV_VERSION_1_13_0:
> > + return PRIV_VER_1_13_0_STR;
> > default:
> > return NULL;
> > }
> > diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c
> > index 60fe0fd060..595d3b5b8f 100644
> > --- a/target/riscv/tcg/tcg-cpu.c
> > +++ b/target/riscv/tcg/tcg-cpu.c
> > @@ -318,6 +318,10 @@ static void
> riscv_cpu_update_named_features(RISCVCPU *cpu)
> > cpu->cfg.has_priv_1_12 = true;
> > }
> >
> > + if (cpu->env.priv_ver >= PRIV_VERSION_1_13_0) {
> > + cpu->cfg.has_priv_1_13 = true;
> > + }
> > +
> > /* zic64b is 1.12 or later */
> > cpu->cfg.ext_zic64b = cpu->cfg.cbom_blocksize == 64 &&
> > cpu->cfg.cbop_blocksize == 64 &&
> > --
> > 2.34.1
> >
> >
>
[-- Attachment #2: Type: text/html, Size: 3709 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 4/6] target/riscv: Add 'P1P13' bit in SMSTATEEN0
2024-06-04 6:27 [PATCH v3 0/6] target/riscv: Support RISC-V privilege 1.13 spec Fea.Wang
` (2 preceding siblings ...)
2024-06-04 6:27 ` [PATCH v3 3/6] target/riscv: Support the version " Fea.Wang
@ 2024-06-04 6:27 ` Fea.Wang
2024-06-05 23:58 ` Alistair Francis
2024-06-04 6:27 ` [PATCH v3 5/6] target/riscv: Add MEDELEGH, HEDELEGH csrs for RV32 Fea.Wang
2024-06-04 6:27 ` [PATCH v3 6/6] target/riscv: Reserve exception codes for sw-check and hw-err Fea.Wang
5 siblings, 1 reply; 11+ messages in thread
From: Fea.Wang @ 2024-06-04 6:27 UTC (permalink / raw)
To: qemu-devel, qemu-riscv
Cc: Palmer Dabbelt, Alistair Francis, Bin Meng, Weiwei Li,
Daniel Henrique Barboza, Liu Zhiwei, Fea.Wang, Frank Chang
Based on privilege 1.13 spec, there should be a bit56 for 'P1P13' in
mstateen0 that controls access to the hedeleg.
Signed-off-by: Fea.Wang <fea.wang@sifive.com>
Reviewed-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Weiwei Li <liwei1518@gmail.com>
---
target/riscv/cpu_bits.h | 1 +
target/riscv/csr.c | 8 ++++++++
2 files changed, 9 insertions(+)
diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h
index 74318a925c..28bd3fb0b4 100644
--- a/target/riscv/cpu_bits.h
+++ b/target/riscv/cpu_bits.h
@@ -315,6 +315,7 @@
#define SMSTATEEN0_CS (1ULL << 0)
#define SMSTATEEN0_FCSR (1ULL << 1)
#define SMSTATEEN0_JVT (1ULL << 2)
+#define SMSTATEEN0_P1P13 (1ULL << 56)
#define SMSTATEEN0_HSCONTXT (1ULL << 57)
#define SMSTATEEN0_IMSIC (1ULL << 58)
#define SMSTATEEN0_AIA (1ULL << 59)
diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index 58ef7079dc..3dcfb343fe 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -2245,6 +2245,10 @@ static RISCVException write_mstateen0(CPURISCVState *env, int csrno,
wr_mask |= SMSTATEEN0_FCSR;
}
+ if (env->priv_ver >= PRIV_VERSION_1_13_0) {
+ wr_mask |= SMSTATEEN0_P1P13;
+ }
+
return write_mstateen(env, csrno, wr_mask, new_val);
}
@@ -2280,6 +2284,10 @@ static RISCVException write_mstateen0h(CPURISCVState *env, int csrno,
{
uint64_t wr_mask = SMSTATEEN_STATEEN | SMSTATEEN0_HSENVCFG;
+ if (env->priv_ver >= PRIV_VERSION_1_13_0) {
+ wr_mask |= SMSTATEEN0_P1P13;
+ }
+
return write_mstateenh(env, csrno, wr_mask, new_val);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH v3 4/6] target/riscv: Add 'P1P13' bit in SMSTATEEN0
2024-06-04 6:27 ` [PATCH v3 4/6] target/riscv: Add 'P1P13' bit in SMSTATEEN0 Fea.Wang
@ 2024-06-05 23:58 ` Alistair Francis
0 siblings, 0 replies; 11+ messages in thread
From: Alistair Francis @ 2024-06-05 23:58 UTC (permalink / raw)
To: Fea.Wang
Cc: qemu-devel, qemu-riscv, Palmer Dabbelt, Alistair Francis,
Bin Meng, Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei,
Frank Chang
On Tue, Jun 4, 2024 at 4:24 PM Fea.Wang <fea.wang@sifive.com> wrote:
>
> Based on privilege 1.13 spec, there should be a bit56 for 'P1P13' in
> mstateen0 that controls access to the hedeleg.
>
> Signed-off-by: Fea.Wang <fea.wang@sifive.com>
> Reviewed-by: Frank Chang <frank.chang@sifive.com>
> Reviewed-by: Weiwei Li <liwei1518@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Alistair
> ---
> target/riscv/cpu_bits.h | 1 +
> target/riscv/csr.c | 8 ++++++++
> 2 files changed, 9 insertions(+)
>
> diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h
> index 74318a925c..28bd3fb0b4 100644
> --- a/target/riscv/cpu_bits.h
> +++ b/target/riscv/cpu_bits.h
> @@ -315,6 +315,7 @@
> #define SMSTATEEN0_CS (1ULL << 0)
> #define SMSTATEEN0_FCSR (1ULL << 1)
> #define SMSTATEEN0_JVT (1ULL << 2)
> +#define SMSTATEEN0_P1P13 (1ULL << 56)
> #define SMSTATEEN0_HSCONTXT (1ULL << 57)
> #define SMSTATEEN0_IMSIC (1ULL << 58)
> #define SMSTATEEN0_AIA (1ULL << 59)
> diff --git a/target/riscv/csr.c b/target/riscv/csr.c
> index 58ef7079dc..3dcfb343fe 100644
> --- a/target/riscv/csr.c
> +++ b/target/riscv/csr.c
> @@ -2245,6 +2245,10 @@ static RISCVException write_mstateen0(CPURISCVState *env, int csrno,
> wr_mask |= SMSTATEEN0_FCSR;
> }
>
> + if (env->priv_ver >= PRIV_VERSION_1_13_0) {
> + wr_mask |= SMSTATEEN0_P1P13;
> + }
> +
> return write_mstateen(env, csrno, wr_mask, new_val);
> }
>
> @@ -2280,6 +2284,10 @@ static RISCVException write_mstateen0h(CPURISCVState *env, int csrno,
> {
> uint64_t wr_mask = SMSTATEEN_STATEEN | SMSTATEEN0_HSENVCFG;
>
> + if (env->priv_ver >= PRIV_VERSION_1_13_0) {
> + wr_mask |= SMSTATEEN0_P1P13;
> + }
> +
> return write_mstateenh(env, csrno, wr_mask, new_val);
> }
>
> --
> 2.34.1
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 5/6] target/riscv: Add MEDELEGH, HEDELEGH csrs for RV32
2024-06-04 6:27 [PATCH v3 0/6] target/riscv: Support RISC-V privilege 1.13 spec Fea.Wang
` (3 preceding siblings ...)
2024-06-04 6:27 ` [PATCH v3 4/6] target/riscv: Add 'P1P13' bit in SMSTATEEN0 Fea.Wang
@ 2024-06-04 6:27 ` Fea.Wang
2024-06-04 6:27 ` [PATCH v3 6/6] target/riscv: Reserve exception codes for sw-check and hw-err Fea.Wang
5 siblings, 0 replies; 11+ messages in thread
From: Fea.Wang @ 2024-06-04 6:27 UTC (permalink / raw)
To: qemu-devel, qemu-riscv
Cc: Palmer Dabbelt, Alistair Francis, Bin Meng, Weiwei Li,
Daniel Henrique Barboza, Liu Zhiwei, Fea.Wang, Frank Chang
Based on privileged spec 1.13, the RV32 needs to implement MEDELEGH
and HEDELEGH for exception codes 32-47 for reserving and exception codes
48-63 for custom use. Add the CSR number though the implementation is
just reading zero and writing ignore. Besides, for accessing HEDELEGH, it
should be controlled by mstateen0 'P1P13' bit.
Signed-off-by: Fea.Wang <fea.wang@sifive.com>
Reviewed-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
---
target/riscv/cpu_bits.h | 2 ++
target/riscv/csr.c | 31 +++++++++++++++++++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h
index 28bd3fb0b4..f888025c59 100644
--- a/target/riscv/cpu_bits.h
+++ b/target/riscv/cpu_bits.h
@@ -156,6 +156,8 @@
/* 32-bit only */
#define CSR_MSTATUSH 0x310
+#define CSR_MEDELEGH 0x312
+#define CSR_HEDELEGH 0x612
/* Machine Trap Handling */
#define CSR_MSCRATCH 0x340
diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index 3dcfb343fe..d480feb94d 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -3222,6 +3222,33 @@ static RISCVException write_hedeleg(CPURISCVState *env, int csrno,
return RISCV_EXCP_NONE;
}
+static RISCVException read_hedelegh(CPURISCVState *env, int csrno,
+ target_ulong *val)
+{
+ RISCVException ret;
+ ret = smstateen_acc_ok(env, 0, SMSTATEEN0_P1P13);
+ if (ret != RISCV_EXCP_NONE) {
+ return ret;
+ }
+
+ /* Reserved, now read zero */
+ *val = 0;
+ return RISCV_EXCP_NONE;
+}
+
+static RISCVException write_hedelegh(CPURISCVState *env, int csrno,
+ target_ulong val)
+{
+ RISCVException ret;
+ ret = smstateen_acc_ok(env, 0, SMSTATEEN0_P1P13);
+ if (ret != RISCV_EXCP_NONE) {
+ return ret;
+ }
+
+ /* Reserved, now write ignore */
+ return RISCV_EXCP_NONE;
+}
+
static RISCVException rmw_hvien64(CPURISCVState *env, int csrno,
uint64_t *ret_val,
uint64_t new_val, uint64_t wr_mask)
@@ -4626,6 +4653,10 @@ riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = {
[CSR_MSTATUSH] = { "mstatush", any32, read_mstatush,
write_mstatush },
+ [CSR_MEDELEGH] = { "medelegh", any32, read_zero, write_ignore,
+ .min_priv_ver = PRIV_VERSION_1_13_0 },
+ [CSR_HEDELEGH] = { "hedelegh", hmode32, read_hedelegh, write_hedelegh,
+ .min_priv_ver = PRIV_VERSION_1_13_0 },
/* Machine Trap Handling */
[CSR_MSCRATCH] = { "mscratch", any, read_mscratch, write_mscratch,
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v3 6/6] target/riscv: Reserve exception codes for sw-check and hw-err
2024-06-04 6:27 [PATCH v3 0/6] target/riscv: Support RISC-V privilege 1.13 spec Fea.Wang
` (4 preceding siblings ...)
2024-06-04 6:27 ` [PATCH v3 5/6] target/riscv: Add MEDELEGH, HEDELEGH csrs for RV32 Fea.Wang
@ 2024-06-04 6:27 ` Fea.Wang
5 siblings, 0 replies; 11+ messages in thread
From: Fea.Wang @ 2024-06-04 6:27 UTC (permalink / raw)
To: qemu-devel, qemu-riscv
Cc: Palmer Dabbelt, Alistair Francis, Bin Meng, Weiwei Li,
Daniel Henrique Barboza, Liu Zhiwei, Fea.Wang, Frank Chang
Based on the priv-1.13.0, add the exception codes for Software-check and
Hardware-error.
Signed-off-by: Fea.Wang <fea.wang@sifive.com>
Reviewed-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
---
target/riscv/cpu_bits.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h
index f888025c59..f037f727d9 100644
--- a/target/riscv/cpu_bits.h
+++ b/target/riscv/cpu_bits.h
@@ -673,6 +673,8 @@ typedef enum RISCVException {
RISCV_EXCP_INST_PAGE_FAULT = 0xc, /* since: priv-1.10.0 */
RISCV_EXCP_LOAD_PAGE_FAULT = 0xd, /* since: priv-1.10.0 */
RISCV_EXCP_STORE_PAGE_FAULT = 0xf, /* since: priv-1.10.0 */
+ RISCV_EXCP_SW_CHECK = 0x12, /* since: priv-1.13.0 */
+ RISCV_EXCP_HW_ERR = 0x13, /* since: priv-1.13.0 */
RISCV_EXCP_INST_GUEST_PAGE_FAULT = 0x14,
RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT = 0x15,
RISCV_EXCP_VIRT_INSTRUCTION_FAULT = 0x16,
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread