OSDN Git Service

drivers/firmware: move x86 Generic System Framebuffers support
authorJavier Martinez Canillas <javierm@redhat.com>
Fri, 25 Jun 2021 13:09:46 +0000 (15:09 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Wed, 21 Jul 2021 10:04:56 +0000 (12:04 +0200)
The x86 architecture has generic support to register a system framebuffer
platform device. It either registers a "simple-framebuffer" if the config
option CONFIG_X86_SYSFB is enabled, or a legacy VGA/VBE/EFI FB device.

But the code is generic enough to be reused by other architectures and can
be moved out of the arch/x86 directory.

This will allow to also support the simple{fb,drm} drivers on non-x86 EFI
platforms, such as aarch64 where these drivers are only supported with DT.

Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Borislav Petkov <bp@suse.de>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20210625130947.1803678-2-javierm@redhat.com
arch/x86/Kconfig
arch/x86/kernel/Makefile
drivers/firmware/Kconfig
drivers/firmware/Makefile
drivers/firmware/efi/Makefile
drivers/firmware/efi/sysfb_efi.c [moved from arch/x86/kernel/sysfb_efi.c with 99% similarity]
drivers/firmware/sysfb.c [moved from arch/x86/kernel/sysfb.c with 98% similarity]
drivers/firmware/sysfb_simplefb.c [moved from arch/x86/kernel/sysfb_simplefb.c with 99% similarity]
include/linux/sysfb.h [moved from arch/x86/include/asm/sysfb.h with 95% similarity]

index 0045e1b..cfe2761 100644 (file)
@@ -2806,32 +2806,6 @@ config AMD_NB
        def_bool y
        depends on CPU_SUP_AMD && PCI
 
-config X86_SYSFB
-       bool "Mark VGA/VBE/EFI FB as generic system framebuffer"
-       help
-         Firmwares often provide initial graphics framebuffers so the BIOS,
-         bootloader or kernel can show basic video-output during boot for
-         user-guidance and debugging. Historically, x86 used the VESA BIOS
-         Extensions and EFI-framebuffers for this, which are mostly limited
-         to x86.
-         This option, if enabled, marks VGA/VBE/EFI framebuffers as generic
-         framebuffers so the new generic system-framebuffer drivers can be
-         used on x86. If the framebuffer is not compatible with the generic
-         modes, it is advertised as fallback platform framebuffer so legacy
-         drivers like efifb, vesafb and uvesafb can pick it up.
-         If this option is not selected, all system framebuffers are always
-         marked as fallback platform framebuffers as usual.
-
-         Note: Legacy fbdev drivers, including vesafb, efifb, uvesafb, will
-         not be able to pick up generic system framebuffers if this option
-         is selected. You are highly encouraged to enable simplefb as
-         replacement if you select this option. simplefb can correctly deal
-         with generic system framebuffers. But you should still keep vesafb
-         and others enabled as fallback if a system framebuffer is
-         incompatible with simplefb.
-
-         If unsure, say Y.
-
 endmenu
 
 
index 0f66682..4114ea4 100644 (file)
@@ -135,9 +135,6 @@ obj-$(CONFIG_X86_CHECK_BIOS_CORRUPTION) += check.o
 obj-$(CONFIG_SWIOTLB)                  += pci-swiotlb.o
 obj-$(CONFIG_OF)                       += devicetree.o
 obj-$(CONFIG_UPROBES)                  += uprobes.o
-obj-y                                  += sysfb.o
-obj-$(CONFIG_X86_SYSFB)                        += sysfb_simplefb.o
-obj-$(CONFIG_EFI)                      += sysfb_efi.o
 
 obj-$(CONFIG_PERF_EVENTS)              += perf_regs.o
 obj-$(CONFIG_TRACING)                  += tracepoint.o
index db0ea2d..71f3d97 100644 (file)
@@ -251,6 +251,38 @@ config QCOM_SCM_DOWNLOAD_MODE_DEFAULT
 
          Say Y here to enable "download mode" by default.
 
+config SYSFB
+       bool
+       default y
+       depends on X86 || COMPILE_TEST
+
+config X86_SYSFB
+       bool "Mark VGA/VBE/EFI FB as generic system framebuffer"
+       depends on SYSFB
+       help
+         Firmwares often provide initial graphics framebuffers so the BIOS,
+         bootloader or kernel can show basic video-output during boot for
+         user-guidance and debugging. Historically, x86 used the VESA BIOS
+         Extensions and EFI-framebuffers for this, which are mostly limited
+         to x86.
+         This option, if enabled, marks VGA/VBE/EFI framebuffers as generic
+         framebuffers so the new generic system-framebuffer drivers can be
+         used on x86. If the framebuffer is not compatible with the generic
+         modes, it is advertised as fallback platform framebuffer so legacy
+         drivers like efifb, vesafb and uvesafb can pick it up.
+         If this option is not selected, all system framebuffers are always
+         marked as fallback platform framebuffers as usual.
+
+         Note: Legacy fbdev drivers, including vesafb, efifb, uvesafb, will
+         not be able to pick up generic system framebuffers if this option
+         is selected. You are highly encouraged to enable simplefb as
+         replacement if you select this option. simplefb can correctly deal
+         with generic system framebuffers. But you should still keep vesafb
+         and others enabled as fallback if a system framebuffer is
+         incompatible with simplefb.
+
+         If unsure, say Y.
+
 config TI_SCI_PROTOCOL
        tristate "TI System Control Interface (TISCI) Message Protocol"
        depends on TI_MESSAGE_MANAGER
index 5e013b6..ad78f78 100644 (file)
@@ -18,6 +18,8 @@ obj-$(CONFIG_FIRMWARE_MEMMAP) += memmap.o
 obj-$(CONFIG_RASPBERRYPI_FIRMWARE) += raspberrypi.o
 obj-$(CONFIG_FW_CFG_SYSFS)     += qemu_fw_cfg.o
 obj-$(CONFIG_QCOM_SCM)         += qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o
+obj-$(CONFIG_SYSFB)            += sysfb.o
+obj-$(CONFIG_X86_SYSFB)                += sysfb_simplefb.o
 obj-$(CONFIG_TI_SCI_PROTOCOL)  += ti_sci.o
 obj-$(CONFIG_TRUSTED_FOUNDATIONS) += trusted_foundations.o
 obj-$(CONFIG_TURRIS_MOX_RWTM)  += turris-mox-rwtm.o
index 467e942..c02ff25 100644 (file)
@@ -36,6 +36,8 @@ obj-$(CONFIG_LOAD_UEFI_KEYS)          += mokvar-table.o
 fake_map-y                             += fake_mem.o
 fake_map-$(CONFIG_X86)                 += x86_fake_mem.o
 
+obj-$(CONFIG_SYSFB)                    += sysfb_efi.o
+
 arm-obj-$(CONFIG_EFI)                  := efi-init.o arm-runtime.o
 obj-$(CONFIG_ARM)                      += $(arm-obj-y)
 obj-$(CONFIG_ARM64)                    += $(arm-obj-y)
similarity index 99%
rename from arch/x86/kernel/sysfb_efi.c
rename to drivers/firmware/efi/sysfb_efi.c
index 8a56a6d..9f035b1 100644 (file)
 #include <linux/mm.h>
 #include <linux/pci.h>
 #include <linux/screen_info.h>
+#include <linux/sysfb.h>
 #include <video/vga.h>
 
 #include <asm/efi.h>
-#include <asm/sysfb.h>
 
 enum {
        OVERRIDE_NONE = 0x0,
similarity index 98%
rename from arch/x86/kernel/sysfb.c
rename to drivers/firmware/sysfb.c
index 014ebd8..1337515 100644 (file)
@@ -32,7 +32,7 @@
 #include <linux/platform_data/simplefb.h>
 #include <linux/platform_device.h>
 #include <linux/screen_info.h>
-#include <asm/sysfb.h>
+#include <linux/sysfb.h>
 
 static __init int sysfb_init(void)
 {
similarity index 99%
rename from arch/x86/kernel/sysfb_simplefb.c
rename to drivers/firmware/sysfb_simplefb.c
index 298fc1e..df89244 100644 (file)
@@ -18,7 +18,7 @@
 #include <linux/platform_data/simplefb.h>
 #include <linux/platform_device.h>
 #include <linux/screen_info.h>
-#include <asm/sysfb.h>
+#include <linux/sysfb.h>
 
 static const char simplefb_resname[] = "BOOTFB";
 static const struct simplefb_format formats[] = SIMPLEFB_FORMATS;
similarity index 95%
rename from arch/x86/include/asm/sysfb.h
rename to include/linux/sysfb.h
index 9834eef..3e53557 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-or-later */
-#ifndef _ARCH_X86_KERNEL_SYSFB_H
-#define _ARCH_X86_KERNEL_SYSFB_H
+#ifndef _LINUX_SYSFB_H
+#define _LINUX_SYSFB_H
 
 /*
  * Generic System Framebuffers on x86
@@ -91,4 +91,4 @@ static inline int create_simplefb(const struct screen_info *si,
 
 #endif /* CONFIG_X86_SYSFB */
 
-#endif /* _ARCH_X86_KERNEL_SYSFB_H */
+#endif /* _LINUX_SYSFB_H */