@@ -18,6 +18,19 @@
#define SBI_ERR_IO -13
#define SBI_ERR_DENIED_LOCKED -14
+#define SBI_IMPL_BBL 0
+#define SBI_IMPL_OPENSBI 1
+#define SBI_IMPL_XVISOR 2
+#define SBI_IMPL_KVM 3
+#define SBI_IMPL_RUSTSBI 4
+#define SBI_IMPL_DIOSIX 5
+#define SBI_IMPL_COFFER 6
+#define SBI_IMPL_XEN 7
+#define SBI_IMPL_POLARFIRE_HSS 8
+#define SBI_IMPL_COREBOOT 9
+#define SBI_IMPL_OREBOOT 10
+#define SBI_IMPL_BHYVE 11
+
/* SBI spec version fields */
#define SBI_SPEC_VERSION_MAJOR_SHIFT 24
#define SBI_SPEC_VERSION_MAJOR_MASK 0x7f
@@ -124,6 +137,11 @@ static inline unsigned long sbi_mk_version(unsigned long major, unsigned long mi
| (minor & SBI_SPEC_VERSION_MINOR_MASK);
}
+static inline unsigned long sbi_impl_opensbi_mk_version(unsigned long major, unsigned long minor)
+{
+ return (((major & 0xffff) << 16) | (minor & 0xffff));
+}
+
struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0,
unsigned long arg1, unsigned long arg2,
unsigned long arg3, unsigned long arg4,
@@ -139,6 +157,8 @@ 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);
long sbi_probe(int ext);
#endif /* !__ASSEMBLER__ */
@@ -107,6 +107,26 @@ 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 ret;
+
+ ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_VERSION, 0, 0, 0, 0, 0, 0);
+ assert(!ret.error);
+
+ return ret.value;
+}
+
+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);
+ assert(!ret.error);
+
+ return ret.value;
+}
+
struct sbiret sbi_get_spec_version(void)
{
return sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_SPEC_VERSION, 0, 0, 0, 0, 0, 0);
These functions will be used by SSE tests to check for a specific OpenSBI version. Signed-off-by: Clément Léger <cleger@rivosinc.com> --- lib/riscv/asm/sbi.h | 20 ++++++++++++++++++++ lib/riscv/sbi.c | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+)