qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Pierrick Bouvier <pierrick.bouvier@linaro.org>
To: Anton Johansson <anjo@rev.ng>, qemu-devel@nongnu.org
Cc: philmd@linaro.org, richard.henderson@linaro.org,
	alistair.francis@wdc.com, palmer@dabbelt.com
Subject: Re: [PATCH v2 05/33] target/riscv: Combine mhpmevent and mhpmeventh
Date: Thu, 2 Oct 2025 12:33:41 -0700	[thread overview]
Message-ID: <cbc22e4a-84dd-4209-82fd-ec56ea138d27@linaro.org> (raw)
In-Reply-To: <e1748ad3-3475-4cce-8add-2a1d76994f0b@linaro.org>

On 10/2/25 12:08 PM, Pierrick Bouvier wrote:
> On 10/1/25 12:32 AM, Anton Johansson wrote:
>> According to version 20250508 of the privileged specification,
>> mhpmeventn is 64 bits in size and mhpmeventnh is only ever used
>> when XLEN == 32 and accesses the top 32 bits of the 64-bit
>> mhpmeventn registers. Combine the two arrays of target_ulong
>> mhpmeventh[] and mhpmevent[] to a single array of uint64_t.
>>
>> This also allows for some minor code simplification where branches
>> handling either mhpmeventh[] or mhpmevent[] could be combined.
>>
>> Signed-off-by: Anton Johansson <anjo@rev.ng>
>> ---
>>    target/riscv/cpu.h     | 10 +++----
>>    target/riscv/csr.c     | 67 +++++++++++++++---------------------------
>>    target/riscv/machine.c |  3 +-
>>    target/riscv/pmu.c     | 53 ++++++++-------------------------
>>    4 files changed, 42 insertions(+), 91 deletions(-)
>>
>> diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h
>> index 3235108112..64b9964028 100644
>> --- a/target/riscv/cpu.h
>> +++ b/target/riscv/cpu.h
>> @@ -427,11 +427,11 @@ struct CPUArchState {
>>        /* PMU counter state */
>>        PMUCTRState pmu_ctrs[RV_MAX_MHPMCOUNTERS];
>>    
>> -    /* PMU event selector configured values. First three are unused */
>> -    target_ulong mhpmevent_val[RV_MAX_MHPMEVENTS];
>> -
>> -    /* PMU event selector configured values for RV32 */
>> -    target_ulong mhpmeventh_val[RV_MAX_MHPMEVENTS];
>> +    /*
>> +     * PMU event selector configured values. First three are unused.
>> +     * For RV32 top 32 bits are accessed via the mhpmeventh CSR.
>> +     */
>> +    uint64_t mhpmevent_val[RV_MAX_MHPMEVENTS];
>>    
>>        PMUFixedCtrState pmu_fixed_ctrs[2];
>>    
>> diff --git a/target/riscv/csr.c b/target/riscv/csr.c
>> index 859f89aedd..2d8916ee40 100644
>> --- a/target/riscv/csr.c
>> +++ b/target/riscv/csr.c
>> @@ -1166,8 +1166,9 @@ static RISCVException read_mhpmevent(CPURISCVState *env, int csrno,
>>                                         target_ulong *val)
>>    {
>>        int evt_index = csrno - CSR_MCOUNTINHIBIT;
>> +    bool rv32 = riscv_cpu_mxl(env) == MXL_RV32;
>>    
>> -    *val = env->mhpmevent_val[evt_index];
>> +    *val = extract64(env->mhpmevent_val[evt_index], 0, rv32 ? 32 : 64);
>>    
>>        return RISCV_EXCP_NONE;
>>    }
>> @@ -1176,13 +1177,11 @@ static RISCVException write_mhpmevent(CPURISCVState *env, int csrno,
>>                                          target_ulong val, uintptr_t ra)
>>    {
>>        int evt_index = csrno - CSR_MCOUNTINHIBIT;
>> -    uint64_t mhpmevt_val = val;
>> +    uint64_t mhpmevt_val;
>>        uint64_t inh_avail_mask;
>>    
>>        if (riscv_cpu_mxl(env) == MXL_RV32) {
>> -        env->mhpmevent_val[evt_index] = val;
>> -        mhpmevt_val = mhpmevt_val |
>> -                      ((uint64_t)env->mhpmeventh_val[evt_index] << 32);
>> +        mhpmevt_val = deposit64(env->mhpmevent_val[evt_index], 0, 32, val);
> 
> Maybe I missed something, but should it be:
> deposit64(env->mhpmevent_val[evt_index], 32, 32, val)
> instead?
> 
> Reading the rest of the patch, I'm a bit confused about which bits are
> supposed to be used in 32/64 mode.

Indeed I missed something, it's more clear with next patchs combining 
low/high parts.
The concern I have that is left is regarding the definition of 
MHPMEVENT_BIT_OF. It seems to be out of sync with what we have now given 
that we now keep lower part in lower bits.
Existing implementation is quite confusing to be honest.


  reply	other threads:[~2025-10-02 19:35 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-01  7:32 [PATCH v2 00/33] single-binary: Make riscv cpu.h target independent Anton Johansson via
2025-10-01  7:32 ` [PATCH v2 01/33] target/riscv: Use 32 bits for misa extensions Anton Johansson via
2025-10-01  7:34   ` Philippe Mathieu-Daudé
2025-10-02  1:56   ` Alistair Francis
2025-10-02 18:31   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 02/33] target/riscv: Fix size of trivial CPUArchState fields Anton Johansson via
2025-10-02  1:57   ` Alistair Francis
2025-10-02 18:31   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 03/33] target/riscv: Fix size of mhartid Anton Johansson via
2025-10-01  7:38   ` Philippe Mathieu-Daudé
2025-10-01  8:28     ` Anton Johansson via
2025-10-02 18:34       ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 04/33] target/riscv: Bugfix riscv_pmu_ctr_get_fixed_counters_val() Anton Johansson via
2025-10-02 18:50   ` Pierrick Bouvier
2025-10-02 23:34   ` Alistair Francis
2025-10-07 11:08     ` Anton Johansson via
2025-10-15  2:55       ` Alistair Francis
2025-10-15  9:58         ` Anton Johansson via
2025-10-16  4:01           ` Alistair Francis
2025-10-17 14:24             ` Anton Johansson via
2025-10-23  1:54               ` Alistair Francis
2025-10-01  7:32 ` [PATCH v2 05/33] target/riscv: Combine mhpmevent and mhpmeventh Anton Johansson via
2025-10-01  7:39   ` Philippe Mathieu-Daudé
2025-10-02 19:09     ` Pierrick Bouvier
2025-10-02 23:52       ` Alistair Francis
2025-10-02 19:08   ` Pierrick Bouvier
2025-10-02 19:33     ` Pierrick Bouvier [this message]
2025-10-02 23:55       ` Alistair Francis
2025-10-07 11:29         ` Anton Johansson via
2025-10-14 11:25         ` Anton Johansson via
2025-10-01  7:32 ` [PATCH v2 06/33] target/riscv: Combine mcyclecfg and mcyclecfgh Anton Johansson via
2025-10-02 19:13   ` Pierrick Bouvier
2025-10-03  0:05   ` Alistair Francis
2025-10-01  7:32 ` [PATCH v2 07/33] target/riscv: Combine minstretcfg and minstretcfgh Anton Johansson via
2025-10-02 19:14   ` Pierrick Bouvier
2025-10-03  0:06   ` Alistair Francis
2025-10-01  7:32 ` [PATCH v2 08/33] target/riscv: Combine mhpmcounter and mhpmcounterh Anton Johansson via
2025-10-02 19:24   ` Pierrick Bouvier
2025-10-02 19:25   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 09/33] target/riscv: Fix size of gpr and gprh Anton Johansson via
2025-10-01  7:42   ` Philippe Mathieu-Daudé
2025-10-03  9:00     ` Anton Johansson via
2025-10-01  7:32 ` [PATCH v2 10/33] target/riscv: Fix size of vector CSRs Anton Johansson via
2025-10-02 19:42   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 11/33] target/riscv: Fix size of pc, load_[val|res] Anton Johansson via
2025-10-02 19:54   ` Pierrick Bouvier
2025-10-03 12:43     ` Anton Johansson via
2025-10-01  7:32 ` [PATCH v2 12/33] target/riscv: Fix size of frm and fflags Anton Johansson via
2025-10-02 19:57   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 13/33] target/riscv: Fix size of badaddr and bins Anton Johansson via
2025-10-02 20:02   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 14/33] target/riscv: Fix size of guest_phys_fault_addr Anton Johansson via
2025-10-02 20:03   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 15/33] target/riscv: Fix size of priv_ver and vext_ver Anton Johansson via
2025-10-02 20:03   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 16/33] target/riscv: Fix size of retxh Anton Johansson via
2025-10-02 20:05   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 17/33] target/riscv: Fix size of ssp Anton Johansson via
2025-10-02 20:06   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 18/33] target/riscv: Fix size of excp_uw2 Anton Johansson via
2025-10-02 20:06   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 19/33] target/riscv: Fix size of sw_check_code Anton Johansson via
2025-10-02 20:07   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 20/33] target/riscv: Fix size of priv Anton Johansson via
2025-10-02 20:07   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 21/33] target/riscv: Fix size of gei fields Anton Johansson via
2025-10-02 20:08   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 22/33] target/riscv: Fix size of [m|s|vs]iselect fields Anton Johansson via
2025-10-02 20:09   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 23/33] target/riscv: Fix arguments to board IMSIC emulation callbacks Anton Johansson via
2025-10-02 20:15   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 24/33] target/riscv: Fix size of irq_overflow_left Anton Johansson via
2025-10-02 20:15   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 25/33] target/riscv: Indent PMUFixedCtrState correctly Anton Johansson via
2025-10-01  7:43   ` Philippe Mathieu-Daudé
2025-10-02 20:15   ` Pierrick Bouvier
2025-10-01  7:32 ` [PATCH v2 26/33] target/riscv: Replace target_ulong in riscv_cpu_get_trap_name() Anton Johansson via
2025-10-01  7:43   ` Philippe Mathieu-Daudé
2025-10-02 20:15   ` Pierrick Bouvier
2025-10-01  7:33 ` [PATCH v2 27/33] target/riscv: Replace target_ulong in riscv_ctr_add_entry() Anton Johansson via
2025-10-01  7:44   ` Philippe Mathieu-Daudé
2025-10-02 20:19   ` Pierrick Bouvier
2025-10-01  7:33 ` [PATCH v2 28/33] target/riscv: Fix size of trigger data Anton Johansson via
2025-10-01  7:46   ` Philippe Mathieu-Daudé
2025-10-02 20:19   ` Pierrick Bouvier
2025-10-01  7:33 ` [PATCH v2 29/33] target/riscv: Fix size of mseccfg Anton Johansson via
2025-10-01  7:46   ` Philippe Mathieu-Daudé
2025-10-02 20:20   ` Pierrick Bouvier
2025-10-01  7:33 ` [PATCH v2 30/33] target/riscv: Move debug.h include away from cpu.h Anton Johansson via
2025-10-02 20:21   ` Pierrick Bouvier
2025-10-03 12:52     ` Anton Johansson via
2025-10-01  7:33 ` [PATCH v2 31/33] target/riscv: Move CSR declarations to separate csr.h header Anton Johansson via
2025-10-02 20:22   ` Pierrick Bouvier
2025-10-01  7:33 ` [PATCH v2 32/33] target/riscv: Introduce externally facing CSR access functions Anton Johansson via
2025-10-02 20:24   ` Pierrick Bouvier
2025-10-01  7:33 ` [PATCH v2 33/33] target/riscv: Make pmp.h target_ulong agnostic Anton Johansson via
2025-10-01  7:49   ` Philippe Mathieu-Daudé
2025-10-03 12:57     ` Anton Johansson via
2025-10-02 20:23   ` Pierrick Bouvier

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=cbc22e4a-84dd-4209-82fd-ec56ea138d27@linaro.org \
    --to=pierrick.bouvier@linaro.org \
    --cc=alistair.francis@wdc.com \
    --cc=anjo@rev.ng \
    --cc=palmer@dabbelt.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).