Replace screen_info and edid_info with sysfb_primary_device of type struct sysfb_display_info. Update all users. Then implement EDID support in the kernel EFI code.
Sysfb DRM drivers currently fetch the global edid_info directly, when they should get that information together with the screen_info from their device. Wrapping screen_info and edid_info in sysfb_primary_display and passing this to drivers enables this. Replacing both with sysfb_primary_display has been motivate by the EFI stub. EFI wants to transfer EDID via config table in a single entry. Using struct sysfb_display_info this will become easily possible. Hence accept some churn in architecture code for the long-term improvements. Patches 1 and 2 reduce the exposure of screen_info in EFI-related code. Patch 3 adds struct sysfb_display_info. Patch 4 replaces scren_info with sysfb_primary_display. This results in several changes throught the kernel, but is really just a refactoring. Patch 5 updates sysfb to transfer sysfb_primary_display to the related drivers. Patch 6 moves edid_info into sysfb_primary_display. This resolves some drivers' reference to the global edid_info, but also makes the EDID data available on non-x86 architectures. Patches 7 and 8 add support for EDID transfers on non-x86 EFI systems. Patch 9 cleans up the config-table allocation to be easier to understand. v3: - replace SCREEN_INFO table entry (Ard) - merge libstub patch into kernel patch v2: - combine v1 of the series at [1] plus changes from [2] and [3]. [1] https://lore.kernel.org/dri-devel/[email protected]/ [2] https://lore.kernel.org/dri-devel/[email protected]/ [3] https://lore.kernel.org/linux-efi/[email protected]/ Thomas Zimmermann (9): efi: earlycon: Reduce number of references to global screen_info efi: sysfb_efi: Reduce number of references to global screen_info sysfb: Add struct sysfb_display_info sysfb: Replace screen_info with sysfb_primary_display sysfb: Pass sysfb_primary_display to devices sysfb: Move edid_info into sysfb_primary_display efi: Refactor init_primary_display() helpers efi: Support EDID information efi: libstub: Simplify interfaces for primary_display arch/arm64/kernel/image-vars.h | 2 +- arch/loongarch/kernel/efi.c | 38 ++++----- arch/loongarch/kernel/image-vars.h | 2 +- arch/riscv/kernel/image-vars.h | 2 +- arch/x86/kernel/kexec-bzimage64.c | 4 +- arch/x86/kernel/setup.c | 16 ++-- arch/x86/video/video-common.c | 4 +- drivers/firmware/efi/earlycon.c | 42 +++++----- drivers/firmware/efi/efi-init.c | 46 ++++++----- drivers/firmware/efi/efi.c | 4 +- drivers/firmware/efi/libstub/Makefile | 2 +- drivers/firmware/efi/libstub/efi-stub-entry.c | 36 +++++++-- drivers/firmware/efi/libstub/efi-stub.c | 49 +++++++---- drivers/firmware/efi/libstub/efistub.h | 7 +- .../firmware/efi/libstub/primary_display.c | 41 ++++++++++ drivers/firmware/efi/libstub/screen_info.c | 53 ------------ drivers/firmware/efi/libstub/zboot.c | 6 +- drivers/firmware/efi/sysfb_efi.c | 81 ++++++++++--------- drivers/firmware/sysfb.c | 13 +-- drivers/firmware/sysfb_simplefb.c | 2 +- drivers/gpu/drm/sysfb/efidrm.c | 14 ++-- drivers/gpu/drm/sysfb/vesadrm.c | 14 ++-- drivers/hv/vmbus_drv.c | 6 +- drivers/pci/vgaarb.c | 4 +- drivers/video/Kconfig | 8 +- drivers/video/fbdev/core/fbmon.c | 8 +- drivers/video/fbdev/efifb.c | 10 ++- drivers/video/fbdev/vesafb.c | 10 ++- drivers/video/fbdev/vga16fb.c | 8 +- drivers/video/screen_info_pci.c | 5 +- include/linux/efi.h | 9 ++- include/linux/screen_info.h | 2 - include/linux/sysfb.h | 23 ++++-- include/video/edid.h | 4 - 34 files changed, 321 insertions(+), 254 deletions(-) create mode 100644 drivers/firmware/efi/libstub/primary_display.c delete mode 100644 drivers/firmware/efi/libstub/screen_info.c base-commit: d724c6f85e80a23ed46b7ebc6e38b527c09d64f5 -- 2.51.1
