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