Re: [PATCH] lib: sbi: Fix hw a/d updating defaults
Anup Patel <[email protected]>
| Newsgroups | org.infradead.lists.opensbi |
|---|---|
| Message-ID | <CAK9=C2VUqzmRLUVaeFTvqmJmc+L5bJXbPSNPUZK2=pb8Hy1jPA@mail.gmail.com> |
On Thu, Apr 2, 2026 at 3:41 AM Andrew Jones <[email protected]> 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 <[email protected]> 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 > [email protected] > http://lists.infradead.org/mailman/listinfo/opensbi -- opensbi mailing list [email protected] http://lists.infradead.org/mailman/listinfo/opensbi