From: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
To: Florian Lugou <florian.lugou@provenrun.com>, qemu-devel@nongnu.org
Cc: Palmer Dabbelt <palmer@dabbelt.com>,
Alistair Francis <alistair.francis@wdc.com>,
Bin Meng <bmeng.cn@gmail.com>, Weiwei Li <liwei1518@gmail.com>,
Liu Zhiwei <zhiwei_liu@linux.alibaba.com>,
qemu-riscv@nongnu.org
Subject: Re: [PATCH 1/2] target/riscv: Add scontext CSR handling
Date: Fri, 28 Feb 2025 08:15:33 -0300 [thread overview]
Message-ID: <005b2087-278b-48e1-abc6-56b9f222af5c@ventanamicro.com> (raw)
In-Reply-To: <20250226143914.769112-2-florian.lugou@provenrun.com>
On 2/26/25 11:39 AM, Florian Lugou wrote:
> scontext size is 16 bits on RV32 and 32 bits on RV64, as recommended by
> version 1.0 2025-02-21 of the debug specification.
>
> When the Smstateen extension is implemented, accessibility to the
> scontext CSR is controlled by bit 57 of the [mh]stateen0 CSRs.
>
> Signed-off-by: Florian Lugou <florian.lugou@provenrun.com>
> ---
Can you please rebase these patches on top of the maintainer's tree:
https://github.com/alistair23/qemu/tree/riscv-to-apply.next
This patch will have a conflict on cpu_bits.h in that tree.
Looks good otherwise. Thanks,
Daniel
> target/riscv/cpu.h | 1 +
> target/riscv/cpu_bits.h | 5 +++++
> target/riscv/csr.c | 36 ++++++++++++++++++++++++++++++++++++
> target/riscv/debug.c | 1 +
> 4 files changed, 43 insertions(+)
>
> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> index 97713681cb..e47200f409 100644
> --- a/target/riscv/cpu.h
> +++ b/target/riscv/cpu.h
> @@ -430,6 +430,7 @@ struct CPUArchState {
> target_ulong tdata2[RV_MAX_TRIGGERS];
> target_ulong tdata3[RV_MAX_TRIGGERS];
> target_ulong mcontext;
> + target_ulong scontext;
> struct CPUBreakpoint *cpu_breakpoint[RV_MAX_TRIGGERS];
> struct CPUWatchpoint *cpu_watchpoint[RV_MAX_TRIGGERS];
> QEMUTimer *itrigger_timer[RV_MAX_TRIGGERS];
> diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h
> index f97c48a394..add0bb9d0e 100644
> --- a/target/riscv/cpu_bits.h
> +++ b/target/riscv/cpu_bits.h
> @@ -247,6 +247,9 @@
> #define CSR_SIEH 0x114
> #define CSR_SIPH 0x154
>
> +/* Supervisor-Level Sdtrig CSRs (debug) */
> +#define CSR_SCONTEXT 0x5a8
> +
> /* Hpervisor CSRs */
> #define CSR_HSTATUS 0x600
> #define CSR_HEDELEG 0x602
> @@ -959,4 +962,6 @@ typedef enum RISCVException {
> #define MCONTEXT64 0x0000000000001FFFULL
> #define MCONTEXT32_HCONTEXT 0x0000007F
> #define MCONTEXT64_HCONTEXT 0x0000000000003FFFULL
> +#define SCONTEXT32 0x0000FFFF
> +#define SCONTEXT64 0x00000000FFFFFFFFULL
> #endif
> diff --git a/target/riscv/csr.c b/target/riscv/csr.c
> index afb7544f07..1c1ac8ed67 100644
> --- a/target/riscv/csr.c
> +++ b/target/riscv/csr.c
> @@ -3221,6 +3221,10 @@ static RISCVException write_mstateen0(CPURISCVState *env, int csrno,
> wr_mask |= SMSTATEEN0_P1P13;
> }
>
> + if (riscv_cpu_cfg(env)->debug) {
> + wr_mask |= SMSTATEEN0_HSCONTXT;
> + }
> +
> if (riscv_cpu_cfg(env)->ext_smaia || riscv_cpu_cfg(env)->ext_smcsrind) {
> wr_mask |= SMSTATEEN0_SVSLCT;
> }
> @@ -5053,6 +5057,35 @@ static RISCVException write_mcontext(CPURISCVState *env, int csrno,
> return RISCV_EXCP_NONE;
> }
>
> +static RISCVException read_scontext(CPURISCVState *env, int csrno,
> + target_ulong *val)
> +{
> + RISCVException ret = smstateen_acc_ok(env, 0, SMSTATEEN0_HSCONTXT);
> + if (ret != RISCV_EXCP_NONE) {
> + return ret;
> + }
> +
> + *val = env->scontext;
> + return RISCV_EXCP_NONE;
> +}
> +
> +static RISCVException write_scontext(CPURISCVState *env, int csrno,
> + target_ulong val)
> +{
> + bool rv32 = riscv_cpu_mxl(env) == MXL_RV32 ? true : false;
> +
> + RISCVException ret = smstateen_acc_ok(env, 0, SMSTATEEN0_HSCONTXT);
> + if (ret != RISCV_EXCP_NONE) {
> + return ret;
> + }
> +
> + /* Spec suggest 16-bit for RV32 and 34-bit for RV64 */
> + target_ulong mask = rv32 ? SCONTEXT32 : SCONTEXT64;
> +
> + env->scontext = val & mask;
> + return RISCV_EXCP_NONE;
> +}
> +
> static RISCVException read_mnscratch(CPURISCVState *env, int csrno,
> target_ulong *val)
> {
> @@ -5705,6 +5738,9 @@ riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = {
> [CSR_SIEH] = { "sieh", aia_smode32, NULL, NULL, rmw_sieh },
> [CSR_SIPH] = { "siph", aia_smode32, NULL, NULL, rmw_siph },
>
> + /* Supervisor-Level Sdtrig CSRs (debug) */
> + [CSR_SCONTEXT] = { "scontext", debug, read_scontext, write_scontext },
> +
> [CSR_HSTATUS] = { "hstatus", hmode, read_hstatus, write_hstatus,
> .min_priv_ver = PRIV_VERSION_1_12_0 },
> [CSR_HEDELEG] = { "hedeleg", hmode, read_hedeleg, write_hedeleg,
> diff --git a/target/riscv/debug.c b/target/riscv/debug.c
> index f6241a80be..914a9ce0f8 100644
> --- a/target/riscv/debug.c
> +++ b/target/riscv/debug.c
> @@ -1086,4 +1086,5 @@ void riscv_trigger_reset_hold(CPURISCVState *env)
> }
>
> env->mcontext = 0;
> + env->scontext = 0;
> }
next prev parent reply other threads:[~2025-02-28 11:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-26 14:39 [PATCH 0/2] target/riscv: Support scontext-based trigger matching Florian Lugou
2025-02-26 14:39 ` [PATCH 1/2] target/riscv: Add scontext CSR handling Florian Lugou
2025-02-28 11:15 ` Daniel Henrique Barboza [this message]
2025-02-26 14:39 ` [PATCH 2/2] target/riscv: Support matching scontext in Sdtrig's textra CSRs Florian Lugou
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=005b2087-278b-48e1-abc6-56b9f222af5c@ventanamicro.com \
--to=dbarboza@ventanamicro.com \
--cc=alistair.francis@wdc.com \
--cc=bmeng.cn@gmail.com \
--cc=florian.lugou@provenrun.com \
--cc=liwei1518@gmail.com \
--cc=palmer@dabbelt.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.