All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ruinland ChuanTzu Tsai <ruinland@andestech.com>
To: Alistair Francis <alistair23@gmail.com>
Cc: ycliang@andestech.com,
	"Alan Quey-Liang Kao\(\(\(\(\(\(\(\(\(\(\)"
	<alankao@andestech.com>, wangjunqiang <wangjunqiang@iscas.ac.cn>,
	Dylan Jhong <dylan@andestech.com>,
	"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
	"open list:RISC-V" <qemu-riscv@nongnu.org>,
	Bin Meng <bmeng.cn@gmail.com>
Subject: Re: [RFC PATCH v5 3/3] riscv: Enable custom CSR support for Andes AX25 and A25 CPUs
Date: Fri, 22 Oct 2021 16:37:24 +0800	[thread overview]
Message-ID: <YXJ4RE9bGe4sphXG@ruinland-x1c> (raw)
In-Reply-To: <CAKmqyKM9PfTJZf8iDgADUyfZb-kXvwb4-w2Wq3fO+-HP1GU7QQ@mail.gmail.com>

On Fri, Oct 22, 2021 at 08:44:56AM +1000, Alistair Francis wrote:
> On Fri, Oct 22, 2021 at 1:13 AM Ruinland Chuan-Tzu Tsai
> <ruinland@andestech.com> wrote:
> >
> > Add CSR bits definitions, CSR table and handler functions for Andes
> > AX25 and A25 CPUs. Also, enable the logic in a(x)25_cpu_init().
> >
> > Signed-off-by: Ruinland Chuan-Tzu Tsai <ruinland@andestech.com>
> > ---
> >  target/riscv/andes_cpu_bits.h  | 129 +++++++++++++++++++++++
> >  target/riscv/cpu.c             |   4 +
> >  target/riscv/csr_andes.c       | 183 +++++++++++++++++++++++++++++++++
> >  target/riscv/custom_csr_defs.h |   3 +-
> >  target/riscv/meson.build       |   1 +
> >  5 files changed, 319 insertions(+), 1 deletion(-)
> >  create mode 100644 target/riscv/andes_cpu_bits.h
> >  create mode 100644 target/riscv/csr_andes.c
> >
> > diff --git a/target/riscv/andes_cpu_bits.h b/target/riscv/andes_cpu_bits.h
> > new file mode 100644
> > index 0000000000..84b0900423
> > --- /dev/null
> > +++ b/target/riscv/andes_cpu_bits.h
> > @@ -0,0 +1,129 @@
> > +/*
> > + * SPDX-License-Identifier: GPL-2.0+
> > + *
> > + * Andes custom CSRs bit definitions
> > + *
> > + */
> > +
> > +/*
> > + * ========= Missing drafted/standard CSR definitions =========
> > + * TINFO is in official debug sepc, it's not in cpu_bits.h yet.
> > + */
> > +#define CSR_TINFO           0x7a4
> > +
> > +#if !defined(CONFIG_USER_ONLY)
> > +/* ========= AndeStar V5 machine mode CSRs ========= */
> > +/* Configuration Registers */
> > +#define CSR_MICM_CFG            0xfc0
> > +#define CSR_MDCM_CFG            0xfc1
> > +#define CSR_MMSC_CFG            0xfc2
> > +#define CSR_MMSC_CFG2           0xfc3
> > +#define CSR_MVEC_CFG            0xfc7
> > +
> > +/* Crash Debug CSRs */
> > +#define CSR_MCRASH_STATESAVE    0xfc8
> > +#define CSR_MSTATUS_CRASHSAVE   0xfc9
> > +
> > +/* Memory CSRs */
> > +#define CSR_MILMB               0x7c0
> > +#define CSR_MDLMB               0x7c1
> > +#define CSR_MECC_CODE           0x7C2
> > +#define CSR_MNVEC               0x7c3
> > +#define CSR_MCACHE_CTL          0x7ca
> > +#define CSR_MCCTLBEGINADDR      0x7cb
> > +#define CSR_MCCTLCOMMAND        0x7cc
> > +#define CSR_MCCTLDATA           0x7cd
> > +#define CSR_MPPIB               0x7f0
> > +#define CSR_MFIOB               0x7f1
> > +
> > +/* Hardware Stack Protection & Recording */
> > +#define CSR_MHSP_CTL            0x7c6
> > +#define CSR_MSP_BOUND           0x7c7
> > +#define CSR_MSP_BASE            0x7c8
> > +#define CSR_MXSTATUS            0x7c4
> > +#define CSR_MDCAUSE             0x7c9
> > +#define CSR_MSLIDELEG           0x7d5
> > +#define CSR_MSAVESTATUS         0x7d6
> > +#define CSR_MSAVEEPC1           0x7d7
> > +#define CSR_MSAVECAUSE1         0x7d8
> > +#define CSR_MSAVEEPC2           0x7d9
> > +#define CSR_MSAVECAUSE2         0x7da
> > +#define CSR_MSAVEDCAUSE1        0x7db
> > +#define CSR_MSAVEDCAUSE2        0x7dc
> > +
> > +/* Control CSRs */
> > +#define CSR_MPFT_CTL            0x7c5
> > +#define CSR_MMISC_CTL           0x7d0
> > +#define CSR_MCLK_CTL            0x7df
> > +
> > +/* Counter related CSRs */
> > +#define CSR_MCOUNTERWEN         0x7ce
> > +#define CSR_MCOUNTERINTEN       0x7cf
> > +#define CSR_MCOUNTERMASK_M      0x7d1
> > +#define CSR_MCOUNTERMASK_S      0x7d2
> > +#define CSR_MCOUNTERMASK_U      0x7d3
> > +#define CSR_MCOUNTEROVF         0x7d4
> > +
> > +/* Enhanced CLIC CSRs */
> > +#define CSR_MIRQ_ENTRY          0x7ec
> > +#define CSR_MINTSEL_JAL         0x7ed
> > +#define CSR_PUSHMCAUSE          0x7ee
> > +#define CSR_PUSHMEPC            0x7ef
> > +#define CSR_PUSHMXSTATUS        0x7eb
> > +
> > +/* Andes Physical Memory Attribute(PMA) CSRs */
> > +#define CSR_PMACFG0             0xbc0
> > +#define CSR_PMACFG1             0xbc1
> > +#define CSR_PMACFG2             0xbc2
> > +#define CSR_PMACFG3             0xbc3
> > +#define CSR_PMAADDR0            0xbd0
> > +#define CSR_PMAADDR1            0xbd1
> > +#define CSR_PMAADDR2            0xbd2
> > +#define CSR_PMAADDR3            0xbd2
> > +#define CSR_PMAADDR4            0xbd4
> > +#define CSR_PMAADDR5            0xbd5
> > +#define CSR_PMAADDR6            0xbd6
> > +#define CSR_PMAADDR7            0xbd7
> > +#define CSR_PMAADDR8            0xbd8
> > +#define CSR_PMAADDR9            0xbd9
> > +#define CSR_PMAADDR10           0xbda
> > +#define CSR_PMAADDR11           0xbdb
> > +#define CSR_PMAADDR12           0xbdc
> > +#define CSR_PMAADDR13           0xbdd
> > +#define CSR_PMAADDR14           0xbde
> > +#define CSR_PMAADDR15           0xbdf
> > +
> > +/* ========= AndeStar V5 supervisor mode CSRs ========= */
> > +/* Supervisor trap registers */
> > +#define CSR_SLIE                0x9c4
> > +#define CSR_SLIP                0x9c5
> > +#define CSR_SDCAUSE             0x9c9
> > +
> > +/* Supervisor counter registers */
> > +#define CSR_SCOUNTERINTEN       0x9cf
> > +#define CSR_SCOUNTERMASK_M      0x9d1
> > +#define CSR_SCOUNTERMASK_S      0x9d2
> > +#define CSR_SCOUNTERMASK_U      0x9d3
> > +#define CSR_SCOUNTEROVF         0x9d4
> > +#define CSR_SCOUNTINHIBIT       0x9e0
> > +#define CSR_SHPMEVENT3          0x9e3
> > +#define CSR_SHPMEVENT4          0x9e4
> > +#define CSR_SHPMEVENT5          0x9e5
> > +#define CSR_SHPMEVENT6          0x9e6
> > +
> > +/* Supervisor control registers */
> > +#define CSR_SCCTLDATA           0x9cd
> > +#define CSR_SMISC_CTL           0x9d0
> > +
> > +#endif /* !defined(CONFIG_USER_ONLY) */
> > +
> > +/* ========= AndeStar V5 user mode CSRs ========= */
> > +/* User mode control registers */
> > +#define CSR_UITB                0x800
> > +#define CSR_UCODE               0x801
> > +#define CSR_UDCAUSE             0x809
> > +#define CSR_UCCTLBEGINADDR      0x80b
> > +#define CSR_UCCTLCOMMAND        0x80c
> > +#define CSR_WFE                 0x810
> > +#define CSR_SLEEPVALUE          0x811
> > +#define CSR_TXEVT               0x812
> > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> > index a72fd32f01..fe63e68b8e 100644
> > --- a/target/riscv/cpu.c
> > +++ b/target/riscv/cpu.c
> > @@ -192,6 +192,8 @@ static void ax25_cpu_init(Object *obj)
> >      CPURISCVState *env = &RISCV_CPU(obj)->env;
> >      set_misa(env, RV64 | RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU);
> >      set_priv_version(env, PRIV_VERSION_1_10_0);
> > +    setup_custom_csr(env, andes_custom_csr_table);
> > +    env->custom_csr_val = g_malloc(andes_custom_csr_size);
> >  }
> >
> >  static void rv64_sifive_u_cpu_init(Object *obj)
> > @@ -254,6 +256,8 @@ static void a25_cpu_init(Object *obj)
> >      CPURISCVState *env = &RISCV_CPU(obj)->env;
> >      set_misa(env, RV32 | RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU);
> >      set_priv_version(env, PRIV_VERSION_1_10_0);
> > +    setup_custom_csr(env, andes_custom_csr_table);
> > +    env->custom_csr_val = g_malloc(andes_custom_csr_size);
> >  }
> >  #endif
> >
> > diff --git a/target/riscv/csr_andes.c b/target/riscv/csr_andes.c
> > new file mode 100644
> > index 0000000000..8617f40483
> > --- /dev/null
> > +++ b/target/riscv/csr_andes.c
> > @@ -0,0 +1,183 @@
> > +/*
> > + * Copyright (c) 2021 Andes Technology Corp.
> > + * SPDX-License-Identifier: GPL-2.0+
> > + * Andes custom CSR table and handling functions
> > + */
> > +
> > +#include "qemu/osdep.h"
> > +#include "qemu/log.h"
> > +#include "cpu.h"
> > +#include "qemu/main-loop.h"
> > +#include "exec/exec-all.h"
> > +#include "andes_cpu_bits.h"
> > +
> > +struct andes_csr_val {
> > +    target_long uitb;
> > +};
> > +
> > +#if !defined(CONFIG_USER_ONLY)
> > +static RISCVException read_mmsc_cfg(CPURISCVState *env, int csrno, target_ulong *val)
> > +{
> > +    /* enable pma probe */
> > +    *val = 0x40000000;
> > +    return RISCV_EXCP_NONE;
> > +}
> > +#endif
> > +
> > +static RISCVException write_uitb(CPURISCVState *env, int csrno, target_ulong val)
> > +{
> > +    struct andes_csr_val *andes_csr = env->custom_csr_val;
> > +    andes_csr->uitb = val;
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +static RISCVException read_uitb(CPURISCVState *env, int csrno, target_ulong *val)
> > +{
> > +    struct andes_csr_val *andes_csr = env->custom_csr_val;
> > +    *val = andes_csr->uitb;
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +
> > +static RISCVException any(CPURISCVState *env, int csrno)
> > +{
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +static RISCVException read_zero(CPURISCVState *env, int csrno, target_ulong *val)
> > +{
> > +    *val = 0;
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +static RISCVException write_stub(CPURISCVState *env, int csrno, target_ulong val)
> > +{
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +int andes_custom_csr_size = sizeof(struct andes_csr_val);
> 
> I think just drop this value and use sizeof(struct andes_csr_val) in
> the other places.

Wilco.
Thanks for the tips.


Cordially yours,
Ruinland
> 
> I haven't checked this against the Andes spec, but overall the series
> looks good.
> 
> Alistair
> 
> > +riscv_custom_csr_operations andes_custom_csr_table[MAX_CUSTOM_CSR_NUM] = {
> > +    /* ========= AndeStar V5 machine mode CSRs ========= */
> > +    #if !defined(CONFIG_USER_ONLY)
> > +    /* Configuration Registers */
> > +    {CSR_MICM_CFG,         { "micm_cfg",          any, read_zero, write_stub} },
> > +    {CSR_MDCM_CFG,         { "mdcm_cfg",          any, read_zero, write_stub} },
> > +    {CSR_MMSC_CFG,         { "mmsc_cfg",          any, read_mmsc_cfg, write_stub} },
> > +    {CSR_MMSC_CFG2,        { "mmsc_cfg2",         any, read_zero, write_stub} },
> > +    {CSR_MVEC_CFG,         { "mvec_cfg",          any, read_zero, write_stub} },
> > +
> > +    /* Crash Debug CSRs */
> > +    {CSR_MCRASH_STATESAVE,  { "mcrash_statesave",  any, read_zero, write_stub} },
> > +    {CSR_MSTATUS_CRASHSAVE, { "mstatus_crashsave", any, read_zero, write_stub} },
> > +
> > +    /* Memory CSRs */
> > +    {CSR_MILMB,            { "milmb",             any, read_zero, write_stub} },
> > +    {CSR_MDLMB,            { "mdlmb",             any, read_zero, write_stub} },
> > +    {CSR_MECC_CODE,        { "mecc_code",         any, read_zero, write_stub} },
> > +    {CSR_MNVEC,            { "mnvec",             any, read_zero, write_stub} },
> > +    {CSR_MCACHE_CTL,       { "mcache_ctl",        any, read_zero, write_stub} },
> > +    {CSR_MCCTLBEGINADDR,   { "mcctlbeginaddr",    any, read_zero, write_stub} },
> > +    {CSR_MCCTLCOMMAND,     { "mcctlcommand",      any, read_zero, write_stub} },
> > +    {CSR_MCCTLDATA,        { "mcctldata",         any, read_zero, write_stub} },
> > +    {CSR_MPPIB,            { "mppib",             any, read_zero, write_stub} },
> > +    {CSR_MFIOB,            { "mfiob",             any, read_zero, write_stub} },
> > +
> > +    /* Hardware Stack Protection & Recording */
> > +    {CSR_MHSP_CTL,         { "mhsp_ctl",          any, read_zero, write_stub} },
> > +    {CSR_MSP_BOUND,        { "msp_bound",         any, read_zero, write_stub} },
> > +    {CSR_MSP_BASE,         { "msp_base",          any, read_zero, write_stub} },
> > +    {CSR_MXSTATUS,         { "mxstatus",          any, read_zero, write_stub} },
> > +    {CSR_MDCAUSE,          { "mdcause",           any, read_zero, write_stub} },
> > +    {CSR_MSLIDELEG,        { "mslideleg",         any, read_zero, write_stub} },
> > +    {CSR_MSAVESTATUS,      { "msavestatus",       any, read_zero, write_stub} },
> > +    {CSR_MSAVEEPC1,        { "msaveepc1",         any, read_zero, write_stub} },
> > +    {CSR_MSAVECAUSE1,      { "msavecause1",       any, read_zero, write_stub} },
> > +    {CSR_MSAVEEPC2,        { "msaveepc2",         any, read_zero, write_stub} },
> > +    {CSR_MSAVECAUSE2,      { "msavecause2",       any, read_zero, write_stub} },
> > +    {CSR_MSAVEDCAUSE1,     { "msavedcause1",      any, read_zero, write_stub} },
> > +    {CSR_MSAVEDCAUSE2,     { "msavedcause2",      any, read_zero, write_stub} },
> > +
> > +    /* Control CSRs */
> > +    {CSR_MPFT_CTL,         { "mpft_ctl",          any, read_zero, write_stub} },
> > +    {CSR_MMISC_CTL,        { "mmisc_ctl",         any, read_zero, write_stub} },
> > +    {CSR_MCLK_CTL,         { "mclk_ctl",          any, read_zero, write_stub} },
> > +
> > +    /* Counter related CSRs */
> > +    {CSR_MCOUNTERWEN,      { "mcounterwen",       any, read_zero, write_stub} },
> > +    {CSR_MCOUNTERINTEN,    { "mcounterinten",     any, read_zero, write_stub} },
> > +    {CSR_MCOUNTERMASK_M,   { "mcountermask_m",    any, read_zero, write_stub} },
> > +    {CSR_MCOUNTERMASK_S,   { "mcountermask_s",    any, read_zero, write_stub} },
> > +    {CSR_MCOUNTERMASK_U,   { "mcountermask_u",    any, read_zero, write_stub} },
> > +    {CSR_MCOUNTEROVF,      { "mcounterovf",       any, read_zero, write_stub} },
> > +
> > +    /* Enhanced CLIC CSRs */
> > +    {CSR_MIRQ_ENTRY,       { "mirq_entry",        any, read_zero, write_stub} },
> > +    {CSR_MINTSEL_JAL,      { "mintsel_jal",       any, read_zero, write_stub} },
> > +    {CSR_PUSHMCAUSE,       { "pushmcause",        any, read_zero, write_stub} },
> > +    {CSR_PUSHMEPC,         { "pushmepc",          any, read_zero, write_stub} },
> > +    {CSR_PUSHMXSTATUS,     { "pushmxstatus",      any, read_zero, write_stub} },
> > +
> > +    /* Andes Physical Memory Attribute(PMA) CSRs */
> > +    {CSR_PMACFG0,          { "pmacfg0",           any, read_zero, write_stub} },
> > +    {CSR_PMACFG1,          { "pmacfg1",           any, read_zero, write_stub} },
> > +    {CSR_PMACFG2,          { "pmacfg2",           any, read_zero, write_stub} },
> > +    {CSR_PMACFG3,          { "pmacfg3",           any, read_zero, write_stub} },
> > +    {CSR_PMAADDR0,         { "pmaaddr0",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR1,         { "pmaaddr1",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR2,         { "pmaaddr2",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR3,         { "pmaaddr3",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR4,         { "pmaaddr4",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR5,         { "pmaaddr5",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR6,         { "pmaaddr6",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR7,         { "pmaaddr7",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR8,         { "pmaaddr8",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR9,         { "pmaaddr9",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR10,        { "pmaaddr10",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR11,        { "pmaaddr11",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR12,        { "pmaaddr12",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR13,        { "pmaaddr13",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR14,        { "pmaaddr14",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR15,        { "pmaaddr15",         any, read_zero, write_stub} },
> > +
> > +    /* Debug/Trace Registers (shared with Debug Mode) */
> > +    {CSR_TSELECT,          { "tselect",           any, read_zero, write_stub} },
> > +    {CSR_TDATA1,           { "tdata1",            any, read_zero, write_stub} },
> > +    {CSR_TDATA2,           { "tdata2",            any, read_zero, write_stub} },
> > +    {CSR_TDATA3,           { "tdata3",            any, read_zero, write_stub} },
> > +    {CSR_TINFO,            { "tinfo",             any, read_zero, write_stub} },
> > +
> > +    /* ========= AndeStar V5 supervisor mode CSRs ========= */
> > +    /* Supervisor trap registers */
> > +    {CSR_SLIE,             { "slie",              any, read_zero, write_stub} },
> > +    {CSR_SLIP,             { "slip",              any, read_zero, write_stub} },
> > +    {CSR_SDCAUSE,          { "sdcause",           any, read_zero, write_stub} },
> > +
> > +    /* Supervisor counter registers */
> > +    {CSR_SCOUNTERINTEN,    { "scounterinten",     any, read_zero, write_stub} },
> > +    {CSR_SCOUNTERMASK_M,   { "scountermask_m",    any, read_zero, write_stub} },
> > +    {CSR_SCOUNTERMASK_S,   { "scountermask_s",    any, read_zero, write_stub} },
> > +    {CSR_SCOUNTERMASK_U,   { "scountermask_u",    any, read_zero, write_stub} },
> > +    {CSR_SCOUNTEROVF,      { "scounterovf",       any, read_zero, write_stub} },
> > +    {CSR_SCOUNTINHIBIT,    { "scountinhibit",     any, read_zero, write_stub} },
> > +    {CSR_SHPMEVENT3,       { "shpmevent3",        any, read_zero, write_stub} },
> > +    {CSR_SHPMEVENT4,       { "shpmevent4",        any, read_zero, write_stub} },
> > +    {CSR_SHPMEVENT5,       { "shpmevent5",        any, read_zero, write_stub} },
> > +    {CSR_SHPMEVENT6,       { "shpmevent6",        any, read_zero, write_stub} },
> > +
> > +    /* Supervisor control registers */
> > +    {CSR_SCCTLDATA,        { "scctldata",         any, read_zero, write_stub} },
> > +    {CSR_SMISC_CTL,        { "smisc_ctl",         any, read_zero, write_stub} },
> > +    #endif
> > +
> > +    /* ========= AndeStar V5 user mode CSRs ========= */
> > +    /* User mode control registers */
> > +    {CSR_UITB,             { "uitb",              any, read_uitb, write_uitb} },
> > +    {CSR_UCODE,            { "ucode",             any, read_zero, write_stub} },
> > +    {CSR_UDCAUSE,          { "udcause",           any, read_zero, write_stub} },
> > +    {CSR_UCCTLBEGINADDR,   { "ucctlbeginaddr",    any, read_zero, write_stub} },
> > +    {CSR_UCCTLCOMMAND,     { "ucctlcommand",      any, read_zero, write_stub} },
> > +    {CSR_WFE,              { "wfe",               any, read_zero, write_stub} },
> > +    {CSR_SLEEPVALUE,       { "sleepvalue",        any, read_zero, write_stub} },
> > +    {CSR_TXEVT,            { "csr_txevt",         any, read_zero, write_stub} },
> > +    {0, { "", NULL, NULL, NULL } },
> > +    };
> > diff --git a/target/riscv/custom_csr_defs.h b/target/riscv/custom_csr_defs.h
> > index 4dbf8cf1fd..b09083585b 100644
> > --- a/target/riscv/custom_csr_defs.h
> > +++ b/target/riscv/custom_csr_defs.h
> > @@ -4,4 +4,5 @@
> >   * Custom CSR variables provided by <cpu_model_name>_csr.c
> >   */
> >
> > -/* Left blank purposely in this commit. */
> > +extern riscv_custom_csr_operations andes_custom_csr_table[MAX_CUSTOM_CSR_NUM];
> > +extern int andes_custom_csr_size;
> > diff --git a/target/riscv/meson.build b/target/riscv/meson.build
> > index d5e0bc93ea..5c87672ff9 100644
> > --- a/target/riscv/meson.build
> > +++ b/target/riscv/meson.build
> > @@ -9,6 +9,7 @@ gen = [
> >  riscv_ss = ss.source_set()
> >  riscv_ss.add(gen)
> >  riscv_ss.add(files(
> > +  'csr_andes.c',
> >    'cpu.c',
> >    'cpu_helper.c',
> >    'csr.c',
> > --
> > 2.25.1
> >


WARNING: multiple messages have this Message-ID (diff)
From: Ruinland ChuanTzu Tsai <ruinland@andestech.com>
To: Alistair Francis <alistair23@gmail.com>
Cc: wangjunqiang <wangjunqiang@iscas.ac.cn>,
	Bin Meng <bmeng.cn@gmail.com>,
	"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
	"open list:RISC-V" <qemu-riscv@nongnu.org>,
	<ycliang@andestech.com>,
	"Alan Quey-Liang Kao(((((((((()" <alankao@andestech.com>,
	Dylan Jhong <dylan@andestech.com>
Subject: Re: [RFC PATCH v5 3/3] riscv: Enable custom CSR support for Andes AX25 and A25 CPUs
Date: Fri, 22 Oct 2021 16:37:24 +0800	[thread overview]
Message-ID: <YXJ4RE9bGe4sphXG@ruinland-x1c> (raw)
In-Reply-To: <CAKmqyKM9PfTJZf8iDgADUyfZb-kXvwb4-w2Wq3fO+-HP1GU7QQ@mail.gmail.com>

On Fri, Oct 22, 2021 at 08:44:56AM +1000, Alistair Francis wrote:
> On Fri, Oct 22, 2021 at 1:13 AM Ruinland Chuan-Tzu Tsai
> <ruinland@andestech.com> wrote:
> >
> > Add CSR bits definitions, CSR table and handler functions for Andes
> > AX25 and A25 CPUs. Also, enable the logic in a(x)25_cpu_init().
> >
> > Signed-off-by: Ruinland Chuan-Tzu Tsai <ruinland@andestech.com>
> > ---
> >  target/riscv/andes_cpu_bits.h  | 129 +++++++++++++++++++++++
> >  target/riscv/cpu.c             |   4 +
> >  target/riscv/csr_andes.c       | 183 +++++++++++++++++++++++++++++++++
> >  target/riscv/custom_csr_defs.h |   3 +-
> >  target/riscv/meson.build       |   1 +
> >  5 files changed, 319 insertions(+), 1 deletion(-)
> >  create mode 100644 target/riscv/andes_cpu_bits.h
> >  create mode 100644 target/riscv/csr_andes.c
> >
> > diff --git a/target/riscv/andes_cpu_bits.h b/target/riscv/andes_cpu_bits.h
> > new file mode 100644
> > index 0000000000..84b0900423
> > --- /dev/null
> > +++ b/target/riscv/andes_cpu_bits.h
> > @@ -0,0 +1,129 @@
> > +/*
> > + * SPDX-License-Identifier: GPL-2.0+
> > + *
> > + * Andes custom CSRs bit definitions
> > + *
> > + */
> > +
> > +/*
> > + * ========= Missing drafted/standard CSR definitions =========
> > + * TINFO is in official debug sepc, it's not in cpu_bits.h yet.
> > + */
> > +#define CSR_TINFO           0x7a4
> > +
> > +#if !defined(CONFIG_USER_ONLY)
> > +/* ========= AndeStar V5 machine mode CSRs ========= */
> > +/* Configuration Registers */
> > +#define CSR_MICM_CFG            0xfc0
> > +#define CSR_MDCM_CFG            0xfc1
> > +#define CSR_MMSC_CFG            0xfc2
> > +#define CSR_MMSC_CFG2           0xfc3
> > +#define CSR_MVEC_CFG            0xfc7
> > +
> > +/* Crash Debug CSRs */
> > +#define CSR_MCRASH_STATESAVE    0xfc8
> > +#define CSR_MSTATUS_CRASHSAVE   0xfc9
> > +
> > +/* Memory CSRs */
> > +#define CSR_MILMB               0x7c0
> > +#define CSR_MDLMB               0x7c1
> > +#define CSR_MECC_CODE           0x7C2
> > +#define CSR_MNVEC               0x7c3
> > +#define CSR_MCACHE_CTL          0x7ca
> > +#define CSR_MCCTLBEGINADDR      0x7cb
> > +#define CSR_MCCTLCOMMAND        0x7cc
> > +#define CSR_MCCTLDATA           0x7cd
> > +#define CSR_MPPIB               0x7f0
> > +#define CSR_MFIOB               0x7f1
> > +
> > +/* Hardware Stack Protection & Recording */
> > +#define CSR_MHSP_CTL            0x7c6
> > +#define CSR_MSP_BOUND           0x7c7
> > +#define CSR_MSP_BASE            0x7c8
> > +#define CSR_MXSTATUS            0x7c4
> > +#define CSR_MDCAUSE             0x7c9
> > +#define CSR_MSLIDELEG           0x7d5
> > +#define CSR_MSAVESTATUS         0x7d6
> > +#define CSR_MSAVEEPC1           0x7d7
> > +#define CSR_MSAVECAUSE1         0x7d8
> > +#define CSR_MSAVEEPC2           0x7d9
> > +#define CSR_MSAVECAUSE2         0x7da
> > +#define CSR_MSAVEDCAUSE1        0x7db
> > +#define CSR_MSAVEDCAUSE2        0x7dc
> > +
> > +/* Control CSRs */
> > +#define CSR_MPFT_CTL            0x7c5
> > +#define CSR_MMISC_CTL           0x7d0
> > +#define CSR_MCLK_CTL            0x7df
> > +
> > +/* Counter related CSRs */
> > +#define CSR_MCOUNTERWEN         0x7ce
> > +#define CSR_MCOUNTERINTEN       0x7cf
> > +#define CSR_MCOUNTERMASK_M      0x7d1
> > +#define CSR_MCOUNTERMASK_S      0x7d2
> > +#define CSR_MCOUNTERMASK_U      0x7d3
> > +#define CSR_MCOUNTEROVF         0x7d4
> > +
> > +/* Enhanced CLIC CSRs */
> > +#define CSR_MIRQ_ENTRY          0x7ec
> > +#define CSR_MINTSEL_JAL         0x7ed
> > +#define CSR_PUSHMCAUSE          0x7ee
> > +#define CSR_PUSHMEPC            0x7ef
> > +#define CSR_PUSHMXSTATUS        0x7eb
> > +
> > +/* Andes Physical Memory Attribute(PMA) CSRs */
> > +#define CSR_PMACFG0             0xbc0
> > +#define CSR_PMACFG1             0xbc1
> > +#define CSR_PMACFG2             0xbc2
> > +#define CSR_PMACFG3             0xbc3
> > +#define CSR_PMAADDR0            0xbd0
> > +#define CSR_PMAADDR1            0xbd1
> > +#define CSR_PMAADDR2            0xbd2
> > +#define CSR_PMAADDR3            0xbd2
> > +#define CSR_PMAADDR4            0xbd4
> > +#define CSR_PMAADDR5            0xbd5
> > +#define CSR_PMAADDR6            0xbd6
> > +#define CSR_PMAADDR7            0xbd7
> > +#define CSR_PMAADDR8            0xbd8
> > +#define CSR_PMAADDR9            0xbd9
> > +#define CSR_PMAADDR10           0xbda
> > +#define CSR_PMAADDR11           0xbdb
> > +#define CSR_PMAADDR12           0xbdc
> > +#define CSR_PMAADDR13           0xbdd
> > +#define CSR_PMAADDR14           0xbde
> > +#define CSR_PMAADDR15           0xbdf
> > +
> > +/* ========= AndeStar V5 supervisor mode CSRs ========= */
> > +/* Supervisor trap registers */
> > +#define CSR_SLIE                0x9c4
> > +#define CSR_SLIP                0x9c5
> > +#define CSR_SDCAUSE             0x9c9
> > +
> > +/* Supervisor counter registers */
> > +#define CSR_SCOUNTERINTEN       0x9cf
> > +#define CSR_SCOUNTERMASK_M      0x9d1
> > +#define CSR_SCOUNTERMASK_S      0x9d2
> > +#define CSR_SCOUNTERMASK_U      0x9d3
> > +#define CSR_SCOUNTEROVF         0x9d4
> > +#define CSR_SCOUNTINHIBIT       0x9e0
> > +#define CSR_SHPMEVENT3          0x9e3
> > +#define CSR_SHPMEVENT4          0x9e4
> > +#define CSR_SHPMEVENT5          0x9e5
> > +#define CSR_SHPMEVENT6          0x9e6
> > +
> > +/* Supervisor control registers */
> > +#define CSR_SCCTLDATA           0x9cd
> > +#define CSR_SMISC_CTL           0x9d0
> > +
> > +#endif /* !defined(CONFIG_USER_ONLY) */
> > +
> > +/* ========= AndeStar V5 user mode CSRs ========= */
> > +/* User mode control registers */
> > +#define CSR_UITB                0x800
> > +#define CSR_UCODE               0x801
> > +#define CSR_UDCAUSE             0x809
> > +#define CSR_UCCTLBEGINADDR      0x80b
> > +#define CSR_UCCTLCOMMAND        0x80c
> > +#define CSR_WFE                 0x810
> > +#define CSR_SLEEPVALUE          0x811
> > +#define CSR_TXEVT               0x812
> > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> > index a72fd32f01..fe63e68b8e 100644
> > --- a/target/riscv/cpu.c
> > +++ b/target/riscv/cpu.c
> > @@ -192,6 +192,8 @@ static void ax25_cpu_init(Object *obj)
> >      CPURISCVState *env = &RISCV_CPU(obj)->env;
> >      set_misa(env, RV64 | RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU);
> >      set_priv_version(env, PRIV_VERSION_1_10_0);
> > +    setup_custom_csr(env, andes_custom_csr_table);
> > +    env->custom_csr_val = g_malloc(andes_custom_csr_size);
> >  }
> >
> >  static void rv64_sifive_u_cpu_init(Object *obj)
> > @@ -254,6 +256,8 @@ static void a25_cpu_init(Object *obj)
> >      CPURISCVState *env = &RISCV_CPU(obj)->env;
> >      set_misa(env, RV32 | RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU);
> >      set_priv_version(env, PRIV_VERSION_1_10_0);
> > +    setup_custom_csr(env, andes_custom_csr_table);
> > +    env->custom_csr_val = g_malloc(andes_custom_csr_size);
> >  }
> >  #endif
> >
> > diff --git a/target/riscv/csr_andes.c b/target/riscv/csr_andes.c
> > new file mode 100644
> > index 0000000000..8617f40483
> > --- /dev/null
> > +++ b/target/riscv/csr_andes.c
> > @@ -0,0 +1,183 @@
> > +/*
> > + * Copyright (c) 2021 Andes Technology Corp.
> > + * SPDX-License-Identifier: GPL-2.0+
> > + * Andes custom CSR table and handling functions
> > + */
> > +
> > +#include "qemu/osdep.h"
> > +#include "qemu/log.h"
> > +#include "cpu.h"
> > +#include "qemu/main-loop.h"
> > +#include "exec/exec-all.h"
> > +#include "andes_cpu_bits.h"
> > +
> > +struct andes_csr_val {
> > +    target_long uitb;
> > +};
> > +
> > +#if !defined(CONFIG_USER_ONLY)
> > +static RISCVException read_mmsc_cfg(CPURISCVState *env, int csrno, target_ulong *val)
> > +{
> > +    /* enable pma probe */
> > +    *val = 0x40000000;
> > +    return RISCV_EXCP_NONE;
> > +}
> > +#endif
> > +
> > +static RISCVException write_uitb(CPURISCVState *env, int csrno, target_ulong val)
> > +{
> > +    struct andes_csr_val *andes_csr = env->custom_csr_val;
> > +    andes_csr->uitb = val;
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +static RISCVException read_uitb(CPURISCVState *env, int csrno, target_ulong *val)
> > +{
> > +    struct andes_csr_val *andes_csr = env->custom_csr_val;
> > +    *val = andes_csr->uitb;
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +
> > +static RISCVException any(CPURISCVState *env, int csrno)
> > +{
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +static RISCVException read_zero(CPURISCVState *env, int csrno, target_ulong *val)
> > +{
> > +    *val = 0;
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +static RISCVException write_stub(CPURISCVState *env, int csrno, target_ulong val)
> > +{
> > +    return RISCV_EXCP_NONE;
> > +}
> > +
> > +int andes_custom_csr_size = sizeof(struct andes_csr_val);
> 
> I think just drop this value and use sizeof(struct andes_csr_val) in
> the other places.

Wilco.
Thanks for the tips.


Cordially yours,
Ruinland
> 
> I haven't checked this against the Andes spec, but overall the series
> looks good.
> 
> Alistair
> 
> > +riscv_custom_csr_operations andes_custom_csr_table[MAX_CUSTOM_CSR_NUM] = {
> > +    /* ========= AndeStar V5 machine mode CSRs ========= */
> > +    #if !defined(CONFIG_USER_ONLY)
> > +    /* Configuration Registers */
> > +    {CSR_MICM_CFG,         { "micm_cfg",          any, read_zero, write_stub} },
> > +    {CSR_MDCM_CFG,         { "mdcm_cfg",          any, read_zero, write_stub} },
> > +    {CSR_MMSC_CFG,         { "mmsc_cfg",          any, read_mmsc_cfg, write_stub} },
> > +    {CSR_MMSC_CFG2,        { "mmsc_cfg2",         any, read_zero, write_stub} },
> > +    {CSR_MVEC_CFG,         { "mvec_cfg",          any, read_zero, write_stub} },
> > +
> > +    /* Crash Debug CSRs */
> > +    {CSR_MCRASH_STATESAVE,  { "mcrash_statesave",  any, read_zero, write_stub} },
> > +    {CSR_MSTATUS_CRASHSAVE, { "mstatus_crashsave", any, read_zero, write_stub} },
> > +
> > +    /* Memory CSRs */
> > +    {CSR_MILMB,            { "milmb",             any, read_zero, write_stub} },
> > +    {CSR_MDLMB,            { "mdlmb",             any, read_zero, write_stub} },
> > +    {CSR_MECC_CODE,        { "mecc_code",         any, read_zero, write_stub} },
> > +    {CSR_MNVEC,            { "mnvec",             any, read_zero, write_stub} },
> > +    {CSR_MCACHE_CTL,       { "mcache_ctl",        any, read_zero, write_stub} },
> > +    {CSR_MCCTLBEGINADDR,   { "mcctlbeginaddr",    any, read_zero, write_stub} },
> > +    {CSR_MCCTLCOMMAND,     { "mcctlcommand",      any, read_zero, write_stub} },
> > +    {CSR_MCCTLDATA,        { "mcctldata",         any, read_zero, write_stub} },
> > +    {CSR_MPPIB,            { "mppib",             any, read_zero, write_stub} },
> > +    {CSR_MFIOB,            { "mfiob",             any, read_zero, write_stub} },
> > +
> > +    /* Hardware Stack Protection & Recording */
> > +    {CSR_MHSP_CTL,         { "mhsp_ctl",          any, read_zero, write_stub} },
> > +    {CSR_MSP_BOUND,        { "msp_bound",         any, read_zero, write_stub} },
> > +    {CSR_MSP_BASE,         { "msp_base",          any, read_zero, write_stub} },
> > +    {CSR_MXSTATUS,         { "mxstatus",          any, read_zero, write_stub} },
> > +    {CSR_MDCAUSE,          { "mdcause",           any, read_zero, write_stub} },
> > +    {CSR_MSLIDELEG,        { "mslideleg",         any, read_zero, write_stub} },
> > +    {CSR_MSAVESTATUS,      { "msavestatus",       any, read_zero, write_stub} },
> > +    {CSR_MSAVEEPC1,        { "msaveepc1",         any, read_zero, write_stub} },
> > +    {CSR_MSAVECAUSE1,      { "msavecause1",       any, read_zero, write_stub} },
> > +    {CSR_MSAVEEPC2,        { "msaveepc2",         any, read_zero, write_stub} },
> > +    {CSR_MSAVECAUSE2,      { "msavecause2",       any, read_zero, write_stub} },
> > +    {CSR_MSAVEDCAUSE1,     { "msavedcause1",      any, read_zero, write_stub} },
> > +    {CSR_MSAVEDCAUSE2,     { "msavedcause2",      any, read_zero, write_stub} },
> > +
> > +    /* Control CSRs */
> > +    {CSR_MPFT_CTL,         { "mpft_ctl",          any, read_zero, write_stub} },
> > +    {CSR_MMISC_CTL,        { "mmisc_ctl",         any, read_zero, write_stub} },
> > +    {CSR_MCLK_CTL,         { "mclk_ctl",          any, read_zero, write_stub} },
> > +
> > +    /* Counter related CSRs */
> > +    {CSR_MCOUNTERWEN,      { "mcounterwen",       any, read_zero, write_stub} },
> > +    {CSR_MCOUNTERINTEN,    { "mcounterinten",     any, read_zero, write_stub} },
> > +    {CSR_MCOUNTERMASK_M,   { "mcountermask_m",    any, read_zero, write_stub} },
> > +    {CSR_MCOUNTERMASK_S,   { "mcountermask_s",    any, read_zero, write_stub} },
> > +    {CSR_MCOUNTERMASK_U,   { "mcountermask_u",    any, read_zero, write_stub} },
> > +    {CSR_MCOUNTEROVF,      { "mcounterovf",       any, read_zero, write_stub} },
> > +
> > +    /* Enhanced CLIC CSRs */
> > +    {CSR_MIRQ_ENTRY,       { "mirq_entry",        any, read_zero, write_stub} },
> > +    {CSR_MINTSEL_JAL,      { "mintsel_jal",       any, read_zero, write_stub} },
> > +    {CSR_PUSHMCAUSE,       { "pushmcause",        any, read_zero, write_stub} },
> > +    {CSR_PUSHMEPC,         { "pushmepc",          any, read_zero, write_stub} },
> > +    {CSR_PUSHMXSTATUS,     { "pushmxstatus",      any, read_zero, write_stub} },
> > +
> > +    /* Andes Physical Memory Attribute(PMA) CSRs */
> > +    {CSR_PMACFG0,          { "pmacfg0",           any, read_zero, write_stub} },
> > +    {CSR_PMACFG1,          { "pmacfg1",           any, read_zero, write_stub} },
> > +    {CSR_PMACFG2,          { "pmacfg2",           any, read_zero, write_stub} },
> > +    {CSR_PMACFG3,          { "pmacfg3",           any, read_zero, write_stub} },
> > +    {CSR_PMAADDR0,         { "pmaaddr0",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR1,         { "pmaaddr1",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR2,         { "pmaaddr2",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR3,         { "pmaaddr3",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR4,         { "pmaaddr4",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR5,         { "pmaaddr5",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR6,         { "pmaaddr6",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR7,         { "pmaaddr7",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR8,         { "pmaaddr8",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR9,         { "pmaaddr9",          any, read_zero, write_stub} },
> > +    {CSR_PMAADDR10,        { "pmaaddr10",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR11,        { "pmaaddr11",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR12,        { "pmaaddr12",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR13,        { "pmaaddr13",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR14,        { "pmaaddr14",         any, read_zero, write_stub} },
> > +    {CSR_PMAADDR15,        { "pmaaddr15",         any, read_zero, write_stub} },
> > +
> > +    /* Debug/Trace Registers (shared with Debug Mode) */
> > +    {CSR_TSELECT,          { "tselect",           any, read_zero, write_stub} },
> > +    {CSR_TDATA1,           { "tdata1",            any, read_zero, write_stub} },
> > +    {CSR_TDATA2,           { "tdata2",            any, read_zero, write_stub} },
> > +    {CSR_TDATA3,           { "tdata3",            any, read_zero, write_stub} },
> > +    {CSR_TINFO,            { "tinfo",             any, read_zero, write_stub} },
> > +
> > +    /* ========= AndeStar V5 supervisor mode CSRs ========= */
> > +    /* Supervisor trap registers */
> > +    {CSR_SLIE,             { "slie",              any, read_zero, write_stub} },
> > +    {CSR_SLIP,             { "slip",              any, read_zero, write_stub} },
> > +    {CSR_SDCAUSE,          { "sdcause",           any, read_zero, write_stub} },
> > +
> > +    /* Supervisor counter registers */
> > +    {CSR_SCOUNTERINTEN,    { "scounterinten",     any, read_zero, write_stub} },
> > +    {CSR_SCOUNTERMASK_M,   { "scountermask_m",    any, read_zero, write_stub} },
> > +    {CSR_SCOUNTERMASK_S,   { "scountermask_s",    any, read_zero, write_stub} },
> > +    {CSR_SCOUNTERMASK_U,   { "scountermask_u",    any, read_zero, write_stub} },
> > +    {CSR_SCOUNTEROVF,      { "scounterovf",       any, read_zero, write_stub} },
> > +    {CSR_SCOUNTINHIBIT,    { "scountinhibit",     any, read_zero, write_stub} },
> > +    {CSR_SHPMEVENT3,       { "shpmevent3",        any, read_zero, write_stub} },
> > +    {CSR_SHPMEVENT4,       { "shpmevent4",        any, read_zero, write_stub} },
> > +    {CSR_SHPMEVENT5,       { "shpmevent5",        any, read_zero, write_stub} },
> > +    {CSR_SHPMEVENT6,       { "shpmevent6",        any, read_zero, write_stub} },
> > +
> > +    /* Supervisor control registers */
> > +    {CSR_SCCTLDATA,        { "scctldata",         any, read_zero, write_stub} },
> > +    {CSR_SMISC_CTL,        { "smisc_ctl",         any, read_zero, write_stub} },
> > +    #endif
> > +
> > +    /* ========= AndeStar V5 user mode CSRs ========= */
> > +    /* User mode control registers */
> > +    {CSR_UITB,             { "uitb",              any, read_uitb, write_uitb} },
> > +    {CSR_UCODE,            { "ucode",             any, read_zero, write_stub} },
> > +    {CSR_UDCAUSE,          { "udcause",           any, read_zero, write_stub} },
> > +    {CSR_UCCTLBEGINADDR,   { "ucctlbeginaddr",    any, read_zero, write_stub} },
> > +    {CSR_UCCTLCOMMAND,     { "ucctlcommand",      any, read_zero, write_stub} },
> > +    {CSR_WFE,              { "wfe",               any, read_zero, write_stub} },
> > +    {CSR_SLEEPVALUE,       { "sleepvalue",        any, read_zero, write_stub} },
> > +    {CSR_TXEVT,            { "csr_txevt",         any, read_zero, write_stub} },
> > +    {0, { "", NULL, NULL, NULL } },
> > +    };
> > diff --git a/target/riscv/custom_csr_defs.h b/target/riscv/custom_csr_defs.h
> > index 4dbf8cf1fd..b09083585b 100644
> > --- a/target/riscv/custom_csr_defs.h
> > +++ b/target/riscv/custom_csr_defs.h
> > @@ -4,4 +4,5 @@
> >   * Custom CSR variables provided by <cpu_model_name>_csr.c
> >   */
> >
> > -/* Left blank purposely in this commit. */
> > +extern riscv_custom_csr_operations andes_custom_csr_table[MAX_CUSTOM_CSR_NUM];
> > +extern int andes_custom_csr_size;
> > diff --git a/target/riscv/meson.build b/target/riscv/meson.build
> > index d5e0bc93ea..5c87672ff9 100644
> > --- a/target/riscv/meson.build
> > +++ b/target/riscv/meson.build
> > @@ -9,6 +9,7 @@ gen = [
> >  riscv_ss = ss.source_set()
> >  riscv_ss.add(gen)
> >  riscv_ss.add(files(
> > +  'csr_andes.c',
> >    'cpu.c',
> >    'cpu_helper.c',
> >    'csr.c',
> > --
> > 2.25.1
> >


  reply	other threads:[~2021-10-22  8:43 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-21 15:09 [RFC PATCH v5 0/3] riscv: Add preliminary custom CSR support Ruinland Chuan-Tzu Tsai
2021-10-21 15:09 ` Ruinland Chuan-Tzu Tsai
2021-10-21 15:09 ` [RFC PATCH v5 1/3] riscv: Adding Andes A25 and AX25 cpu models Ruinland Chuan-Tzu Tsai
2021-10-21 15:09   ` Ruinland Chuan-Tzu Tsai
2021-10-21 22:33   ` Alistair Francis
2021-10-21 22:33     ` Alistair Francis
2021-10-21 15:09 ` [RFC PATCH v5 2/3] riscv: Introduce custom CSR hooks to riscv_csrrw() Ruinland Chuan-Tzu Tsai
2021-10-21 15:09   ` Ruinland Chuan-Tzu Tsai
2021-10-21 22:43   ` Alistair Francis
2021-10-21 22:43     ` Alistair Francis
2021-10-22  8:36     ` Ruinland ChuanTzu Tsai
2021-10-22  8:36       ` Ruinland ChuanTzu Tsai
2021-10-22  0:08   ` Richard Henderson
2021-10-22  0:08     ` Richard Henderson
2021-10-22  8:34     ` Ruinland ChuanTzu Tsai
2021-10-22  8:34       ` Ruinland ChuanTzu Tsai
2021-10-22 15:59       ` Richard Henderson
2021-10-22 15:59         ` Richard Henderson
2021-10-21 15:09 ` [RFC PATCH v5 3/3] riscv: Enable custom CSR support for Andes AX25 and A25 CPUs Ruinland Chuan-Tzu Tsai
2021-10-21 15:09   ` Ruinland Chuan-Tzu Tsai
2021-10-21 22:44   ` Alistair Francis
2021-10-21 22:44     ` Alistair Francis
2021-10-22  8:37     ` Ruinland ChuanTzu Tsai [this message]
2021-10-22  8:37       ` Ruinland ChuanTzu Tsai
2021-10-22  1:12   ` Richard Henderson
2021-10-22  1:12     ` Richard Henderson
2021-10-21 22:47 ` [RFC PATCH v5 0/3] riscv: Add preliminary custom CSR support Alistair Francis
2021-10-21 22:47   ` Alistair Francis

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=YXJ4RE9bGe4sphXG@ruinland-x1c \
    --to=ruinland@andestech.com \
    --cc=alankao@andestech.com \
    --cc=alistair23@gmail.com \
    --cc=bmeng.cn@gmail.com \
    --cc=dylan@andestech.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-riscv@nongnu.org \
    --cc=wangjunqiang@iscas.ac.cn \
    --cc=ycliang@andestech.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.