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;