[PATCH] lib: sbi: Fix hw a/d updating defaults
Anup Patel
apatel at ventanamicro.com
Mon May 11 06:48:17 PDT 2026
On Thu, Apr 2, 2026 at 3:41 AM Andrew Jones
<andrew.jones at oss.qualcomm.com> wrote:
>
> The Svade dt-binding description states that Svadu should only
> be enabled at boot time when only Svadu is present in the DT.
> Ensure that's the case. Also, when only Svadu is supported,
> disable FWFT.PTE_AD_HW_UPDATING, as we need both to support
> toggling.
>
> Signed-off-by: Andrew Jones <andrew.jones at oss.qualcomm.com>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> ---
> lib/sbi/sbi_fwft.c | 10 +++++++++-
> lib/sbi/sbi_hart.c | 18 ++++++++++--------
> 2 files changed, 19 insertions(+), 9 deletions(-)
>
> diff --git a/lib/sbi/sbi_fwft.c b/lib/sbi/sbi_fwft.c
> index 373140b746bd..574b875e408d 100644
> --- a/lib/sbi/sbi_fwft.c
> +++ b/lib/sbi/sbi_fwft.c
> @@ -160,8 +160,16 @@ static int fwft_get_double_trap(struct fwft_config *conf, unsigned long *value)
>
> static int fwft_adue_supported(struct fwft_config *conf)
> {
> + /*
> + * FWFT.PTE_AD_HW_UPDATING is only supported when both Svade and Svadu
> + * are supported. We need both in order to support toggling and to
> + * ensure the reset value of zero is valid (it wouldn't be when only
> + * Svadu is supported).
> + */
> if (!sbi_hart_has_extension(sbi_scratch_thishart_ptr(),
> - SBI_HART_EXT_SVADU))
> + SBI_HART_EXT_SVADU) ||
> + !sbi_hart_has_extension(sbi_scratch_thishart_ptr(),
> + SBI_HART_EXT_SVADE))
> return SBI_ENOTSUPP;
>
> return SBI_OK;
> diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
> index 99e13990aa60..0df11d0d1029 100644
> --- a/lib/sbi/sbi_hart.c
> +++ b/lib/sbi/sbi_hart.c
> @@ -137,6 +137,9 @@ static void mstatus_init(struct sbi_scratch *scratch)
> if (sbi_hart_priv_version(scratch) >= SBI_HART_PRIV_VER_1_12) {
> menvcfg_val = csr_read64(CSR_MENVCFG);
>
> + /* Disable HW A/D updating by default */
> + menvcfg_val &= ~ENVCFG_ADUE;
> +
> /* Disable double trap by default */
> menvcfg_val &= ~ENVCFG_DTE;
>
> @@ -158,18 +161,17 @@ static void mstatus_init(struct sbi_scratch *scratch)
> #endif
> __set_menvcfg_ext(SBI_HART_EXT_SSTC, ENVCFG_STCE)
> __set_menvcfg_ext(SBI_HART_EXT_SMCDELEG, ENVCFG_CDE);
> - __set_menvcfg_ext(SBI_HART_EXT_SVADU, ENVCFG_ADUE);
> -
> -#undef __set_menvcfg_ext
>
> /*
> - * When both Svade and Svadu are present in DT, the default scheme for managing
> - * the PTE A/D bits should use Svade. Check Svadu before Svade extension to ensure
> - * that the ADUE bit is cleared when the Svade support are specified.
> + * Assume only Svadu is supported when it is the only extension
> + * present in the ISA string. Svade is assumed when neither are
> + * present. When both are present we must default to Svade (see
> + * the zero reset value of FWFT.PTE_AD_HW_UPDATING).
> */
> + if (!sbi_hart_has_extension(scratch, SBI_HART_EXT_SVADE))
> + __set_menvcfg_ext(SBI_HART_EXT_SVADU, ENVCFG_ADUE);
>
> - if (sbi_hart_has_extension(scratch, SBI_HART_EXT_SVADE))
> - menvcfg_val &= ~ENVCFG_ADUE;
> +#undef __set_menvcfg_ext
>
> csr_write64(CSR_MENVCFG, menvcfg_val);
>
> --
> 2.43.0
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list