[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