From: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
To: Alexey Baturo <baturo.alexey@gmail.com>
Cc: richard.henderson@linaro.org, space.monkey.delivers@gmail.com,
palmer@dabbelt.com, Alistair.Francis@wdc.com,
sagark@eecs.berkeley.edu, kbastian@mail.uni-paderborn.de,
qemu-devel@nongnu.org, qemu-riscv@nongnu.org
Subject: Re: [PATCH v9 3/6] target/riscv: Add helper functions to calculate current number of masked bits for pointer masking
Date: Mon, 13 May 2024 20:11:39 +0800 [thread overview]
Message-ID: <186ca6a0-0faf-4639-83e8-17fc211ef407@linux.alibaba.com> (raw)
In-Reply-To: <20240511101053.1875596-4-me@deliversmonkey.space>
On 2024/5/11 18:10, Alexey Baturo wrote:
> From: Alexey Baturo <baturo.alexey@gmail.com>
>
> Signed-off-by: Alexey Baturo <baturo.alexey@gmail.com>
>
> Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
> ---
> target/riscv/cpu.h | 5 ++++
> target/riscv/cpu_helper.c | 58 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 63 insertions(+)
>
> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> index 52b6ba73c8..9cac723b19 100644
> --- a/target/riscv/cpu.h
> +++ b/target/riscv/cpu.h
> @@ -698,8 +698,13 @@ void cpu_get_tb_cpu_state(CPURISCVState *env, vaddr *pc,
>
> bool riscv_cpu_is_32bit(RISCVCPU *cpu);
>
> +bool riscv_cpu_virt_mem_enabled(CPURISCVState *env);
> +RISCVPmPmm riscv_pm_get_pmm(CPURISCVState *env);
> +int riscv_pm_get_pmlen(RISCVPmPmm pmm);
> +
> RISCVException riscv_csrr(CPURISCVState *env, int csrno,
> target_ulong *ret_value);
> +
> RISCVException riscv_csrrw(CPURISCVState *env, int csrno,
> target_ulong *ret_value,
> target_ulong new_value, target_ulong write_mask);
> diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
> index bf58350669..e4a127ca84 100644
> --- a/target/riscv/cpu_helper.c
> +++ b/target/riscv/cpu_helper.c
> @@ -142,6 +142,64 @@ void cpu_get_tb_cpu_state(CPURISCVState *env, vaddr *pc,
> *pflags = flags;
> }
>
> +RISCVPmPmm riscv_pm_get_pmm(CPURISCVState *env)
> +{
> + int pmm = 0;
> +#ifndef CONFIG_USER_ONLY
> + int priv_mode = cpu_address_mode(env);
This takes care of the MPRV and MPP, but is not enough.
When MPRV == 1 and MXR == 1, we should ignore the address. In this case,
we should return PMM_FIELD_DISABLED.
We should also consider the MPV field, see the comments below.
> + /* Get current PMM field */
> + switch (priv_mode) {
> + case PRV_M:
> + pmm = riscv_cpu_cfg(env)->ext_smmpm ?
> + get_field(env->mseccfg, MSECCFG_PMM) : PMM_FIELD_DISABLED;
> + break;
> + case PRV_S:
> + pmm = riscv_cpu_cfg(env)->ext_smnpm ?
> + get_field(env->menvcfg, MENVCFG_PMM) : PMM_FIELD_DISABLED;
When in virtualization mode, we should use henvcfg instead of menvcfg .
> + break;
> + case PRV_U:
> + pmm = riscv_cpu_cfg(env)->ext_ssnpm ?
> + get_field(env->senvcfg, SENVCFG_PMM) : PMM_FIELD_DISABLED;
When Smode is not implemented, we should use smnpm here.
> + break;
> + default:
> + g_assert_not_reached();
> + }
> +#endif
> + return pmm;
> +}
> +
> +bool riscv_cpu_virt_mem_enabled(CPURISCVState *env)
> +{
> + bool virt_mem_en = false;
> +#ifndef CONFIG_USER_ONLY
> + int satp_mode = 0;
> + int priv_mode = cpu_address_mode(env);
Or S mode is not implemented.
Zhiwei
> + /* Get current PMM field */
> + if (riscv_cpu_mxl(env) == MXL_RV32) {
> + satp_mode = get_field(env->satp, SATP32_MODE);
> + } else {
> + satp_mode = get_field(env->satp, SATP64_MODE);
> + }
> + virt_mem_en = ((satp_mode != VM_1_10_MBARE) && (priv_mode != PRV_M));
> +#endif
> + return virt_mem_en;
> +}
> +
> +int riscv_pm_get_pmlen(RISCVPmPmm pmm)
> +{
> + switch (pmm) {
> + case PMM_FIELD_DISABLED:
> + return 0;
> + case PMM_FIELD_PMLEN7:
> + return 7;
> + case PMM_FIELD_PMLEN16:
> + return 16;
> + default:
> + g_assert_not_reached();
> + }
> + return -1;
> +}
> +
> #ifndef CONFIG_USER_ONLY
>
> /*
next prev parent reply other threads:[~2024-05-13 12:13 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-11 10:10 [PATCH v9 0/6] Pointer Masking update for Zjpm v1.0 Alexey Baturo
2024-05-11 10:10 ` [PATCH v9 1/6] target/riscv: Remove obsolete pointer masking extension code Alexey Baturo
2024-05-11 10:10 ` [PATCH v9 2/6] target/riscv: Add new CSR fields for S{sn, mn, m}pm extensions as part of Zjpm v0.8 Alexey Baturo
2024-05-11 14:16 ` liwei
2024-05-13 11:29 ` Alistair Francis
2024-06-02 23:00 ` Daniel Henrique Barboza
2024-06-27 7:18 ` Frank Chang
2024-06-27 7:42 ` Frank Chang
2024-05-11 10:10 ` [PATCH v9 3/6] target/riscv: Add helper functions to calculate current number of masked bits for pointer masking Alexey Baturo
2024-05-13 12:11 ` LIU Zhiwei [this message]
2024-05-13 12:35 ` LIU Zhiwei
2024-05-13 12:39 ` LIU Zhiwei
2024-05-11 10:10 ` [PATCH v9 4/6] target/riscv: Add pointer masking tb flags Alexey Baturo
2024-05-13 12:13 ` LIU Zhiwei
2024-05-11 10:10 ` [PATCH v9 5/6] target/riscv: Update address modify functions to take into account pointer masking Alexey Baturo
2024-05-13 12:46 ` LIU Zhiwei
2024-05-11 10:10 ` [PATCH v9 6/6] target/riscv: Enable updates for pointer masking variables and thus enable pointer masking extension Alexey Baturo
2024-05-13 12:48 ` LIU Zhiwei
2024-05-11 13:56 ` [PATCH v9 0/6] Pointer Masking update for Zjpm v1.0 liwei
2024-05-13 10:24 ` Alistair Francis
2024-05-13 11:05 ` Alexey Baturo
2024-05-13 11:14 ` Alistair Francis
2024-05-13 11:32 ` Alistair Francis
2024-05-14 16:08 ` Alexey Baturo
2024-05-13 12:50 ` LIU Zhiwei
2024-10-29 17:40 ` Daniel Henrique Barboza
2024-10-30 14:17 ` Alexey Baturo
2024-10-30 16:54 ` 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=186ca6a0-0faf-4639-83e8-17fc211ef407@linux.alibaba.com \
--to=zhiwei_liu@linux.alibaba.com \
--cc=Alistair.Francis@wdc.com \
--cc=baturo.alexey@gmail.com \
--cc=kbastian@mail.uni-paderborn.de \
--cc=palmer@dabbelt.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=sagark@eecs.berkeley.edu \
--cc=space.monkey.delivers@gmail.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.