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
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to