git: e2a08ac9ce42 - main - riscv: enable EFI framebuffer
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 03 Mar 2025 16:12:29 UTC
The branch main has been updated by mhorne:
URL: https://cgit.FreeBSD.org/src/commit/?id=e2a08ac9ce424f543a2f03c67fb882fdabbdd32a
commit e2a08ac9ce424f543a2f03c67fb882fdabbdd32a
Author: Mitchell Horne <mhorne@FreeBSD.org>
AuthorDate: 2025-03-03 15:46:39 +0000
Commit: Mitchell Horne <mhorne@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;