Re: [PATCH v3 7/9] efi: Refactor init_primary_display() helpers
From: Ard Biesheuvel <ardb@kernel.org>
Date: 2025-12-16 13:40:54
Also in:
dri-devel, linux-efi, linux-fbdev, linux-hyperv, linux-pci, linux-riscv, lkml, loongarch
On Wed, 26 Nov 2025 at 17:09, Thomas Zimmermann [off-list ref] wrote:
Rework the kernel's init_primary_display() helpers to allow for later support of additional config-table entries and EDID information. No functional changes. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> --- arch/loongarch/kernel/efi.c | 22 +++++++++++----------- drivers/firmware/efi/efi-init.c | 19 ++++++++++--------- 2 files changed, 21 insertions(+), 20 deletions(-)
This patch seems unnecessary now that we've replace one table with another. I've dropped it for now - let me know if you really want to keep it.
quoted hunk ↗ jump to hunk
diff --git a/arch/loongarch/kernel/efi.c b/arch/loongarch/kernel/efi.c index 638a392d2cd2..1ef38036e8ae 100644 --- a/arch/loongarch/kernel/efi.c +++ b/arch/loongarch/kernel/efi.c@@ -81,19 +81,19 @@ EXPORT_SYMBOL_GPL(sysfb_primary_display); static void __init init_primary_display(void) { - struct screen_info *si; - - if (screen_info_table == EFI_INVALID_TABLE_ADDR) - return; - - si = early_memremap(screen_info_table, sizeof(*si)); - if (!si) { - pr_err("Could not map screen_info config table\n"); + if (screen_info_table == EFI_INVALID_TABLE_ADDR) { + struct screen_info *si = early_memremap(screen_info_table, sizeof(*si)); + + if (!si) { + pr_err("Could not map screen_info config table\n"); + return; + } + sysfb_primary_display.screen = *si; + memset(si, 0, sizeof(*si)); + early_memunmap(si, sizeof(*si)); + } else { return; } - sysfb_primary_display.screen = *si; - memset(si, 0, sizeof(*si)); - early_memunmap(si, sizeof(*si)); memblock_reserve(__screen_info_lfb_base(&sysfb_primary_display.screen), sysfb_primary_display.screen.lfb_size);diff --git a/drivers/firmware/efi/efi-init.c b/drivers/firmware/efi/efi-init.c index d1d418a34407..ca697d485116 100644 --- a/drivers/firmware/efi/efi-init.c +++ b/drivers/firmware/efi/efi-init.c@@ -67,10 +67,9 @@ EXPORT_SYMBOL_GPL(sysfb_primary_display); static void __init init_primary_display(void) { - struct screen_info *si; - if (screen_info_table != EFI_INVALID_TABLE_ADDR) { - si = early_memremap(screen_info_table, sizeof(*si)); + struct screen_info *si = early_memremap(screen_info_table, sizeof(*si)); + if (!si) { pr_err("Could not map screen_info config table\n"); return;@@ -78,14 +77,16 @@ static void __init init_primary_display(void) sysfb_primary_display.screen = *si; memset(si, 0, sizeof(*si)); early_memunmap(si, sizeof(*si)); + } else { + return; + } - if (memblock_is_map_memory(sysfb_primary_display.screen.lfb_base)) - memblock_mark_nomap(sysfb_primary_display.screen.lfb_base, - sysfb_primary_display.screen.lfb_size); + if (memblock_is_map_memory(sysfb_primary_display.screen.lfb_base)) + memblock_mark_nomap(sysfb_primary_display.screen.lfb_base, + sysfb_primary_display.screen.lfb_size); - if (IS_ENABLED(CONFIG_EFI_EARLYCON)) - efi_earlycon_reprobe(); - } + if (IS_ENABLED(CONFIG_EFI_EARLYCON)) + efi_earlycon_reprobe(); } static int __init uefi_init(u64 efi_system_table) --2.51.1