On Tue, Aug 20, 2024 at 2:15 AM Ian Brockbank <ian.brockb...@cirrus.com> wrote: > > From: Ian Brockbank <ian.brockb...@cirrus.com> > > The xie CSR appears hardwired to zero in CLIC mode, replaced by separate > memory-mapped interrupt enables (clicintie[i]). Writes to xie will be > ignored and will not trap (i.e., no access faults). > > Signed-off-by: LIU Zhiwei <zhiwei_...@c-sky.com> > Signed-off-by: Ian Brockbank <ian.brockb...@cirrus.com> > --- > target/riscv/csr.c | 34 ++++++++++++++++++++++------------ > 1 file changed, 22 insertions(+), 12 deletions(-) > > diff --git a/target/riscv/csr.c b/target/riscv/csr.c > index 9c824c0d8f..a5978e0929 100644 > --- a/target/riscv/csr.c > +++ b/target/riscv/csr.c > @@ -30,6 +30,10 @@ > #include "qemu/guest-random.h" > #include "qapi/error.h" > > +#if !defined(CONFIG_USER_ONLY) > +#include "hw/intc/riscv_clic.h" > +#endif
This doesn't seem like the way to go > + > /* CSR function table public API */ > void riscv_get_csr_ops(int csrno, riscv_csr_operations *ops) > { > @@ -1805,16 +1809,19 @@ static RISCVException rmw_mie64(CPURISCVState *env, > int csrno, > uint64_t *ret_val, > uint64_t new_val, uint64_t wr_mask) > { > - uint64_t mask = wr_mask & all_ints; > + /* Access to xie will be ignored in CLIC mode and will not trap. */ > + if (!riscv_clic_is_clic_mode(env)) { We can just implement this check, it's only two lines > + uint64_t mask = wr_mask & all_ints; > > - if (ret_val) { > - *ret_val = env->mie; > - } > + if (ret_val) { > + *ret_val = env->mie; > + } > > - env->mie = (env->mie & ~mask) | (new_val & mask); > + env->mie = (env->mie & ~mask) | (new_val & mask); > > - if (!riscv_has_ext(env, RVH)) { > - env->mie &= ~((uint64_t)HS_MODE_INTERRUPTS); > + if (!riscv_has_ext(env, RVH)) { > + env->mie &= ~((uint64_t)HS_MODE_INTERRUPTS); > + } > } > > return RISCV_EXCP_NONE; > @@ -2906,13 +2913,13 @@ static int read_mintstatus(CPURISCVState *env, int > csrno, target_ulong *val) > static int read_mintthresh(CPURISCVState *env, int csrno, target_ulong *val) > { > *val = env->mintthresh; > - return 0; > + return RISCV_EXCP_NONE; This change should be made when these functions are added Alistair > } > > static int write_mintthresh(CPURISCVState *env, int csrno, target_ulong val) > { > env->mintthresh = val; > - return 0; > + return RISCV_EXCP_NONE; > } > > /* Supervisor Trap Setup */ > @@ -3059,7 +3066,10 @@ static RISCVException rmw_sie64(CPURISCVState *env, > int csrno, > *ret_val |= env->sie & nalias_mask; > } > > - env->sie = (env->sie & ~sie_mask) | (new_val & sie_mask); > + /* Writes to xie will be ignored in CLIC mode and will not trap. */ > + if (!riscv_clic_is_clic_mode(env)) { > + env->sie = (env->sie & ~sie_mask) | (new_val & sie_mask); > + } > } > > return ret; > @@ -3337,13 +3347,13 @@ static int read_sintstatus(CPURISCVState *env, int > csrno, target_ulong *val) > static int read_sintthresh(CPURISCVState *env, int csrno, target_ulong *val) > { > *val = env->sintthresh; > - return 0; > + return RISCV_EXCP_NONE; > } > > static int write_sintthresh(CPURISCVState *env, int csrno, target_ulong val) > { > env->sintthresh = val; > - return 0; > + return RISCV_EXCP_NONE; > } > > /* Supervisor Protection and Translation */ > -- > 2.46.0.windows.1 > This message and any attachments may contain privileged and confidential > information that is intended solely for the person(s) to whom it is > addressed. If you are not an intended recipient you must not: read; copy; > distribute; discuss; take any action in or make any reliance upon the > contents of this message; nor open or read any attachment. If you have > received this message in error, please notify us as soon as possible on the > following telephone number and destroy this message including any > attachments. Thank you. Cirrus Logic International (UK) Ltd and Cirrus Logic > International Semiconductor Ltd are companies registered in Scotland, with > registered numbers SC089839 and SC495735 respectively. Our registered office > is at 7B Nightingale Way, Quartermile, Edinburgh, EH3 9EG, UK. Tel: +44 > (0)131 272 7000. www.cirrus.com >