qemu-riscv
[Top][All Lists]
Advanced

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

Re: [Qemu-riscv] [Qemu-devel] [PATCH] target/riscv: Hardwire mcounter.TM


From: Alistair Francis
Subject: Re: [Qemu-riscv] [Qemu-devel] [PATCH] target/riscv: Hardwire mcounter.TM and upper bits of [m|s]counteren
Date: Fri, 28 Jun 2019 14:59:07 -0700

On Fri, Jun 28, 2019 at 2:20 PM Jonathan Behrens <address@hidden> wrote:
>
> > Can you wrap your commit message at ~70 lines?
>
> Sure.
>
> > Isn't CSR_TIME & 31 just 0? Can this just be changed 1 << 1 or even better 
> > add a macro?
>
> Any of those options work. Unless anyone feels strongly otherwise, I'll add 
> macros for the bits associated with the three named counters but not the 
> remaining 29 unnamed "high performance counters".

Yep, sounds good.

Alistair

>
> On Fri, Jun 28, 2019 at 5:03 PM Alistair Francis <address@hidden> wrote:
>>
>> On Fri, Jun 28, 2019 at 1:12 PM <address@hidden> wrote:
>> >
>> > From: Jonathan Behrens <address@hidden>
>> >
>> > QEMU currently always triggers an illegal instruction exception when code
>> > attempts to read the time CSR. This is valid behavor, but only if the TM 
>> > bit in
>> > mcounteren is hardwired to zero. This change also corrects mcounteren and 
>> > scounteren CSRs to be 32-bits on both
>> > 32-bit and 64-bit targets.
>>
>> Thanks for the patch.
>>
>> Can you wrap your commit message at ~70 lines?
>>
>> >
>> > Signed-off-by: Jonathan Behrens <address@hidden>
>> > ---
>> >  target/riscv/cpu.h | 4 ++--
>> >  target/riscv/csr.c | 3 ++-
>> >  2 files changed, 4 insertions(+), 3 deletions(-)
>> >
>> > diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
>> > index 0adb307f32..2d0cbe9c78 100644
>> > --- a/target/riscv/cpu.h
>> > +++ b/target/riscv/cpu.h
>> > @@ -151,8 +151,8 @@ struct CPURISCVState {
>> >      target_ulong mcause;
>> >      target_ulong mtval;  /* since: priv-1.10.0 */
>> >
>> > -    target_ulong scounteren;
>> > -    target_ulong mcounteren;
>> > +    uint32_t scounteren;
>> > +    uint32_t mcounteren;
>> >
>> >      target_ulong sscratch;
>> >      target_ulong mscratch;
>> > diff --git a/target/riscv/csr.c b/target/riscv/csr.c
>> > index e0d4586760..89cf9734c3 100644
>> > --- a/target/riscv/csr.c
>> > +++ b/target/riscv/csr.c
>> > @@ -473,7 +473,8 @@ 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;
>> > +    /* mcounteren.TM is hardwired to zero, all other bits are writable */
>> > +    env->mcounteren = val & ~(1 << (CSR_TIME & 31));
>>
>> Isn't CSR_TIME & 31 just 0? Can this just be changed 1 << 1 or even
>> better add a macro?
>>
>> Otherwise this patch looks good :)
>>
>> Alistair
>>
>> >      return 0;
>> >  }
>> >
>> > --
>> > 2.22.0
>> >



reply via email to

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