target/riscv: Remove privilege v1.9 specific CSR related code
Qemu doesn't support RISC-V privilege specification v1.9. Remove the remaining v1.9 specific references from the implementation. Signed-off-by: Atish Patra <atish.patra@wdc.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-Id: <20210319194534.2082397-2-atish.patra@wdc.com> [Changes by AF: - Rebase on latest patches - Bump the vmstate_riscv_cpu version_id and minimum_version_id ] Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
e4f3ede95c
commit
ac12b60103
@ -282,7 +282,7 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f, int flags)
|
|||||||
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vscause ", env->vscause);
|
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "vscause ", env->vscause);
|
||||||
}
|
}
|
||||||
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mtval ", env->mtval);
|
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mtval ", env->mtval);
|
||||||
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "stval ", env->sbadaddr);
|
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "stval ", env->stval);
|
||||||
if (riscv_has_ext(env, RVH)) {
|
if (riscv_has_ext(env, RVH)) {
|
||||||
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "htval ", env->htval);
|
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "htval ", env->htval);
|
||||||
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mtval2 ", env->mtval2);
|
qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mtval2 ", env->mtval2);
|
||||||
|
@ -163,10 +163,8 @@ struct CPURISCVState {
|
|||||||
target_ulong mie;
|
target_ulong mie;
|
||||||
target_ulong mideleg;
|
target_ulong mideleg;
|
||||||
|
|
||||||
target_ulong sptbr; /* until: priv-1.9.1 */
|
|
||||||
target_ulong satp; /* since: priv-1.10.0 */
|
target_ulong satp; /* since: priv-1.10.0 */
|
||||||
target_ulong sbadaddr;
|
target_ulong stval;
|
||||||
target_ulong mbadaddr;
|
|
||||||
target_ulong medeleg;
|
target_ulong medeleg;
|
||||||
|
|
||||||
target_ulong stvec;
|
target_ulong stvec;
|
||||||
|
@ -153,12 +153,6 @@
|
|||||||
/* 32-bit only */
|
/* 32-bit only */
|
||||||
#define CSR_MSTATUSH 0x310
|
#define CSR_MSTATUSH 0x310
|
||||||
|
|
||||||
/* Legacy Counter Setup (priv v1.9.1) */
|
|
||||||
/* Update to #define CSR_MCOUNTINHIBIT 0x320 for 1.11.0 */
|
|
||||||
#define CSR_MUCOUNTEREN 0x320
|
|
||||||
#define CSR_MSCOUNTEREN 0x321
|
|
||||||
#define CSR_MHCOUNTEREN 0x322
|
|
||||||
|
|
||||||
/* Machine Trap Handling */
|
/* Machine Trap Handling */
|
||||||
#define CSR_MSCRATCH 0x340
|
#define CSR_MSCRATCH 0x340
|
||||||
#define CSR_MEPC 0x341
|
#define CSR_MEPC 0x341
|
||||||
@ -166,9 +160,6 @@
|
|||||||
#define CSR_MTVAL 0x343
|
#define CSR_MTVAL 0x343
|
||||||
#define CSR_MIP 0x344
|
#define CSR_MIP 0x344
|
||||||
|
|
||||||
/* Legacy Machine Trap Handling (priv v1.9.1) */
|
|
||||||
#define CSR_MBADADDR 0x343
|
|
||||||
|
|
||||||
/* Supervisor Trap Setup */
|
/* Supervisor Trap Setup */
|
||||||
#define CSR_SSTATUS 0x100
|
#define CSR_SSTATUS 0x100
|
||||||
#define CSR_SEDELEG 0x102
|
#define CSR_SEDELEG 0x102
|
||||||
@ -184,9 +175,6 @@
|
|||||||
#define CSR_STVAL 0x143
|
#define CSR_STVAL 0x143
|
||||||
#define CSR_SIP 0x144
|
#define CSR_SIP 0x144
|
||||||
|
|
||||||
/* Legacy Supervisor Trap Handling (priv v1.9.1) */
|
|
||||||
#define CSR_SBADADDR 0x143
|
|
||||||
|
|
||||||
/* Supervisor Protection and Translation */
|
/* Supervisor Protection and Translation */
|
||||||
#define CSR_SPTBR 0x180
|
#define CSR_SPTBR 0x180
|
||||||
#define CSR_SATP 0x180
|
#define CSR_SATP 0x180
|
||||||
@ -354,14 +342,6 @@
|
|||||||
#define CSR_MHPMCOUNTER30H 0xb9e
|
#define CSR_MHPMCOUNTER30H 0xb9e
|
||||||
#define CSR_MHPMCOUNTER31H 0xb9f
|
#define CSR_MHPMCOUNTER31H 0xb9f
|
||||||
|
|
||||||
/* Legacy Machine Protection and Translation (priv v1.9.1) */
|
|
||||||
#define CSR_MBASE 0x380
|
|
||||||
#define CSR_MBOUND 0x381
|
|
||||||
#define CSR_MIBASE 0x382
|
|
||||||
#define CSR_MIBOUND 0x383
|
|
||||||
#define CSR_MDBASE 0x384
|
|
||||||
#define CSR_MDBOUND 0x385
|
|
||||||
|
|
||||||
/* mstatus CSR bits */
|
/* mstatus CSR bits */
|
||||||
#define MSTATUS_UIE 0x00000001
|
#define MSTATUS_UIE 0x00000001
|
||||||
#define MSTATUS_SIE 0x00000002
|
#define MSTATUS_SIE 0x00000002
|
||||||
@ -375,10 +355,8 @@
|
|||||||
#define MSTATUS_FS 0x00006000
|
#define MSTATUS_FS 0x00006000
|
||||||
#define MSTATUS_XS 0x00018000
|
#define MSTATUS_XS 0x00018000
|
||||||
#define MSTATUS_MPRV 0x00020000
|
#define MSTATUS_MPRV 0x00020000
|
||||||
#define MSTATUS_PUM 0x00040000 /* until: priv-1.9.1 */
|
|
||||||
#define MSTATUS_SUM 0x00040000 /* since: priv-1.10 */
|
#define MSTATUS_SUM 0x00040000 /* since: priv-1.10 */
|
||||||
#define MSTATUS_MXR 0x00080000
|
#define MSTATUS_MXR 0x00080000
|
||||||
#define MSTATUS_VM 0x1F000000 /* until: priv-1.9.1 */
|
|
||||||
#define MSTATUS_TVM 0x00100000 /* since: priv-1.10 */
|
#define MSTATUS_TVM 0x00100000 /* since: priv-1.10 */
|
||||||
#define MSTATUS_TW 0x00200000 /* since: priv-1.10 */
|
#define MSTATUS_TW 0x00200000 /* since: priv-1.10 */
|
||||||
#define MSTATUS_TSR 0x00400000 /* since: priv-1.10 */
|
#define MSTATUS_TSR 0x00400000 /* since: priv-1.10 */
|
||||||
@ -416,7 +394,6 @@
|
|||||||
#define SSTATUS_SPP 0x00000100
|
#define SSTATUS_SPP 0x00000100
|
||||||
#define SSTATUS_FS 0x00006000
|
#define SSTATUS_FS 0x00006000
|
||||||
#define SSTATUS_XS 0x00018000
|
#define SSTATUS_XS 0x00018000
|
||||||
#define SSTATUS_PUM 0x00040000 /* until: priv-1.9.1 */
|
|
||||||
#define SSTATUS_SUM 0x00040000 /* since: priv-1.10 */
|
#define SSTATUS_SUM 0x00040000 /* since: priv-1.10 */
|
||||||
#define SSTATUS_MXR 0x00080000
|
#define SSTATUS_MXR 0x00080000
|
||||||
|
|
||||||
|
@ -136,8 +136,8 @@ void riscv_cpu_swap_hypervisor_regs(CPURISCVState *env)
|
|||||||
env->vscause = env->scause;
|
env->vscause = env->scause;
|
||||||
env->scause = env->scause_hs;
|
env->scause = env->scause_hs;
|
||||||
|
|
||||||
env->vstval = env->sbadaddr;
|
env->vstval = env->stval;
|
||||||
env->sbadaddr = env->stval_hs;
|
env->stval = env->stval_hs;
|
||||||
|
|
||||||
env->vsatp = env->satp;
|
env->vsatp = env->satp;
|
||||||
env->satp = env->satp_hs;
|
env->satp = env->satp_hs;
|
||||||
@ -159,8 +159,8 @@ void riscv_cpu_swap_hypervisor_regs(CPURISCVState *env)
|
|||||||
env->scause_hs = env->scause;
|
env->scause_hs = env->scause;
|
||||||
env->scause = env->vscause;
|
env->scause = env->vscause;
|
||||||
|
|
||||||
env->stval_hs = env->sbadaddr;
|
env->stval_hs = env->stval;
|
||||||
env->sbadaddr = env->vstval;
|
env->stval = env->vstval;
|
||||||
|
|
||||||
env->satp_hs = env->satp;
|
env->satp_hs = env->satp;
|
||||||
env->satp = env->vsatp;
|
env->satp = env->vsatp;
|
||||||
@ -1023,7 +1023,7 @@ void riscv_cpu_do_interrupt(CPUState *cs)
|
|||||||
env->mstatus = s;
|
env->mstatus = s;
|
||||||
env->scause = cause | ((target_ulong)async << (TARGET_LONG_BITS - 1));
|
env->scause = cause | ((target_ulong)async << (TARGET_LONG_BITS - 1));
|
||||||
env->sepc = env->pc;
|
env->sepc = env->pc;
|
||||||
env->sbadaddr = tval;
|
env->stval = tval;
|
||||||
env->htval = htval;
|
env->htval = htval;
|
||||||
env->pc = (env->stvec >> 2 << 2) +
|
env->pc = (env->stvec >> 2 << 2) +
|
||||||
((async && (env->stvec & 3) == 1) ? cause * 4 : 0);
|
((async && (env->stvec & 3) == 1) ? cause * 4 : 0);
|
||||||
@ -1054,7 +1054,7 @@ void riscv_cpu_do_interrupt(CPUState *cs)
|
|||||||
env->mstatus = s;
|
env->mstatus = s;
|
||||||
env->mcause = cause | ~(((target_ulong)-1) >> async);
|
env->mcause = cause | ~(((target_ulong)-1) >> async);
|
||||||
env->mepc = env->pc;
|
env->mepc = env->pc;
|
||||||
env->mbadaddr = tval;
|
env->mtval = tval;
|
||||||
env->mtval2 = mtval2;
|
env->mtval2 = mtval2;
|
||||||
env->pc = (env->mtvec >> 2 << 2) +
|
env->pc = (env->mtvec >> 2 << 2) +
|
||||||
((async && (env->mtvec & 3) == 1) ? cause * 4 : 0);
|
((async && (env->mtvec & 3) == 1) ? cause * 4 : 0);
|
||||||
|
@ -644,26 +644,6 @@ static int write_mcounteren(CPURISCVState *env, int csrno, target_ulong val)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This regiser is replaced with CSR_MCOUNTINHIBIT in 1.11.0 */
|
|
||||||
static int read_mscounteren(CPURISCVState *env, int csrno, target_ulong *val)
|
|
||||||
{
|
|
||||||
if (env->priv_ver < PRIV_VERSION_1_11_0) {
|
|
||||||
return -RISCV_EXCP_ILLEGAL_INST;
|
|
||||||
}
|
|
||||||
*val = env->mcounteren;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This regiser is replaced with CSR_MCOUNTINHIBIT in 1.11.0 */
|
|
||||||
static int write_mscounteren(CPURISCVState *env, int csrno, target_ulong val)
|
|
||||||
{
|
|
||||||
if (env->priv_ver < PRIV_VERSION_1_11_0) {
|
|
||||||
return -RISCV_EXCP_ILLEGAL_INST;
|
|
||||||
}
|
|
||||||
env->mcounteren = val;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Machine Trap Handling */
|
/* Machine Trap Handling */
|
||||||
static int read_mscratch(CPURISCVState *env, int csrno, target_ulong *val)
|
static int read_mscratch(CPURISCVState *env, int csrno, target_ulong *val)
|
||||||
{
|
{
|
||||||
@ -701,15 +681,15 @@ static int write_mcause(CPURISCVState *env, int csrno, target_ulong val)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_mbadaddr(CPURISCVState *env, int csrno, target_ulong *val)
|
static int read_mtval(CPURISCVState *env, int csrno, target_ulong *val)
|
||||||
{
|
{
|
||||||
*val = env->mbadaddr;
|
*val = env->mtval;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int write_mbadaddr(CPURISCVState *env, int csrno, target_ulong val)
|
static int write_mtval(CPURISCVState *env, int csrno, target_ulong val)
|
||||||
{
|
{
|
||||||
env->mbadaddr = val;
|
env->mtval = val;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -853,15 +833,15 @@ static int write_scause(CPURISCVState *env, int csrno, target_ulong val)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_sbadaddr(CPURISCVState *env, int csrno, target_ulong *val)
|
static int read_stval(CPURISCVState *env, int csrno, target_ulong *val)
|
||||||
{
|
{
|
||||||
*val = env->sbadaddr;
|
*val = env->stval;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int write_sbadaddr(CPURISCVState *env, int csrno, target_ulong val)
|
static int write_stval(CPURISCVState *env, int csrno, target_ulong val)
|
||||||
{
|
{
|
||||||
env->sbadaddr = val;
|
env->stval = val;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1419,13 +1399,11 @@ riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = {
|
|||||||
|
|
||||||
[CSR_MSTATUSH] = { "mstatush", any32, read_mstatush, write_mstatush },
|
[CSR_MSTATUSH] = { "mstatush", any32, read_mstatush, write_mstatush },
|
||||||
|
|
||||||
[CSR_MSCOUNTEREN] = { "msounteren", any, read_mscounteren, write_mscounteren },
|
|
||||||
|
|
||||||
/* Machine Trap Handling */
|
/* Machine Trap Handling */
|
||||||
[CSR_MSCRATCH] = { "mscratch", any, read_mscratch, write_mscratch },
|
[CSR_MSCRATCH] = { "mscratch", any, read_mscratch, write_mscratch },
|
||||||
[CSR_MEPC] = { "mepc", any, read_mepc, write_mepc },
|
[CSR_MEPC] = { "mepc", any, read_mepc, write_mepc },
|
||||||
[CSR_MCAUSE] = { "mcause", any, read_mcause, write_mcause },
|
[CSR_MCAUSE] = { "mcause", any, read_mcause, write_mcause },
|
||||||
[CSR_MBADADDR] = { "mbadaddr", any, read_mbadaddr, write_mbadaddr },
|
[CSR_MTVAL] = { "mtval", any, read_mtval, write_mtval },
|
||||||
[CSR_MIP] = { "mip", any, NULL, NULL, rmw_mip },
|
[CSR_MIP] = { "mip", any, NULL, NULL, rmw_mip },
|
||||||
|
|
||||||
/* Supervisor Trap Setup */
|
/* Supervisor Trap Setup */
|
||||||
@ -1438,7 +1416,7 @@ riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = {
|
|||||||
[CSR_SSCRATCH] = { "sscratch", smode, read_sscratch, write_sscratch },
|
[CSR_SSCRATCH] = { "sscratch", smode, read_sscratch, write_sscratch },
|
||||||
[CSR_SEPC] = { "sepc", smode, read_sepc, write_sepc },
|
[CSR_SEPC] = { "sepc", smode, read_sepc, write_sepc },
|
||||||
[CSR_SCAUSE] = { "scause", smode, read_scause, write_scause },
|
[CSR_SCAUSE] = { "scause", smode, read_scause, write_scause },
|
||||||
[CSR_SBADADDR] = { "sbadaddr", smode, read_sbadaddr, write_sbadaddr },
|
[CSR_STVAL] = { "stval", smode, read_stval, write_stval },
|
||||||
[CSR_SIP] = { "sip", smode, NULL, NULL, rmw_sip },
|
[CSR_SIP] = { "sip", smode, NULL, NULL, rmw_sip },
|
||||||
|
|
||||||
/* Supervisor Protection and Translation */
|
/* Supervisor Protection and Translation */
|
||||||
|
@ -140,8 +140,8 @@ static const VMStateDescription vmstate_hyper = {
|
|||||||
|
|
||||||
const VMStateDescription vmstate_riscv_cpu = {
|
const VMStateDescription vmstate_riscv_cpu = {
|
||||||
.name = "cpu",
|
.name = "cpu",
|
||||||
.version_id = 1,
|
.version_id = 2,
|
||||||
.minimum_version_id = 1,
|
.minimum_version_id = 2,
|
||||||
.fields = (VMStateField[]) {
|
.fields = (VMStateField[]) {
|
||||||
VMSTATE_UINTTL_ARRAY(env.gpr, RISCVCPU, 32),
|
VMSTATE_UINTTL_ARRAY(env.gpr, RISCVCPU, 32),
|
||||||
VMSTATE_UINT64_ARRAY(env.fpr, RISCVCPU, 32),
|
VMSTATE_UINT64_ARRAY(env.fpr, RISCVCPU, 32),
|
||||||
@ -165,10 +165,8 @@ const VMStateDescription vmstate_riscv_cpu = {
|
|||||||
VMSTATE_UINT32(env.miclaim, RISCVCPU),
|
VMSTATE_UINT32(env.miclaim, RISCVCPU),
|
||||||
VMSTATE_UINTTL(env.mie, RISCVCPU),
|
VMSTATE_UINTTL(env.mie, RISCVCPU),
|
||||||
VMSTATE_UINTTL(env.mideleg, RISCVCPU),
|
VMSTATE_UINTTL(env.mideleg, RISCVCPU),
|
||||||
VMSTATE_UINTTL(env.sptbr, RISCVCPU),
|
|
||||||
VMSTATE_UINTTL(env.satp, RISCVCPU),
|
VMSTATE_UINTTL(env.satp, RISCVCPU),
|
||||||
VMSTATE_UINTTL(env.sbadaddr, RISCVCPU),
|
VMSTATE_UINTTL(env.stval, RISCVCPU),
|
||||||
VMSTATE_UINTTL(env.mbadaddr, RISCVCPU),
|
|
||||||
VMSTATE_UINTTL(env.medeleg, RISCVCPU),
|
VMSTATE_UINTTL(env.medeleg, RISCVCPU),
|
||||||
VMSTATE_UINTTL(env.stvec, RISCVCPU),
|
VMSTATE_UINTTL(env.stvec, RISCVCPU),
|
||||||
VMSTATE_UINTTL(env.sepc, RISCVCPU),
|
VMSTATE_UINTTL(env.sepc, RISCVCPU),
|
||||||
|
@ -116,7 +116,7 @@ static void generate_exception(DisasContext *ctx, int excp)
|
|||||||
ctx->base.is_jmp = DISAS_NORETURN;
|
ctx->base.is_jmp = DISAS_NORETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void generate_exception_mbadaddr(DisasContext *ctx, int excp)
|
static void generate_exception_mtval(DisasContext *ctx, int excp)
|
||||||
{
|
{
|
||||||
tcg_gen_movi_tl(cpu_pc, ctx->base.pc_next);
|
tcg_gen_movi_tl(cpu_pc, ctx->base.pc_next);
|
||||||
tcg_gen_st_tl(cpu_pc, cpu_env, offsetof(CPURISCVState, badaddr));
|
tcg_gen_st_tl(cpu_pc, cpu_env, offsetof(CPURISCVState, badaddr));
|
||||||
@ -160,7 +160,7 @@ static void gen_exception_illegal(DisasContext *ctx)
|
|||||||
|
|
||||||
static void gen_exception_inst_addr_mis(DisasContext *ctx)
|
static void gen_exception_inst_addr_mis(DisasContext *ctx)
|
||||||
{
|
{
|
||||||
generate_exception_mbadaddr(ctx, RISCV_EXCP_INST_ADDR_MIS);
|
generate_exception_mtval(ctx, RISCV_EXCP_INST_ADDR_MIS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool use_goto_tb(DisasContext *ctx, target_ulong dest)
|
static inline bool use_goto_tb(DisasContext *ctx, target_ulong dest)
|
||||||
|
Loading…
Reference in New Issue
Block a user