On Fri, Jul 19, 2024 at 10:39:45AM GMT, James Raphael Tiovalen wrote: > Add a `sbi_probe` helper method that can be used by SBI extension tests > to check if a given extension is available. > Suggested-by: Andrew Jones <andrew.jones@xxxxxxxxx> > Signed-off-by: James Raphael Tiovalen <jamestiotio@xxxxxxxxx> > --- > lib/riscv/asm/sbi.h | 1 + > lib/riscv/sbi.c | 10 ++++++++++ > 2 files changed, 11 insertions(+) > > diff --git a/lib/riscv/asm/sbi.h b/lib/riscv/asm/sbi.h > index d82a384d..5e1a674a 100644 > --- a/lib/riscv/asm/sbi.h > +++ b/lib/riscv/asm/sbi.h > @@ -49,6 +49,7 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > > void sbi_shutdown(void); > struct sbiret sbi_hart_start(unsigned long hartid, unsigned long entry, unsigned long sp); > +long sbi_probe(int ext); > > #endif /* !__ASSEMBLY__ */ > #endif /* _ASMRISCV_SBI_H_ */ > diff --git a/lib/riscv/sbi.c b/lib/riscv/sbi.c > index f39134c4..7d7d09c3 100644 > --- a/lib/riscv/sbi.c > +++ b/lib/riscv/sbi.c > @@ -38,3 +38,13 @@ struct sbiret sbi_hart_start(unsigned long hartid, unsigned long entry, unsigned > { > return sbi_ecall(SBI_EXT_HSM, SBI_EXT_HSM_HART_START, hartid, entry, sp, 0, 0, 0); > } > + > +long sbi_probe(int ext) > +{ > + struct sbiret ret; Let's also add ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_SPEC_VERSION, 0, 0, 0, 0, 0, 0); assert(!ret.error && ret.value >= 2); > + > + ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_PROBE_EXT, ext, 0, 0, 0, 0, 0); > + assert(!ret.error); > + > + return ret.value; > +} > -- > 2.43.0 > With that addition, Reviewed-by: Andrew Jones <andrew.jones@xxxxxxxxx> Thanks, drew