[PATCH 3/3] lib: sbi_hsm: Use 64-bit CSR macro for menvcfg

Anup Patel anup at brainfault.org
Mon Sep 15 21:41:27 PDT 2025


On Mon, Sep 8, 2025 at 11:26 AM Samuel Holland
<samuel.holland at sifive.com> wrote:
>
> Simplify the code and remove preprocessor checks by treating menvcfg and
> menvcfgh together as one 64-bit value.
>
> Signed-off-by: Samuel Holland <samuel.holland at sifive.com>

LGTM.

Reviewed-by: Anup Patel <anup at brainfault.org>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

> ---
>
>  lib/sbi/sbi_hsm.c | 21 +++++----------------
>  1 file changed, 5 insertions(+), 16 deletions(-)
>
> diff --git a/lib/sbi/sbi_hsm.c b/lib/sbi/sbi_hsm.c
> index 8ec94d2b..bb274b33 100644
> --- a/lib/sbi/sbi_hsm.c
> +++ b/lib/sbi/sbi_hsm.c
> @@ -48,10 +48,7 @@ struct sbi_hsm_data {
>         unsigned long saved_mip;
>         unsigned long saved_medeleg;
>         unsigned long saved_mideleg;
> -       unsigned long saved_menvcfg;
> -#if __riscv_xlen == 32
> -       unsigned long saved_menvcfgh;
> -#endif
> +       u64 saved_menvcfg;
>         atomic_t start_ticket;
>  };
>
> @@ -431,12 +428,8 @@ void __sbi_hsm_suspend_non_ret_save(struct sbi_scratch *scratch)
>         hdata->saved_mip = csr_read(CSR_MIP) & (MIP_SSIP | MIP_STIP);
>         hdata->saved_medeleg = csr_read(CSR_MEDELEG);
>         hdata->saved_mideleg = csr_read(CSR_MIDELEG);
> -       if (sbi_hart_priv_version(scratch) >= SBI_HART_PRIV_VER_1_12) {
> -#if __riscv_xlen == 32
> -               hdata->saved_menvcfgh = csr_read(CSR_MENVCFGH);
> -#endif
> -               hdata->saved_menvcfg = csr_read(CSR_MENVCFG);
> -       }
> +       if (sbi_hart_priv_version(scratch) >= SBI_HART_PRIV_VER_1_12)
> +               hdata->saved_menvcfg = csr_read64(CSR_MENVCFG);
>  }
>
>  static void __sbi_hsm_suspend_non_ret_restore(struct sbi_scratch *scratch)
> @@ -444,12 +437,8 @@ static void __sbi_hsm_suspend_non_ret_restore(struct sbi_scratch *scratch)
>         struct sbi_hsm_data *hdata = sbi_scratch_offset_ptr(scratch,
>                                                             hart_data_offset);
>
> -       if (sbi_hart_priv_version(scratch) >= SBI_HART_PRIV_VER_1_12) {
> -               csr_write(CSR_MENVCFG, hdata->saved_menvcfg);
> -#if __riscv_xlen == 32
> -               csr_write(CSR_MENVCFGH, hdata->saved_menvcfgh);
> -#endif
> -       }
> +       if (sbi_hart_priv_version(scratch) >= SBI_HART_PRIV_VER_1_12)
> +               csr_write64(CSR_MENVCFG, hdata->saved_menvcfg);
>         csr_write(CSR_MIDELEG, hdata->saved_mideleg);
>         csr_write(CSR_MEDELEG, hdata->saved_medeleg);
>         csr_write(CSR_MIE, hdata->saved_mie);
> --
> 2.47.2
>
> base-commit: 153cdeea5350837c1206a2d2b6189fd0ba06d1f2
> branch: up/mideleg-fix
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi



More information about the opensbi mailing list