From: liweiwei <liweiwei@iscas.ac.cn>
To: Daniel Henrique Barboza <dbarboza@ventanamicro.com>,
qemu-devel@nongnu.org
Cc: liweiwei@iscas.ac.cn, qemu-riscv@nongnu.org,
alistair.francis@wdc.com, bmeng@tinylab.org,
zhiwei_liu@linux.alibaba.com, palmer@rivosinc.com
Subject: Re: [PATCH for-8.1 v3 25/26] target/riscv: allow write_misa() to enable RVG
Date: Tue, 21 Mar 2023 11:25:23 +0800 [thread overview]
Message-ID: <8b219f0e-cfd8-390e-405c-2fd9b1e784b5@iscas.ac.cn> (raw)
In-Reply-To: <20230318200436.299464-26-dbarboza@ventanamicro.com>
On 2023/3/19 04:04, Daniel Henrique Barboza wrote:
> Allow write_misa() to enable RVG by changing riscv_cpu_enable_g()
> slighty: instead of returning void, return the current env->misa_ext
> value. This is then retrieved by 'val', which will add the RVG flag
> itself, and then we'll skip validation and go right into commiting the
> changes.
>
> The reason why it's ok to skip validation in this case is because we're
> only allowing RVG (and its associated extensions/Z extensions) to be
> enabled in the hart, and riscv_cpu_enable_g() already does its own
> validation before enabling itself. Everything else is considered to be
> already validated beforehand, so we don't need to repeat ourselves.
>
> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> ---
> target/riscv/cpu.c | 7 +++++--
> target/riscv/cpu.h | 2 ++
> target/riscv/csr.c | 15 +++++++++++++++
> 3 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> index 2d2a354af3..73a5fa46ee 100644
> --- a/target/riscv/cpu.c
> +++ b/target/riscv/cpu.c
> @@ -281,7 +281,8 @@ static uint32_t riscv_get_misa_ext_with_cpucfg(RISCVCPUConfig *cfg)
> return ext;
> }
>
> -static void riscv_cpu_enable_g(RISCVCPU *cpu, Error **errp)
> +
> +target_ulong riscv_cpu_enable_g(RISCVCPU *cpu, Error **errp)
> {
> CPURISCVState *env = &cpu->env;
> RISCVCPUConfig *cfg = &cpu->cfg;
> @@ -289,7 +290,7 @@ static void riscv_cpu_enable_g(RISCVCPU *cpu, Error **errp)
> if (cpu->cfg.ext_zfinx) {
> error_setg(errp, "Unable to enable G: Zfinx is enabled, "
> "so F can not be enabled");
> - return;
> + return 0;
> }
>
> if (!(cfg->ext_i && cfg->ext_m && cfg->ext_a &&
> @@ -315,6 +316,8 @@ static void riscv_cpu_enable_g(RISCVCPU *cpu, Error **errp)
> cfg->ext_icsr = true;
> cfg->ext_ifencei = true;
> }
> +
> + return env->misa_ext;
> }
>
> static void riscv_set_cpucfg_with_misa(RISCVCPUConfig *cfg,
> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> index befc3b8fff..3ca1d4903c 100644
> --- a/target/riscv/cpu.h
> +++ b/target/riscv/cpu.h
> @@ -599,6 +599,8 @@ void riscv_cpu_validate_extensions(RISCVCPU *cpu, uint32_t misa_ext,
> Error **errp);
> void riscv_cpu_commit_cpu_cfg(RISCVCPU *cpu, uint32_t misa_ext);
>
> +target_ulong riscv_cpu_enable_g(RISCVCPU *cpu, Error **errp);
> +
> #define cpu_list riscv_cpu_list
> #define cpu_mmu_index riscv_cpu_mmu_index
>
> diff --git a/target/riscv/csr.c b/target/riscv/csr.c
> index 839862f1a8..4335398c19 100644
> --- a/target/riscv/csr.c
> +++ b/target/riscv/csr.c
> @@ -1381,6 +1381,20 @@ static RISCVException write_misa(CPURISCVState *env, int csrno,
> val &= RVE;
> }
>
> + if (val & RVG && !(env->misa_ext & RVG)) {
> + /*
> + * If the write wants to enable RVG, only RVG and
> + * its dependencies will be updated in the CSR.
> + */
> + val = riscv_cpu_enable_g(cpu, &local_err);
> + if (local_err != NULL) {
> + return RISCV_EXCP_NONE;
> + }
> +
> + val |= RVG;
This assignment is not necessary, since RVG is already set in val.
By the way, RVG is still not disabled if any some of included extensions
are disabled by write_misa.
Regards,
Weiwei Li
> + goto commit;
> + }
> +
> /*
> * This flow is similar to what riscv_cpu_realize() does,
> * with the difference that we will update env->misa_ext
> @@ -1396,6 +1410,7 @@ static RISCVException write_misa(CPURISCVState *env, int csrno,
> return RISCV_EXCP_NONE;
> }
>
> +commit:
> riscv_cpu_commit_cpu_cfg(cpu, val);
>
> if (!(val & RVF)) {
next prev parent reply other threads:[~2023-03-21 3:26 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-18 20:04 [PATCH for-8.1 v3 00/26] target/riscv: rework CPU extensions validation Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 01/26] target/riscv/cpu.c: add riscv_cpu_validate_v() Daniel Henrique Barboza
2023-03-21 1:47 ` LIU Zhiwei
2023-03-18 20:04 ` [PATCH for-8.1 v3 02/26] target/riscv/cpu.c: remove set_vext_version() Daniel Henrique Barboza
2023-03-21 1:49 ` LIU Zhiwei
2023-03-18 20:04 ` [PATCH for-8.1 v3 03/26] target/riscv/cpu.c: remove set_priv_version() Daniel Henrique Barboza
2023-03-21 1:50 ` LIU Zhiwei
2023-03-18 20:04 ` [PATCH for-8.1 v3 04/26] target/riscv: add PRIV_VERSION_LATEST Daniel Henrique Barboza
2023-03-21 1:50 ` LIU Zhiwei
2023-03-18 20:04 ` [PATCH for-8.1 v3 05/26] target/riscv/cpu.c: add priv_spec validate/disable_exts helpers Daniel Henrique Barboza
2023-03-21 4:51 ` LIU Zhiwei
2023-03-18 20:04 ` [PATCH for-8.1 v3 06/26] target/riscv/cpu.c: add riscv_cpu_validate_misa_mxl() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 07/26] target/riscv: move pmp and epmp validations to validate_set_extensions() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 08/26] target/riscv/cpu.c: validate extensions before riscv_timer_init() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 09/26] target/riscv/cpu.c: remove cfg setup from riscv_cpu_init() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 10/26] target/riscv/cpu.c: avoid set_misa() in validate_set_extensions() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 11/26] target/riscv/cpu.c: set cpu config in set_misa() Daniel Henrique Barboza
2023-03-21 3:54 ` liweiwei
2023-03-18 20:04 ` [PATCH for-8.1 v3 12/26] target/riscv/cpu.c: redesign register_cpu_props() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 13/26] target/riscv: put env->misa_ext <-> cpu->cfg code into helpers Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 14/26] target/riscv: add RVG Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 15/26] target/riscv/cpu.c: split RVG code from validate_set_extensions() Daniel Henrique Barboza
2023-03-21 3:10 ` liweiwei
2023-03-18 20:04 ` [PATCH for-8.1 v3 16/26] target/riscv/cpu.c: add riscv_cpu_validate_misa_ext() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 17/26] target/riscv: move riscv_cpu_validate_v() to validate_misa_ext() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 18/26] target/riscv: error out on priv failure for RVH Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 19/26] target/riscv: write env->misa_ext* in register_generic_cpu_props() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 20/26] target/riscv: make validate_misa_ext() use a misa_ext val Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 21/26] target/riscv: split riscv_cpu_validate_set_extensions() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 22/26] target/riscv: use misa_ext val in riscv_cpu_validate_extensions() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 23/26] target/riscv: rework write_misa() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 24/26] target/riscv: update cpu->cfg misa bits in commit_cpu_cfg() Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 25/26] target/riscv: allow write_misa() to enable RVG Daniel Henrique Barboza
2023-03-21 3:25 ` liweiwei [this message]
2023-03-22 17:42 ` Daniel Henrique Barboza
2023-03-18 20:04 ` [PATCH for-8.1 v3 26/26] target/riscv: allow write_misa() to enable RVV Daniel Henrique Barboza
2023-03-21 3:41 ` liweiwei
2023-03-22 17:39 ` Daniel Henrique Barboza
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=8b219f0e-cfd8-390e-405c-2fd9b1e784b5@iscas.ac.cn \
--to=liweiwei@iscas.ac.cn \
--cc=alistair.francis@wdc.com \
--cc=bmeng@tinylab.org \
--cc=dbarboza@ventanamicro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).