[PATCH] lib: sbi_hart: Reset mhpmcounter after probing its bits
Anup Patel
anup at brainfault.org
Tue Oct 27 08:29:09 PDT 2026
On Thu, Sep 10, 2026 at 11:32 PM Evgenii Prokopiev
<eestelle0626 at gmail.com> wrote:
>
> Writting mhpmcounter3 (and 3H) to determine the allowed bit width
> has a side effect: the counter starts counting.
The counter will not count if mhpmevent3 is set to zero and currently
we are not setting any particular value set in mhpmevent3 so I am
okay with this change.
>
> Explicitly clear the counter right after the probe so the probing
> writes do not leave any persistent hardware side effect.
>
> Signed-off-by: Evgenii Prokopiev <eestelle0626 at gmail.com>
LGTM.
Reviewed-by: Anup Patel <anup at brainfault.org>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> ---
> lib/sbi/sbi_hart.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
> index bee88557..a413bfe0 100644
> --- a/lib/sbi/sbi_hart.c
> +++ b/lib/sbi/sbi_hart.c
> @@ -448,6 +448,7 @@ static int hart_mhpm_get_allowed_bits(void)
> csr_write_allowed(CSR_MHPMCOUNTER3, &trap, val);
> if (!trap.cause) {
> val = csr_read_allowed(CSR_MHPMCOUNTER3, &trap);
> + csr_write(CSR_MHPMCOUNTER3, 0);
> if (trap.cause)
> return 0;
> }
> @@ -456,6 +457,7 @@ static int hart_mhpm_get_allowed_bits(void)
> csr_write_allowed(CSR_MHPMCOUNTER3H, &trap, val);
> if (!trap.cause) {
> val = csr_read_allowed(CSR_MHPMCOUNTER3H, &trap);
> + csr_write(CSR_MHPMCOUNTER3H, 0);
> if (trap.cause)
> return num_bits;
> }
> --
> 2.50.1 (Apple Git-155)
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list