[PATCH v5 08/12] lib: sbi: Reset the mhpmevent value upon counter reset

Anup Patel anup at brainfault.org
Thu Nov 11 04:47:23 PST 2021


On Tue, Nov 9, 2021 at 12:23 AM Atish Patra <atish.patra at wdc.com> wrote:
>
> The hardware solely relies on the event selector value in mhpmevent
> to figure out what event to monitor using that counter. It should be
> reset when counter reset happens.
>
> Reviewed-by: Anup Patel <anup.patel at wdc.com>
> Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
> Signed-off-by: Atish Patra <atish.patra at wdc.com>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>  lib/sbi/sbi_pmu.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/lib/sbi/sbi_pmu.c b/lib/sbi/sbi_pmu.c
> index 818b87555e69..1bb3e49412b7 100644
> --- a/lib/sbi/sbi_pmu.c
> +++ b/lib/sbi/sbi_pmu.c
> @@ -369,6 +369,20 @@ static int pmu_ctr_stop_fw(uint32_t cidx, uint32_t fw_evt_code)
>         return 0;
>  }
>
> +static int pmu_reset_hw_mhpmevent(int ctr_idx)
> +{
> +       if (ctr_idx < 3 || ctr_idx >= SBI_PMU_HW_CTR_MAX)
> +               return SBI_EFAIL;
> +#if __riscv_xlen == 32
> +       csr_write_num(CSR_MHPMEVENT3 + ctr_idx - 3, 0);
> +       csr_write_num(CSR_MHPMEVENT3H + ctr_idx - 3, 0);
> +#else
> +       csr_write_num(CSR_MHPMEVENT3 + ctr_idx - 3, 0);
> +#endif
> +
> +       return 0;
> +}
> +
>  int sbi_pmu_ctr_stop(unsigned long cbase, unsigned long cmask,
>                      unsigned long flag)
>  {
> @@ -392,8 +406,10 @@ int sbi_pmu_ctr_stop(unsigned long cbase, unsigned long cmask,
>                 else
>                         ret = pmu_ctr_stop_hw(cbase);
>
> -               if (!ret && (flag & SBI_PMU_STOP_FLAG_RESET))
> +               if (flag & SBI_PMU_STOP_FLAG_RESET) {
>                         active_events[hartid][cbase] = SBI_PMU_EVENT_IDX_INVALID;
> +                       pmu_reset_hw_mhpmevent(cbase);
> +               }
>         }
>
>         return ret;
> --
> 2.31.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list