The branch main has been updated by mhorne:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e2a08ac9ce424f543a2f03c67fb882fdabbdd32a

commit e2a08ac9ce424f543a2f03c67fb882fdabbdd32a
Author:     Mitchell Horne <mho...@freebsd.org>
AuthorDate: 2025-03-03 15:46:39 +0000
Commit:     Mitchell Horne <mho...@freebsd.org>
CommitDate: 2025-03-03 16:12:15 +0000

    riscv: enable EFI framebuffer
    
    Pass framebuffer information from loader(8) to the kernel via the
    MODINFOMD_EFI_FB metadata field.
    
    Enable the vt_efifb driver. A small tweak is required to work around the
    lack of VM_MEMATTR_WRITE_COMBINING on this platform; we use
    VM_MEMATTR_UNCACHEABLE instead.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D48884
---
 stand/efi/loader/bootinfo.c  | 2 +-
 sys/dev/vt/hw/efifb/efifb.c  | 9 +++++++--
 sys/riscv/conf/GENERIC       | 1 +
 sys/riscv/include/metadata.h | 1 +
 4 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/stand/efi/loader/bootinfo.c b/stand/efi/loader/bootinfo.c
index 3e74a9228b5e..ca86a319613f 100644
--- a/stand/efi/loader/bootinfo.c
+++ b/stand/efi/loader/bootinfo.c
@@ -182,7 +182,7 @@ bi_load_efi_data(struct preloaded_file *kfp, bool exit_bs)
        struct efi_map_header *efihdr;
        bool do_vmap;
 
-#if defined(__amd64__) || defined(__aarch64__) || defined(__i386__)
+#ifdef MODINFOMD_EFI_FB
        struct efi_fb efifb;
 
        efifb.fb_addr = gfx_state.tg_fb.fb_addr;
diff --git a/sys/dev/vt/hw/efifb/efifb.c b/sys/dev/vt/hw/efifb/efifb.c
index eda05ec3d203..ad49b6735998 100644
--- a/sys/dev/vt/hw/efifb/efifb.c
+++ b/sys/dev/vt/hw/efifb/efifb.c
@@ -96,9 +96,11 @@ vt_efifb_init(struct vt_device *vd)
 {
        struct fb_info  *info;
        struct efi_fb   *efifb;
-       int             memattr;
+       vm_memattr_t    memattr;
        int             roff, goff, boff;
-       char            attr[16];
+
+#ifdef VM_MEMATTR_WRITE_COMBINING
+       char attr[16];
 
        /*
         * XXX TODO: I think there's more nuance here than we're acknowledging,
@@ -122,6 +124,9 @@ vt_efifb_init(struct vt_device *vd)
                        memattr = VM_MEMATTR_UNCACHEABLE;
                }
        }
+#else
+       memattr = VM_MEMATTR_UNCACHEABLE;
+#endif
 
        info = vd->vd_softc;
        if (info == NULL)
diff --git a/sys/riscv/conf/GENERIC b/sys/riscv/conf/GENERIC
index 34426f167963..8dca3bdb3369 100644
--- a/sys/riscv/conf/GENERIC
+++ b/sys/riscv/conf/GENERIC
@@ -140,6 +140,7 @@ device              uart_ns8250     # ns8250-type UART 
driver
 
 # Console
 device         vt
+device         vt_efifb
 device         kbdmux
 
 # RTC
diff --git a/sys/riscv/include/metadata.h b/sys/riscv/include/metadata.h
index fbc0afce5c10..6ade03e15ea3 100644
--- a/sys/riscv/include/metadata.h
+++ b/sys/riscv/include/metadata.h
@@ -30,6 +30,7 @@
 
 #define        MODINFOMD_DTBP          0x1001
 #define        MODINFOMD_EFI_MAP       0x1002
+#define        MODINFOMD_EFI_FB        0x1003
 
 struct efi_map_header {
        size_t          memory_size;

Reply via email to