qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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)) {



  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).