Message ID | 20250321165403.57859-6-andrew.jones@linux.dev (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | riscv: sbi: Ensure we can pass with any opensbi | expand |
On 21/03/2025 17:54, Andrew Jones wrote: > We almost always return sbiret from sbi wrapper functions so > do that for sbi_get_imp_version() and sbi_get_imp_id(), but > asserting no error and returning the value is also useful, > so continue to provide those functions too, just with a slightly > different name. > > Signed-off-by: Andrew Jones <andrew.jones@linux.dev> > --- > lib/riscv/asm/sbi.h | 6 ++++-- > lib/riscv/sbi.c | 18 ++++++++++++++---- > riscv/sbi-sse.c | 4 ++-- > 3 files changed, 20 insertions(+), 8 deletions(-) > > diff --git a/lib/riscv/asm/sbi.h b/lib/riscv/asm/sbi.h > index edaee462c3fa..a5738a5ce209 100644 > --- a/lib/riscv/asm/sbi.h > +++ b/lib/riscv/asm/sbi.h > @@ -260,9 +260,11 @@ struct sbiret sbi_send_ipi_cpumask(const cpumask_t *mask); > struct sbiret sbi_send_ipi_broadcast(void); > struct sbiret sbi_set_timer(unsigned long stime_value); > struct sbiret sbi_get_spec_version(void); > -unsigned long sbi_get_imp_version(void); > -unsigned long sbi_get_imp_id(void); > +struct sbiret sbi_get_imp_version(void); > +struct sbiret sbi_get_imp_id(void); > long sbi_probe(int ext); > +unsigned long __sbi_get_imp_version(void); > +unsigned long __sbi_get_imp_id(void); > > typedef void (*sbi_sse_handler_fn)(void *data, struct pt_regs *regs, unsigned int hartid); > > diff --git a/lib/riscv/sbi.c b/lib/riscv/sbi.c > index 53d25489f905..2959378f64bb 100644 > --- a/lib/riscv/sbi.c > +++ b/lib/riscv/sbi.c > @@ -183,21 +183,31 @@ struct sbiret sbi_set_timer(unsigned long stime_value) > return sbi_ecall(SBI_EXT_TIME, SBI_EXT_TIME_SET_TIMER, stime_value, 0, 0, 0, 0, 0); > } > > -unsigned long sbi_get_imp_version(void) > +struct sbiret sbi_get_imp_version(void) > +{ > + return sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_VERSION, 0, 0, 0, 0, 0, 0); > +} > + > +struct sbiret sbi_get_imp_id(void) > +{ > + return sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_ID, 0, 0, 0, 0, 0, 0); > +} > + > +unsigned long __sbi_get_imp_version(void) > { > struct sbiret ret; > > - ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_VERSION, 0, 0, 0, 0, 0, 0); > + ret = sbi_get_imp_version(); > assert(!ret.error); > > return ret.value; > } > > -unsigned long sbi_get_imp_id(void) > +unsigned long __sbi_get_imp_id(void) > { > struct sbiret ret; > > - ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_ID, 0, 0, 0, 0, 0, 0); > + ret = sbi_get_imp_id(); > assert(!ret.error); > > return ret.value; > diff --git a/riscv/sbi-sse.c b/riscv/sbi-sse.c > index 97e07725c359..bc6afaf5481e 100644 > --- a/riscv/sbi-sse.c > +++ b/riscv/sbi-sse.c > @@ -1232,8 +1232,8 @@ void check_sse(void) > return; > } > > - if (sbi_get_imp_id() == SBI_IMPL_OPENSBI && > - sbi_get_imp_version() < sbi_impl_opensbi_mk_version(1, 7)) { > + if (__sbi_get_imp_id() == SBI_IMPL_OPENSBI && > + __sbi_get_imp_version() < sbi_impl_opensbi_mk_version(1, 7)) { > report_skip("OpenSBI < v1.7 detected, skipping tests"); > report_prefix_pop(); > return; Hi Andrew, Looks good to me, Reviewed-by: Clément Léger <cleger@rivosinc.com> Thanks, Clément
diff --git a/lib/riscv/asm/sbi.h b/lib/riscv/asm/sbi.h index edaee462c3fa..a5738a5ce209 100644 --- a/lib/riscv/asm/sbi.h +++ b/lib/riscv/asm/sbi.h @@ -260,9 +260,11 @@ struct sbiret sbi_send_ipi_cpumask(const cpumask_t *mask); struct sbiret sbi_send_ipi_broadcast(void); struct sbiret sbi_set_timer(unsigned long stime_value); struct sbiret sbi_get_spec_version(void); -unsigned long sbi_get_imp_version(void); -unsigned long sbi_get_imp_id(void); +struct sbiret sbi_get_imp_version(void); +struct sbiret sbi_get_imp_id(void); long sbi_probe(int ext); +unsigned long __sbi_get_imp_version(void); +unsigned long __sbi_get_imp_id(void); typedef void (*sbi_sse_handler_fn)(void *data, struct pt_regs *regs, unsigned int hartid); diff --git a/lib/riscv/sbi.c b/lib/riscv/sbi.c index 53d25489f905..2959378f64bb 100644 --- a/lib/riscv/sbi.c +++ b/lib/riscv/sbi.c @@ -183,21 +183,31 @@ struct sbiret sbi_set_timer(unsigned long stime_value) return sbi_ecall(SBI_EXT_TIME, SBI_EXT_TIME_SET_TIMER, stime_value, 0, 0, 0, 0, 0); } -unsigned long sbi_get_imp_version(void) +struct sbiret sbi_get_imp_version(void) +{ + return sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_VERSION, 0, 0, 0, 0, 0, 0); +} + +struct sbiret sbi_get_imp_id(void) +{ + return sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_ID, 0, 0, 0, 0, 0, 0); +} + +unsigned long __sbi_get_imp_version(void) { struct sbiret ret; - ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_VERSION, 0, 0, 0, 0, 0, 0); + ret = sbi_get_imp_version(); assert(!ret.error); return ret.value; } -unsigned long sbi_get_imp_id(void) +unsigned long __sbi_get_imp_id(void) { struct sbiret ret; - ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_ID, 0, 0, 0, 0, 0, 0); + ret = sbi_get_imp_id(); assert(!ret.error); return ret.value; diff --git a/riscv/sbi-sse.c b/riscv/sbi-sse.c index 97e07725c359..bc6afaf5481e 100644 --- a/riscv/sbi-sse.c +++ b/riscv/sbi-sse.c @@ -1232,8 +1232,8 @@ void check_sse(void) return; } - if (sbi_get_imp_id() == SBI_IMPL_OPENSBI && - sbi_get_imp_version() < sbi_impl_opensbi_mk_version(1, 7)) { + if (__sbi_get_imp_id() == SBI_IMPL_OPENSBI && + __sbi_get_imp_version() < sbi_impl_opensbi_mk_version(1, 7)) { report_skip("OpenSBI < v1.7 detected, skipping tests"); report_prefix_pop(); return;
We almost always return sbiret from sbi wrapper functions so do that for sbi_get_imp_version() and sbi_get_imp_id(), but asserting no error and returning the value is also useful, so continue to provide those functions too, just with a slightly different name. Signed-off-by: Andrew Jones <andrew.jones@linux.dev> --- lib/riscv/asm/sbi.h | 6 ++++-- lib/riscv/sbi.c | 18 ++++++++++++++---- riscv/sbi-sse.c | 4 ++-- 3 files changed, 20 insertions(+), 8 deletions(-)