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
 
        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
 
 
 
 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
 
 
          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
 
 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
 
 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)
 
 #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,
 
 #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)
 {
 
 #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;
 
 /* 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
 
 #endif /* CONFIG_X86_SYSFB */
 
-#endif /* _ARCH_X86_KERNEL_SYSFB_H */
+#endif /* _LINUX_SYSFB_H */