svn commit: r354722 - in head/sys/riscv: include riscv
Mitchell Horne
mhorne at FreeBSD.org
Fri Nov 15 03:40:04 UTC 2019
Author: mhorne
Date: Fri Nov 15 03:40:02 2019
New Revision: 354722
URL: https://svnweb.freebsd.org/changeset/base/354722
Log:
RISC-V: Print SBI info at startup
SBI version 0.2 introduces functions for obtaining the details of the
SBI implementation, such as version and implemntation ID. Print this
info at startup when it is available.
Reviewed by: jhb, kp
MFC after: 3 weeks
Differential Revision: https://reviews.freebsd.org/D22327
Modified:
head/sys/riscv/include/sbi.h
head/sys/riscv/riscv/machdep.c
head/sys/riscv/riscv/sbi.c
Modified: head/sys/riscv/include/sbi.h
==============================================================================
--- head/sys/riscv/include/sbi.h Fri Nov 15 03:37:49 2019 (r354721)
+++ head/sys/riscv/include/sbi.h Fri Nov 15 03:40:02 2019 (r354722)
@@ -201,6 +201,7 @@ sbi_remote_sfence_vma_asid(const unsigned long *hart_m
start, size, asid);
}
+void sbi_print_version(void);
void sbi_init(void);
#endif /* !_MACHINE_SBI_H_ */
Modified: head/sys/riscv/riscv/machdep.c
==============================================================================
--- head/sys/riscv/riscv/machdep.c Fri Nov 15 03:37:49 2019 (r354721)
+++ head/sys/riscv/riscv/machdep.c Fri Nov 15 03:40:02 2019 (r354722)
@@ -128,6 +128,7 @@ static void
cpu_startup(void *dummy)
{
+ sbi_print_version();
identify_cpu();
printf("real memory = %ju (%ju MB)\n", ptoa((uintmax_t)realmem),
Modified: head/sys/riscv/riscv/sbi.c
==============================================================================
--- head/sys/riscv/riscv/sbi.c Fri Nov 15 03:37:49 2019 (r354721)
+++ head/sys/riscv/riscv/sbi.c Fri Nov 15 03:40:02 2019 (r354722)
@@ -35,6 +35,10 @@ __FBSDID("$FreeBSD$");
#include <machine/md_var.h>
#include <machine/sbi.h>
+/* SBI Implementation-Specific Definitions */
+#define OPENSBI_VERSION_MAJOR_OFFSET 16
+#define OPENSBI_VERSION_MINOR_MASK 0xFFFF
+
u_long sbi_spec_version;
u_long sbi_impl_id;
u_long sbi_impl_version;
@@ -74,6 +78,39 @@ static struct sbi_ret
sbi_get_mimpid(void)
{
return (SBI_CALL0(SBI_EXT_ID_BASE, SBI_BASE_GET_MIMPID));
+}
+
+void
+sbi_print_version(void)
+{
+ u_int major;
+ u_int minor;
+
+ /* For legacy SBI implementations. */
+ if (sbi_spec_version == 0) {
+ printf("SBI: Unknown (Legacy) Implementation\n");
+ printf("SBI Specification Version: 0.1\n");
+ return;
+ }
+
+ switch (sbi_impl_id) {
+ case (SBI_IMPL_ID_BBL):
+ printf("SBI: Berkely Boot Loader %u\n", sbi_impl_version);
+ break;
+ case (SBI_IMPL_ID_OPENSBI):
+ major = sbi_impl_version >> OPENSBI_VERSION_MAJOR_OFFSET;
+ minor = sbi_impl_version & OPENSBI_VERSION_MINOR_MASK;
+ printf("SBI: OpenSBI v%u.%u\n", major, minor);
+ break;
+ default:
+ printf("SBI: Unrecognized Implementation: %u\n", sbi_impl_id);
+ break;
+ }
+
+ major = (sbi_spec_version & SBI_SPEC_VERS_MAJOR_MASK) >>
+ SBI_SPEC_VERS_MAJOR_OFFSET;
+ minor = (sbi_spec_version & SBI_SPEC_VERS_MINOR_MASK);
+ printf("SBI Specification Version: %u.%u\n", major, minor);
}
void
More information about the svn-src-head
mailing list