qemu-riscv
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 3/3] target/riscv: Drop support for ISA spec version 1.09.


From: Aleksandar Markovic
Subject: Re: [PATCH v3 3/3] target/riscv: Drop support for ISA spec version 1.09.1
Date: Wed, 27 May 2020 03:47:28 +0200

сре, 27. мај 2020. у 02:33 Alistair Francis <address@hidden> је
написао/ла:
>
> On Tue, May 26, 2020 at 4:55 PM Aleksandar Markovic
> <address@hidden> wrote:
> >
> > сре, 27. мај 2020. у 00:56 Alistair Francis <address@hidden>
> > је написао/ла:
> > >
> > > The RISC-V ISA spec version 1.09.1 has been deprecated in QEMU since
> > > 4.1. It's not commonly used so let's remove support for it.
> > >
> >
> > Hmmm, a very odd commit message. Do you suggest that there could be
> > the case that spec version 1.09.1 has been deprecated, but, let's say,
> > it remained commonly in use, and in that case, supposedly, it wouldn't
> > be removed (even though it was annonced as deprecated), or, even
> > "undeprecated"? I am not saying anything is wrong, but just looks like
>
> The commit message was just confirming why it was deprecated in the
> first place. AFAIK no one is using the 1.09.1 version of the spec.
>
> In saying that I think that it could be "undeprecated". I don't use
> the 1.09.1 and no one I know uses it, but if after deprecating it in
> QEMU a large group of users voiced interest in it, I think we would
> still keep it around. That would depend on the burden and teh level of
> interest. So I think things could be "undeprecated" or at least the
> deprecation timeline could be extended if required or requested.
>
> Alistair
>

Fair enough.

> > an uncommon explanation for removing after deprecating, like a novel
> > approach to the deprecation process.
> >
> > Best Regards,
> > Aleksandar
> >
> >
> >
> > > Signed-off-by: Alistair Francis <address@hidden>
> > > ---
> > >  target/riscv/cpu.h                            |   1 -
> > >  target/riscv/cpu.c                            |   2 -
> > >  target/riscv/cpu_helper.c                     |  82 +++++-------
> > >  target/riscv/csr.c                            | 118 +++---------------
> > >  .../riscv/insn_trans/trans_privileged.inc.c   |  18 +--
> > >  target/riscv/monitor.c                        |   5 -
> > >  target/riscv/op_helper.c                      |  17 +--
> > >  7 files changed, 56 insertions(+), 187 deletions(-)
> > >
> > > diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
> > > index 76b98d7a33..c022539012 100644
> > > --- a/target/riscv/cpu.h
> > > +++ b/target/riscv/cpu.h
> > > @@ -73,7 +73,6 @@ enum {
> > >      RISCV_FEATURE_MISA
> > >  };
> > >
> > > -#define PRIV_VERSION_1_09_1 0x00010901
> > >  #define PRIV_VERSION_1_10_0 0x00011000
> > >  #define PRIV_VERSION_1_11_0 0x00011100
> > >
> > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c
> > > index 112f2e3a2f..eeb91f8513 100644
> > > --- a/target/riscv/cpu.c
> > > +++ b/target/riscv/cpu.c
> > > @@ -368,8 +368,6 @@ static void riscv_cpu_realize(DeviceState *dev, Error 
> > > **errp)
> > >              priv_version = PRIV_VERSION_1_11_0;
> > >          } else if (!g_strcmp0(cpu->cfg.priv_spec, "v1.10.0")) {
> > >              priv_version = PRIV_VERSION_1_10_0;
> > > -        } else if (!g_strcmp0(cpu->cfg.priv_spec, "v1.9.1")) {
> > > -            priv_version = PRIV_VERSION_1_09_1;
> > >          } else {
> > >              error_setg(errp,
> > >                         "Unsupported privilege spec version '%s'",
> > > diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
> > > index bc80aa87cf..62fe1ecc8f 100644
> > > --- a/target/riscv/cpu_helper.c
> > > +++ b/target/riscv/cpu_helper.c
> > > @@ -364,57 +364,36 @@ static int get_physical_address(CPURISCVState *env, 
> > > hwaddr *physical,
> > >          mxr = get_field(env->vsstatus, MSTATUS_MXR);
> > >      }
> > >
> > > -    if (env->priv_ver >= PRIV_VERSION_1_10_0) {
> > > -        if (first_stage == true) {
> > > -            if (use_background) {
> > > -                base = (hwaddr)get_field(env->vsatp, SATP_PPN) << 
> > > PGSHIFT;
> > > -                vm = get_field(env->vsatp, SATP_MODE);
> > > -            } else {
> > > -                base = (hwaddr)get_field(env->satp, SATP_PPN) << PGSHIFT;
> > > -                vm = get_field(env->satp, SATP_MODE);
> > > -            }
> > > -            widened = 0;
> > > +    if (first_stage == true) {
> > > +        if (use_background) {
> > > +            base = (hwaddr)get_field(env->vsatp, SATP_PPN) << PGSHIFT;
> > > +            vm = get_field(env->vsatp, SATP_MODE);
> > >          } else {
> > > -            base = (hwaddr)get_field(env->hgatp, HGATP_PPN) << PGSHIFT;
> > > -            vm = get_field(env->hgatp, HGATP_MODE);
> > > -            widened = 2;
> > > -        }
> > > -        sum = get_field(env->mstatus, MSTATUS_SUM);
> > > -        switch (vm) {
> > > -        case VM_1_10_SV32:
> > > -          levels = 2; ptidxbits = 10; ptesize = 4; break;
> > > -        case VM_1_10_SV39:
> > > -          levels = 3; ptidxbits = 9; ptesize = 8; break;
> > > -        case VM_1_10_SV48:
> > > -          levels = 4; ptidxbits = 9; ptesize = 8; break;
> > > -        case VM_1_10_SV57:
> > > -          levels = 5; ptidxbits = 9; ptesize = 8; break;
> > > -        case VM_1_10_MBARE:
> > > -            *physical = addr;
> > > -            *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
> > > -            return TRANSLATE_SUCCESS;
> > > -        default:
> > > -          g_assert_not_reached();
> > > +            base = (hwaddr)get_field(env->satp, SATP_PPN) << PGSHIFT;
> > > +            vm = get_field(env->satp, SATP_MODE);
> > >          }
> > > -    } else {
> > >          widened = 0;
> > > -        base = (hwaddr)(env->sptbr) << PGSHIFT;
> > > -        sum = !get_field(env->mstatus, MSTATUS_PUM);
> > > -        vm = get_field(env->mstatus, MSTATUS_VM);
> > > -        switch (vm) {
> > > -        case VM_1_09_SV32:
> > > -          levels = 2; ptidxbits = 10; ptesize = 4; break;
> > > -        case VM_1_09_SV39:
> > > -          levels = 3; ptidxbits = 9; ptesize = 8; break;
> > > -        case VM_1_09_SV48:
> > > -          levels = 4; ptidxbits = 9; ptesize = 8; break;
> > > -        case VM_1_09_MBARE:
> > > -            *physical = addr;
> > > -            *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
> > > -            return TRANSLATE_SUCCESS;
> > > -        default:
> > > -          g_assert_not_reached();
> > > -        }
> > > +    } else {
> > > +        base = (hwaddr)get_field(env->hgatp, HGATP_PPN) << PGSHIFT;
> > > +        vm = get_field(env->hgatp, HGATP_MODE);
> > > +        widened = 2;
> > > +    }
> > > +    sum = get_field(env->mstatus, MSTATUS_SUM);
> > > +    switch (vm) {
> > > +    case VM_1_10_SV32:
> > > +      levels = 2; ptidxbits = 10; ptesize = 4; break;
> > > +    case VM_1_10_SV39:
> > > +      levels = 3; ptidxbits = 9; ptesize = 8; break;
> > > +    case VM_1_10_SV48:
> > > +      levels = 4; ptidxbits = 9; ptesize = 8; break;
> > > +    case VM_1_10_SV57:
> > > +      levels = 5; ptidxbits = 9; ptesize = 8; break;
> > > +    case VM_1_10_MBARE:
> > > +        *physical = addr;
> > > +        *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
> > > +        return TRANSLATE_SUCCESS;
> > > +    default:
> > > +      g_assert_not_reached();
> > >      }
> > >
> > >      CPUState *cs = env_cpu(env);
> > > @@ -588,7 +567,6 @@ static void raise_mmu_exception(CPURISCVState *env, 
> > > target_ulong address,
> > >      int page_fault_exceptions;
> > >      if (first_stage) {
> > >          page_fault_exceptions =
> > > -            (env->priv_ver >= PRIV_VERSION_1_10_0) &&
> > >              get_field(env->satp, SATP_MODE) != VM_1_10_MBARE &&
> > >              !pmp_violation;
> > >      } else {
> > > @@ -941,8 +919,7 @@ void riscv_cpu_do_interrupt(CPUState *cs)
> > >          }
> > >
> > >          s = env->mstatus;
> > > -        s = set_field(s, MSTATUS_SPIE, env->priv_ver >= 
> > > PRIV_VERSION_1_10_0 ?
> > > -            get_field(s, MSTATUS_SIE) : get_field(s, MSTATUS_UIE << 
> > > env->priv));
> > > +        s = set_field(s, MSTATUS_SPIE, get_field(s, MSTATUS_SIE));
> > >          s = set_field(s, MSTATUS_SPP, env->priv);
> > >          s = set_field(s, MSTATUS_SIE, 0);
> > >          env->mstatus = s;
> > > @@ -979,8 +956,7 @@ void riscv_cpu_do_interrupt(CPUState *cs)
> > >          }
> > >
> > >          s = env->mstatus;
> > > -        s = set_field(s, MSTATUS_MPIE, env->priv_ver >= 
> > > PRIV_VERSION_1_10_0 ?
> > > -            get_field(s, MSTATUS_MIE) : get_field(s, MSTATUS_UIE << 
> > > env->priv));
> > > +        s = set_field(s, MSTATUS_MPIE, get_field(s, MSTATUS_MIE));
> > >          s = set_field(s, MSTATUS_MPP, env->priv);
> > >          s = set_field(s, MSTATUS_MIE, 0);
> > >          env->mstatus = s;
> > > diff --git a/target/riscv/csr.c b/target/riscv/csr.c
> > > index 11d184cd16..ad42beb7df 100644
> > > --- a/target/riscv/csr.c
> > > +++ b/target/riscv/csr.c
> > > @@ -58,31 +58,11 @@ static int ctr(CPURISCVState *env, int csrno)
> > >  #if !defined(CONFIG_USER_ONLY)
> > >      CPUState *cs = env_cpu(env);
> > >      RISCVCPU *cpu = RISCV_CPU(cs);
> > > -    uint32_t ctr_en = ~0u;
> > >
> > >      if (!cpu->cfg.ext_counters) {
> > >          /* The Counters extensions is not enabled */
> > >          return -1;
> > >      }
> > > -
> > > -    /*
> > > -     * The counters are always enabled at run time on newer priv specs, 
> > > as the
> > > -     * CSR has changed from controlling that the counters can be read to
> > > -     * controlling that the counters increment.
> > > -     */
> > > -    if (env->priv_ver > PRIV_VERSION_1_09_1) {
> > > -        return 0;
> > > -    }
> > > -
> > > -    if (env->priv < PRV_M) {
> > > -        ctr_en &= env->mcounteren;
> > > -    }
> > > -    if (env->priv < PRV_S) {
> > > -        ctr_en &= env->scounteren;
> > > -    }
> > > -    if (!(ctr_en & (1u << (csrno & 31)))) {
> > > -        return -1;
> > > -    }
> > >  #endif
> > >      return 0;
> > >  }
> > > @@ -293,9 +273,6 @@ static const target_ulong delegable_excps =
> > >      (1ULL << (RISCV_EXCP_INST_GUEST_PAGE_FAULT)) |
> > >      (1ULL << (RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT)) |
> > >      (1ULL << (RISCV_EXCP_STORE_GUEST_AMO_ACCESS_FAULT));
> > > -static const target_ulong sstatus_v1_9_mask = SSTATUS_SIE | SSTATUS_SPIE 
> > > |
> > > -    SSTATUS_UIE | SSTATUS_UPIE | SSTATUS_SPP | SSTATUS_FS | SSTATUS_XS |
> > > -    SSTATUS_SUM | SSTATUS_SD;
> > >  static const target_ulong sstatus_v1_10_mask = SSTATUS_SIE | 
> > > SSTATUS_SPIE |
> > >      SSTATUS_UIE | SSTATUS_UPIE | SSTATUS_SPP | SSTATUS_FS | SSTATUS_XS |
> > >      SSTATUS_SUM | SSTATUS_MXR | SSTATUS_SD;
> > > @@ -304,20 +281,11 @@ static const target_ulong hip_writable_mask = 
> > > MIP_VSSIP | MIP_VSTIP | MIP_VSEIP;
> > >  static const target_ulong vsip_writable_mask = MIP_VSSIP;
> > >
> > >  #if defined(TARGET_RISCV32)
> > > -static const char valid_vm_1_09[16] = {
> > > -    [VM_1_09_MBARE] = 1,
> > > -    [VM_1_09_SV32] = 1,
> > > -};
> > >  static const char valid_vm_1_10[16] = {
> > >      [VM_1_10_MBARE] = 1,
> > >      [VM_1_10_SV32] = 1
> > >  };
> > >  #elif defined(TARGET_RISCV64)
> > > -static const char valid_vm_1_09[16] = {
> > > -    [VM_1_09_MBARE] = 1,
> > > -    [VM_1_09_SV39] = 1,
> > > -    [VM_1_09_SV48] = 1,
> > > -};
> > >  static const char valid_vm_1_10[16] = {
> > >      [VM_1_10_MBARE] = 1,
> > >      [VM_1_10_SV39] = 1,
> > > @@ -347,8 +315,7 @@ static int read_mstatus(CPURISCVState *env, int 
> > > csrno, target_ulong *val)
> > >
> > >  static int validate_vm(CPURISCVState *env, target_ulong vm)
> > >  {
> > > -    return (env->priv_ver >= PRIV_VERSION_1_10_0) ?
> > > -        valid_vm_1_10[vm & 0xf] : valid_vm_1_09[vm & 0xf];
> > > +    return valid_vm_1_10[vm & 0xf];
> > >  }
> > >
> > >  static int write_mstatus(CPURISCVState *env, int csrno, target_ulong val)
> > > @@ -358,34 +325,21 @@ static int write_mstatus(CPURISCVState *env, int 
> > > csrno, target_ulong val)
> > >      int dirty;
> > >
> > >      /* flush tlb on mstatus fields that affect VM */
> > > -    if (env->priv_ver <= PRIV_VERSION_1_09_1) {
> > > -        if ((val ^ mstatus) & (MSTATUS_MXR | MSTATUS_MPP |
> > > -                MSTATUS_MPRV | MSTATUS_SUM | MSTATUS_VM)) {
> > > -            tlb_flush(env_cpu(env));
> > > -        }
> > > -        mask = MSTATUS_SIE | MSTATUS_SPIE | MSTATUS_MIE | MSTATUS_MPIE |
> > > -            MSTATUS_SPP | MSTATUS_FS | MSTATUS_MPRV | MSTATUS_SUM |
> > > -            MSTATUS_MPP | MSTATUS_MXR |
> > > -            (validate_vm(env, get_field(val, MSTATUS_VM)) ?
> > > -                MSTATUS_VM : 0);
> > > +    if ((val ^ mstatus) & (MSTATUS_MXR | MSTATUS_MPP | MSTATUS_MPV |
> > > +            MSTATUS_MPRV | MSTATUS_SUM)) {
> > > +        tlb_flush(env_cpu(env));
> > >      }
> > > -    if (env->priv_ver >= PRIV_VERSION_1_10_0) {
> > > -        if ((val ^ mstatus) & (MSTATUS_MXR | MSTATUS_MPP | MSTATUS_MPV |
> > > -                MSTATUS_MPRV | MSTATUS_SUM)) {
> > > -            tlb_flush(env_cpu(env));
> > > -        }
> > > -        mask = MSTATUS_SIE | MSTATUS_SPIE | MSTATUS_MIE | MSTATUS_MPIE |
> > > -            MSTATUS_SPP | MSTATUS_FS | MSTATUS_MPRV | MSTATUS_SUM |
> > > -            MSTATUS_MPP | MSTATUS_MXR | MSTATUS_TVM | MSTATUS_TSR |
> > > -            MSTATUS_TW;
> > > +    mask = MSTATUS_SIE | MSTATUS_SPIE | MSTATUS_MIE | MSTATUS_MPIE |
> > > +        MSTATUS_SPP | MSTATUS_FS | MSTATUS_MPRV | MSTATUS_SUM |
> > > +        MSTATUS_MPP | MSTATUS_MXR | MSTATUS_TVM | MSTATUS_TSR |
> > > +        MSTATUS_TW;
> > >  #if defined(TARGET_RISCV64)
> > > -            /*
> > > -             * RV32: MPV and MTL are not in mstatus. The current plan is 
> > > to
> > > -             * add them to mstatush. For now, we just don't support it.
> > > -             */
> > > -            mask |= MSTATUS_MTL | MSTATUS_MPV;
> > > +    /*
> > > +     * RV32: MPV and MTL are not in mstatus. The current plan is to
> > > +     * add them to mstatush. For now, we just don't support it.
> > > +     */
> > > +    mask |= MSTATUS_MTL | MSTATUS_MPV;
> > >  #endif
> > > -    }
> > >
> > >      mstatus = (mstatus & ~mask) | (val & mask);
> > >
> > > @@ -534,18 +488,12 @@ static int write_mtvec(CPURISCVState *env, int 
> > > csrno, target_ulong val)
> > >
> > >  static int read_mcounteren(CPURISCVState *env, int csrno, target_ulong 
> > > *val)
> > >  {
> > > -    if (env->priv_ver < PRIV_VERSION_1_10_0) {
> > > -        return -1;
> > > -    }
> > >      *val = env->mcounteren;
> > >      return 0;
> > >  }
> > >
> > >  static int write_mcounteren(CPURISCVState *env, int csrno, target_ulong 
> > > val)
> > >  {
> > > -    if (env->priv_ver < PRIV_VERSION_1_10_0) {
> > > -        return -1;
> > > -    }
> > >      env->mcounteren = val;
> > >      return 0;
> > >  }
> > > @@ -553,8 +501,7 @@ static int write_mcounteren(CPURISCVState *env, int 
> > > csrno, target_ulong val)
> > >  /* 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_09_1
> > > -        && env->priv_ver < PRIV_VERSION_1_11_0) {
> > > +    if (env->priv_ver < PRIV_VERSION_1_11_0) {
> > >          return -1;
> > >      }
> > >      *val = env->mcounteren;
> > > @@ -564,32 +511,13 @@ static int read_mscounteren(CPURISCVState *env, int 
> > > csrno, target_ulong *val)
> > >  /* 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_09_1
> > > -        && env->priv_ver < PRIV_VERSION_1_11_0) {
> > > +    if (env->priv_ver < PRIV_VERSION_1_11_0) {
> > >          return -1;
> > >      }
> > >      env->mcounteren = val;
> > >      return 0;
> > >  }
> > >
> > > -static int read_mucounteren(CPURISCVState *env, int csrno, target_ulong 
> > > *val)
> > > -{
> > > -    if (env->priv_ver > PRIV_VERSION_1_09_1) {
> > > -        return -1;
> > > -    }
> > > -    *val = env->scounteren;
> > > -    return 0;
> > > -}
> > > -
> > > -static int write_mucounteren(CPURISCVState *env, int csrno, target_ulong 
> > > val)
> > > -{
> > > -    if (env->priv_ver > PRIV_VERSION_1_09_1) {
> > > -        return -1;
> > > -    }
> > > -    env->scounteren = val;
> > > -    return 0;
> > > -}
> > > -
> > >  /* Machine Trap Handling */
> > >  static int read_mscratch(CPURISCVState *env, int csrno, target_ulong 
> > > *val)
> > >  {
> > > @@ -663,16 +591,14 @@ static int rmw_mip(CPURISCVState *env, int csrno, 
> > > target_ulong *ret_value,
> > >  /* Supervisor Trap Setup */
> > >  static int read_sstatus(CPURISCVState *env, int csrno, target_ulong *val)
> > >  {
> > > -    target_ulong mask = ((env->priv_ver >= PRIV_VERSION_1_10_0) ?
> > > -                         sstatus_v1_10_mask : sstatus_v1_9_mask);
> > > +    target_ulong mask = (sstatus_v1_10_mask);
> > >      *val = env->mstatus & mask;
> > >      return 0;
> > >  }
> > >
> > >  static int write_sstatus(CPURISCVState *env, int csrno, target_ulong val)
> > >  {
> > > -    target_ulong mask = ((env->priv_ver >= PRIV_VERSION_1_10_0) ?
> > > -                         sstatus_v1_10_mask : sstatus_v1_9_mask);
> > > +    target_ulong mask = (sstatus_v1_10_mask);
> > >      target_ulong newval = (env->mstatus & ~mask) | (val & mask);
> > >      return write_mstatus(env, CSR_MSTATUS, newval);
> > >  }
> > > @@ -829,13 +755,7 @@ static int write_satp(CPURISCVState *env, int csrno, 
> > > target_ulong val)
> > >      if (!riscv_feature(env, RISCV_FEATURE_MMU)) {
> > >          return 0;
> > >      }
> > > -    if (env->priv_ver <= PRIV_VERSION_1_09_1 && (val ^ env->sptbr)) {
> > > -        tlb_flush(env_cpu(env));
> > > -        env->sptbr = val & (((target_ulong)
> > > -            1 << (TARGET_PHYS_ADDR_SPACE_BITS - PGSHIFT)) - 1);
> > > -    }
> > > -    if (env->priv_ver >= PRIV_VERSION_1_10_0 &&
> > > -        validate_vm(env, get_field(val, SATP_MODE)) &&
> > > +    if (validate_vm(env, get_field(val, SATP_MODE)) &&
> > >          ((val ^ env->satp) & (SATP_MODE | SATP_ASID | SATP_PPN)))
> > >      {
> > >          if (env->priv == PRV_S && get_field(env->mstatus, MSTATUS_TVM)) {
> > > @@ -1313,8 +1233,6 @@ static riscv_csr_operations csr_ops[CSR_TABLE_SIZE] 
> > > = {
> > >      [CSR_MSTATUSH] =            { any,  read_mstatush,    write_mstatush 
> > >    },
> > >  #endif
> > >
> > > -    /* Legacy Counter Setup (priv v1.9.1) */
> > > -    [CSR_MUCOUNTEREN] =         { any,  read_mucounteren, 
> > > write_mucounteren },
> > >      [CSR_MSCOUNTEREN] =         { any,  read_mscounteren, 
> > > write_mscounteren },
> > >
> > >      /* Machine Trap Handling */
> > > diff --git a/target/riscv/insn_trans/trans_privileged.inc.c 
> > > b/target/riscv/insn_trans/trans_privileged.inc.c
> > > index 76c2fad71c..5f26e0f5ea 100644
> > > --- a/target/riscv/insn_trans/trans_privileged.inc.c
> > > +++ b/target/riscv/insn_trans/trans_privileged.inc.c
> > > @@ -85,30 +85,21 @@ static bool trans_wfi(DisasContext *ctx, arg_wfi *a)
> > >  static bool trans_sfence_vma(DisasContext *ctx, arg_sfence_vma *a)
> > >  {
> > >  #ifndef CONFIG_USER_ONLY
> > > -    if (ctx->priv_ver >= PRIV_VERSION_1_10_0) {
> > > -        gen_helper_tlb_flush(cpu_env);
> > > -        return true;
> > > -    }
> > > +    gen_helper_tlb_flush(cpu_env);
> > > +    return true;
> > >  #endif
> > >      return false;
> > >  }
> > >
> > >  static bool trans_sfence_vm(DisasContext *ctx, arg_sfence_vm *a)
> > >  {
> > > -#ifndef CONFIG_USER_ONLY
> > > -    if (ctx->priv_ver <= PRIV_VERSION_1_09_1) {
> > > -        gen_helper_tlb_flush(cpu_env);
> > > -        return true;
> > > -    }
> > > -#endif
> > >      return false;
> > >  }
> > >
> > >  static bool trans_hfence_gvma(DisasContext *ctx, arg_sfence_vma *a)
> > >  {
> > >  #ifndef CONFIG_USER_ONLY
> > > -    if (ctx->priv_ver >= PRIV_VERSION_1_10_0 &&
> > > -        has_ext(ctx, RVH)) {
> > > +    if (has_ext(ctx, RVH)) {
> > >          /* Hpervisor extensions exist */
> > >          /*
> > >           * if (env->priv == PRV_M ||
> > > @@ -127,8 +118,7 @@ static bool trans_hfence_gvma(DisasContext *ctx, 
> > > arg_sfence_vma *a)
> > >  static bool trans_hfence_bvma(DisasContext *ctx, arg_sfence_vma *a)
> > >  {
> > >  #ifndef CONFIG_USER_ONLY
> > > -    if (ctx->priv_ver >= PRIV_VERSION_1_10_0 &&
> > > -        has_ext(ctx, RVH)) {
> > > +    if (has_ext(ctx, RVH)) {
> > >          /* Hpervisor extensions exist */
> > >          /*
> > >           * if (env->priv == PRV_M ||
> > > diff --git a/target/riscv/monitor.c b/target/riscv/monitor.c
> > > index d725a7a36e..b569f08387 100644
> > > --- a/target/riscv/monitor.c
> > > +++ b/target/riscv/monitor.c
> > > @@ -215,11 +215,6 @@ void hmp_info_mem(Monitor *mon, const QDict *qdict)
> > >          return;
> > >      }
> > >
> > > -    if (env->priv_ver < PRIV_VERSION_1_10_0) {
> > > -        monitor_printf(mon, "Privileged mode < 1.10 unsupported\n");
> > > -        return;
> > > -    }
> > > -
> > >      if (!(env->satp & SATP_MODE)) {
> > >          monitor_printf(mon, "No translation or protection\n");
> > >          return;
> > > diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c
> > > index c6412f680c..b0c49efc4a 100644
> > > --- a/target/riscv/op_helper.c
> > > +++ b/target/riscv/op_helper.c
> > > @@ -84,8 +84,7 @@ target_ulong helper_sret(CPURISCVState *env, 
> > > target_ulong cpu_pc_deb)
> > >          riscv_raise_exception(env, RISCV_EXCP_INST_ADDR_MIS, GETPC());
> > >      }
> > >
> > > -    if (env->priv_ver >= PRIV_VERSION_1_10_0 &&
> > > -        get_field(env->mstatus, MSTATUS_TSR) && !(env->priv >= PRV_M)) {
> > > +    if (get_field(env->mstatus, MSTATUS_TSR) && !(env->priv >= PRV_M)) {
> > >          riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC());
> > >      }
> > >
> > > @@ -119,10 +118,8 @@ target_ulong helper_sret(CPURISCVState *env, 
> > > target_ulong cpu_pc_deb)
> > >      } else {
> > >          prev_priv = get_field(mstatus, MSTATUS_SPP);
> > >
> > > -        mstatus = set_field(mstatus,
> > > -            env->priv_ver >= PRIV_VERSION_1_10_0 ?
> > > -            MSTATUS_SIE : MSTATUS_UIE << prev_priv,
> > > -            get_field(mstatus, MSTATUS_SPIE));
> > > +        mstatus = set_field(mstatus, MSTATUS_SIE,
> > > +                            get_field(mstatus, MSTATUS_SPIE));
> > >          mstatus = set_field(mstatus, MSTATUS_SPIE, 1);
> > >          mstatus = set_field(mstatus, MSTATUS_SPP, PRV_U);
> > >          env->mstatus = mstatus;
> > > @@ -147,10 +144,8 @@ target_ulong helper_mret(CPURISCVState *env, 
> > > target_ulong cpu_pc_deb)
> > >      target_ulong mstatus = env->mstatus;
> > >      target_ulong prev_priv = get_field(mstatus, MSTATUS_MPP);
> > >      target_ulong prev_virt = MSTATUS_MPV_ISSET(env);
> > > -    mstatus = set_field(mstatus,
> > > -        env->priv_ver >= PRIV_VERSION_1_10_0 ?
> > > -        MSTATUS_MIE : MSTATUS_UIE << prev_priv,
> > > -        get_field(mstatus, MSTATUS_MPIE));
> > > +    mstatus = set_field(mstatus, MSTATUS_MIE,
> > > +                        get_field(mstatus, MSTATUS_MPIE));
> > >      mstatus = set_field(mstatus, MSTATUS_MPIE, 1);
> > >      mstatus = set_field(mstatus, MSTATUS_MPP, PRV_U);
> > >  #ifdef TARGET_RISCV32
> > > @@ -177,7 +172,6 @@ void helper_wfi(CPURISCVState *env)
> > >      CPUState *cs = env_cpu(env);
> > >
> > >      if ((env->priv == PRV_S &&
> > > -        env->priv_ver >= PRIV_VERSION_1_10_0 &&
> > >          get_field(env->mstatus, MSTATUS_TW)) ||
> > >          riscv_cpu_virt_enabled(env)) {
> > >          riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC());
> > > @@ -193,7 +187,6 @@ void helper_tlb_flush(CPURISCVState *env)
> > >      CPUState *cs = env_cpu(env);
> > >      if (!(env->priv >= PRV_S) ||
> > >          (env->priv == PRV_S &&
> > > -         env->priv_ver >= PRIV_VERSION_1_10_0 &&
> > >           get_field(env->mstatus, MSTATUS_TVM))) {
> > >          riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC());
> > >      } else {
> > > --
> > > 2.26.2
> > >
> > >



reply via email to

[Prev in Thread] Current Thread [Next in Thread]