Kconfig: Introduce HAVE_(VBE_)LINEAR_FRAMEBUFFER

Like HAVE_VGA_TEXT_FRAMEBUFFER, these are selected by graphics drivers
that support a linear framebuffer. Some related settings moved to the
drivers (i.e. for rockchip/rk3288 and nvidia/tegra124) since they are
hardcoded.

Change-Id: Iff6dac5a5f61af49456bc6312e7a376def02ab00
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/19800
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
diff --git a/src/device/Kconfig b/src/device/Kconfig
index 50d75c7..cf70a980 100644
--- a/src/device/Kconfig
+++ b/src/device/Kconfig
@@ -23,7 +23,20 @@
 
 config HAVE_VGA_TEXT_FRAMEBUFFER
 	bool
-	default n
+	help
+	  Selected by graphics drivers that support legacy VGA text mode.
+
+config HAVE_VBE_LINEAR_FRAMEBUFFER
+	bool
+	help
+	  Selected by graphics drivers that can set up a VBE linear-framebuffer
+	  mode.
+
+config HAVE_LINEAR_FRAMEBUFFER
+	bool
+	help
+	  Selected by graphics drivers that can set up a generic linear
+	  framebuffer.
 
 config MAINBOARD_DO_NATIVE_VGA_INIT
 	bool "Use native graphics initialization"
@@ -48,6 +61,7 @@
 	depends on MAINBOARD_DO_NATIVE_VGA_INIT
 	depends on MAINBOARD_HAS_LIBGFXINIT
 	select HAVE_VGA_TEXT_FRAMEBUFFER
+	select HAVE_LINEAR_FRAMEBUFFER
 	select RAMSTAGE_LIBHWBASE
 	select VGA if !FRAMEBUFFER_KEEP_VESA_MODE
 	select NO_EDID_FILL_FB
@@ -383,12 +397,13 @@
 endmenu
 
 menu "Display"
-	depends on PCI_OPTION_ROM_RUN_YABEL || PCI_OPTION_ROM_RUN_REALMODE || MAINBOARD_DO_NATIVE_VGA_INIT
+	depends on HAVE_VGA_TEXT_FRAMEBUFFER || HAVE_LINEAR_FRAMEBUFFER
 
 config FRAMEBUFFER_SET_VESA_MODE
 	prompt "Set framebuffer graphics resolution"
 	bool
 	depends on PCI_OPTION_ROM_RUN_YABEL || PCI_OPTION_ROM_RUN_REALMODE
+	select HAVE_VBE_LINEAR_FRAMEBUFFER
 	help
 	  Set VESA/native framebuffer mode (needed for bootsplash and graphical framebuffer console)
 
@@ -527,7 +542,7 @@
 config FRAMEBUFFER_KEEP_VESA_MODE
 	prompt "Keep VESA framebuffer"
 	bool
-	depends on HAVE_VGA_TEXT_FRAMEBUFFER
+	depends on HAVE_VGA_TEXT_FRAMEBUFFER && (HAVE_VBE_LINEAR_FRAMEBUFFER || HAVE_LINEAR_FRAMEBUFFER)
 	help
 	  This option keeps the framebuffer mode set after coreboot finishes
 	  execution. If this option is enabled, coreboot will pass a
diff --git a/src/drivers/emulation/qemu/Kconfig b/src/drivers/emulation/qemu/Kconfig
index 0b847ba..f8aad88 100644
--- a/src/drivers/emulation/qemu/Kconfig
+++ b/src/drivers/emulation/qemu/Kconfig
@@ -4,6 +4,7 @@
 	depends on BOARD_EMULATION_QEMU_X86
 	depends on MAINBOARD_DO_NATIVE_VGA_INIT
 	select HAVE_VGA_TEXT_FRAMEBUFFER
+	select HAVE_LINEAR_FRAMEBUFFER
 	select VGA
 	help
 	   VGA driver for qemu emulated vga cards supporting
diff --git a/src/drivers/intel/fsp1_1/Kconfig b/src/drivers/intel/fsp1_1/Kconfig
index cc3c0a7..13137ca 100644
--- a/src/drivers/intel/fsp1_1/Kconfig
+++ b/src/drivers/intel/fsp1_1/Kconfig
@@ -99,6 +99,7 @@
 	bool "Enable GOP support"
 	default n
 	select ADD_VBT_DATA_FILE
+	select HAVE_LINEAR_FRAMEBUFFER
 
 config USE_GENERIC_FSP_CAR_INC
 	bool
diff --git a/src/drivers/intel/fsp2_0/Kconfig b/src/drivers/intel/fsp2_0/Kconfig
index 864b3a1..0c6b229 100644
--- a/src/drivers/intel/fsp2_0/Kconfig
+++ b/src/drivers/intel/fsp2_0/Kconfig
@@ -16,6 +16,7 @@
 config PLATFORM_USES_FSP2_0
 	bool
 	select UDK_2015_BINDING
+	select HAVE_LINEAR_FRAMEBUFFER
 	help
 	  Include FSP 2.0 wrappers and functionality
 
diff --git a/src/mainboard/apple/macbook21/Kconfig b/src/mainboard/apple/macbook21/Kconfig
index e2ca8fe..34e9f25 100644
--- a/src/mainboard/apple/macbook21/Kconfig
+++ b/src/mainboard/apple/macbook21/Kconfig
@@ -18,8 +18,7 @@
 	select HAVE_ACPI_TABLES
 	select HAVE_ACPI_RESUME
 	select USE_OPTION_TABLE
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
-	select VGA
+	select I945_LVDS
 
 config MAINBOARD_DIR
 	string
diff --git a/src/mainboard/emulation/qemu-armv7/Kconfig b/src/mainboard/emulation/qemu-armv7/Kconfig
index 1a65ffb..7ae7639 100644
--- a/src/mainboard/emulation/qemu-armv7/Kconfig
+++ b/src/mainboard/emulation/qemu-armv7/Kconfig
@@ -29,6 +29,7 @@
 	select CONSOLE_SERIAL
 	select MAINBOARD_HAS_NATIVE_VGA_INIT
 	select MAINBOARD_DO_NATIVE_VGA_INIT
+	select HAVE_LINEAR_FRAMEBUFFER
 	select ARCH_BOOTBLOCK_ARMV7
 	select ARCH_ROMSTAGE_ARMV7
 	select ARCH_RAMSTAGE_ARMV7
diff --git a/src/mainboard/getac/p470/Kconfig b/src/mainboard/getac/p470/Kconfig
index cfe5f8f..d46c768 100644
--- a/src/mainboard/getac/p470/Kconfig
+++ b/src/mainboard/getac/p470/Kconfig
@@ -33,9 +33,8 @@
 	select UDELAY_LAPIC
 	select BOARD_ROMSIZE_KB_1024
 	select CHANNEL_XOR_RANDOMIZATION
-	select VGA
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
 	select INTEL_INT15
+	select I945_LVDS
 
 config MAINBOARD_DIR
 	string
diff --git a/src/mainboard/google/daisy/Kconfig b/src/mainboard/google/daisy/Kconfig
index b08500d..5311e37 100644
--- a/src/mainboard/google/daisy/Kconfig
+++ b/src/mainboard/google/daisy/Kconfig
@@ -27,6 +27,7 @@
 	select DRIVER_TI_TPS65090
 	select MAINBOARD_HAS_NATIVE_VGA_INIT
 	select MAINBOARD_DO_NATIVE_VGA_INIT
+	select HAVE_LINEAR_FRAMEBUFFER
 
 config VBOOT
 	select VBOOT_VBNV_EC
diff --git a/src/mainboard/google/link/Kconfig b/src/mainboard/google/link/Kconfig
index 8469e86..217e6c1 100644
--- a/src/mainboard/google/link/Kconfig
+++ b/src/mainboard/google/link/Kconfig
@@ -15,6 +15,7 @@
 	select MAINBOARD_HAS_LPC_TPM
 	select SERIRQ_CONTINUOUS_MODE
 	select MAINBOARD_HAS_NATIVE_VGA_INIT
+	select HAVE_LINEAR_FRAMEBUFFER if MAINBOARD_DO_NATIVE_VGA_INIT
 
 config VBOOT
 	select EC_GOOGLE_CHROMEEC_SWITCHES
diff --git a/src/mainboard/google/nyan/Kconfig b/src/mainboard/google/nyan/Kconfig
index d944a43..43064cd 100644
--- a/src/mainboard/google/nyan/Kconfig
+++ b/src/mainboard/google/nyan/Kconfig
@@ -23,8 +23,6 @@
 	select EC_GOOGLE_CHROMEEC
 	select EC_GOOGLE_CHROMEEC_SPI
 	select TEGRA124_MODEL_CD570M
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
-	select MAINBOARD_DO_NATIVE_VGA_INIT
 	select BOARD_ROMSIZE_KB_4096
 	select SPI_FLASH
 	select SPI_FLASH_GIGADEVICE
diff --git a/src/mainboard/google/nyan_big/Kconfig b/src/mainboard/google/nyan_big/Kconfig
index cacc301..0076154 100644
--- a/src/mainboard/google/nyan_big/Kconfig
+++ b/src/mainboard/google/nyan_big/Kconfig
@@ -24,8 +24,6 @@
 	select EC_GOOGLE_CHROMEEC
 	select EC_GOOGLE_CHROMEEC_SPI
 	select TEGRA124_MODEL_CD570M
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
-	select MAINBOARD_DO_NATIVE_VGA_INIT
 	select BOARD_ROMSIZE_KB_4096
 	select SPI_FLASH
 	select SPI_FLASH_GIGADEVICE
diff --git a/src/mainboard/google/nyan_blaze/Kconfig b/src/mainboard/google/nyan_blaze/Kconfig
index 2264068..7691f73 100644
--- a/src/mainboard/google/nyan_blaze/Kconfig
+++ b/src/mainboard/google/nyan_blaze/Kconfig
@@ -25,8 +25,6 @@
 	select SOC_NVIDIA_TEGRA124
 	select TEGRA124_MODEL_CD570M
 	select MAINBOARD_HAS_CHROMEOS
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
-	select MAINBOARD_DO_NATIVE_VGA_INIT
 	select BOARD_ROMSIZE_KB_4096
 	select SPI_FLASH
 	select SPI_FLASH_GIGADEVICE
diff --git a/src/mainboard/google/oak/Kconfig b/src/mainboard/google/oak/Kconfig
index c00c622..a4a34b2 100644
--- a/src/mainboard/google/oak/Kconfig
+++ b/src/mainboard/google/oak/Kconfig
@@ -35,6 +35,7 @@
 	select EC_GOOGLE_CHROMEEC_SPI
 	select MAINBOARD_HAS_NATIVE_VGA_INIT
 	select MAINBOARD_DO_NATIVE_VGA_INIT
+	select HAVE_LINEAR_FRAMEBUFFER
 	select MAINBOARD_HAS_CHROMEOS
 	select RAM_CODE_SUPPORT
 	select SPI_FLASH
diff --git a/src/mainboard/google/peach_pit/Kconfig b/src/mainboard/google/peach_pit/Kconfig
index 640c009..fead669 100644
--- a/src/mainboard/google/peach_pit/Kconfig
+++ b/src/mainboard/google/peach_pit/Kconfig
@@ -23,6 +23,7 @@
 	select BOARD_ROMSIZE_KB_4096
 	select MAINBOARD_HAS_NATIVE_VGA_INIT
 	select MAINBOARD_DO_NATIVE_VGA_INIT
+	select HAVE_LINEAR_FRAMEBUFFER
 	select DRIVER_PARADE_PS8625
 
 config VBOOT
diff --git a/src/mainboard/google/veyron/Kconfig b/src/mainboard/google/veyron/Kconfig
index 5fb340b..cbb5b9a 100644
--- a/src/mainboard/google/veyron/Kconfig
+++ b/src/mainboard/google/veyron/Kconfig
@@ -36,8 +36,6 @@
 	select EC_GOOGLE_CHROMEEC_SPI
 	select RAM_CODE_SUPPORT
 	select SOC_ROCKCHIP_RK3288
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
-	select MAINBOARD_DO_NATIVE_VGA_INIT
 	select MAINBOARD_HAS_CHROMEOS
 	select BOARD_ROMSIZE_KB_4096
 	select HAVE_HARD_RESET
diff --git a/src/mainboard/google/veyron_mickey/Kconfig b/src/mainboard/google/veyron_mickey/Kconfig
index 1f66ff0..2df0688 100644
--- a/src/mainboard/google/veyron_mickey/Kconfig
+++ b/src/mainboard/google/veyron_mickey/Kconfig
@@ -21,8 +21,6 @@
 	select BOARD_ROMSIZE_KB_4096
 	select COMMON_CBFS_SPI_WRAPPER
 	select HAVE_HARD_RESET
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
-	select MAINBOARD_DO_NATIVE_VGA_INIT
 	select MAINBOARD_HAS_CHROMEOS
 	select RAM_CODE_SUPPORT
 	select SOC_ROCKCHIP_RK3288
diff --git a/src/mainboard/google/veyron_rialto/Kconfig b/src/mainboard/google/veyron_rialto/Kconfig
index cc6a4a6..ec83a99 100644
--- a/src/mainboard/google/veyron_rialto/Kconfig
+++ b/src/mainboard/google/veyron_rialto/Kconfig
@@ -21,8 +21,6 @@
 	select BOARD_ROMSIZE_KB_4096
 	select COMMON_CBFS_SPI_WRAPPER
 	select HAVE_HARD_RESET
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
-	select MAINBOARD_DO_NATIVE_VGA_INIT
 	select MAINBOARD_HAS_CHROMEOS
 	select RAM_CODE_SUPPORT
 	select SOC_ROCKCHIP_RK3288
diff --git a/src/mainboard/lenovo/t60/Kconfig b/src/mainboard/lenovo/t60/Kconfig
index b3f885e..3c77a8a 100644
--- a/src/mainboard/lenovo/t60/Kconfig
+++ b/src/mainboard/lenovo/t60/Kconfig
@@ -20,9 +20,9 @@
 	select CHANNEL_XOR_RANDOMIZATION
 	select HAVE_ACPI_TABLES
 	select HAVE_ACPI_RESUME
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
 	select H8_DOCK_EARLY_INIT
 	select HAVE_CMOS_DEFAULT
+	select I945_LVDS
 
 config MAINBOARD_DIR
 	string
diff --git a/src/mainboard/lenovo/x60/Kconfig b/src/mainboard/lenovo/x60/Kconfig
index 977f378..1d55f98 100644
--- a/src/mainboard/lenovo/x60/Kconfig
+++ b/src/mainboard/lenovo/x60/Kconfig
@@ -23,9 +23,9 @@
 	select HAVE_ACPI_TABLES
 	select HAVE_ACPI_RESUME
 	select USE_OPTION_TABLE
-	select MAINBOARD_HAS_NATIVE_VGA_INIT
 	select H8_DOCK_EARLY_INIT
 	select DRIVERS_LENOVO_WACOM
+	select I945_LVDS
 
 config MAINBOARD_DIR
 	string
diff --git a/src/northbridge/intel/gm45/Kconfig b/src/northbridge/intel/gm45/Kconfig
index 6885ff3..63bc838 100644
--- a/src/northbridge/intel/gm45/Kconfig
+++ b/src/northbridge/intel/gm45/Kconfig
@@ -26,6 +26,7 @@
 	select INTEL_GMA_ACPI
 	select INTEL_GMA_SSC_ALTERNATE_REF
 	select RELOCATABLE_RAMSTAGE
+	select HAVE_LINEAR_FRAMEBUFFER if MAINBOARD_DO_NATIVE_VGA_INIT
 	select HAVE_VGA_TEXT_FRAMEBUFFER if MAINBOARD_DO_NATIVE_VGA_INIT
 
 config CBFS_SIZE
diff --git a/src/northbridge/intel/i945/Kconfig b/src/northbridge/intel/i945/Kconfig
index 8492d77..482f98a 100644
--- a/src/northbridge/intel/i945/Kconfig
+++ b/src/northbridge/intel/i945/Kconfig
@@ -43,6 +43,15 @@
 	default "8086,27a2" if NORTHBRIDGE_INTEL_SUBTYPE_I945GM
 	default "8086,2772" if NORTHBRIDGE_INTEL_SUBTYPE_I945GC
 
+config I945_LVDS
+	def_bool n
+	select MAINBOARD_HAS_NATIVE_VGA_INIT
+	select HAVE_LINEAR_FRAMEBUFFER if MAINBOARD_DO_NATIVE_VGA_INIT
+	help
+	  Selected by mainboards that use native graphics initialization
+	  for the LVDS port. A linear framebuffer is only supported for
+	  LVDS.
+
 config CHANNEL_XOR_RANDOMIZATION
 	bool
 	default n
diff --git a/src/northbridge/intel/nehalem/Kconfig b/src/northbridge/intel/nehalem/Kconfig
index ca4128a..4fdd2bd 100644
--- a/src/northbridge/intel/nehalem/Kconfig
+++ b/src/northbridge/intel/nehalem/Kconfig
@@ -22,6 +22,7 @@
 	select INTEL_GMA_ACPI
 	select NORTHBRIDGE_INTEL_COMMON_MRC_CACHE
 	select ACPI_HUGE_LOWMEM_BACKUP
+	select HAVE_LINEAR_FRAMEBUFFER if MAINBOARD_DO_NATIVE_VGA_INIT
 	select HAVE_VGA_TEXT_FRAMEBUFFER if MAINBOARD_DO_NATIVE_VGA_INIT
 
 if NORTHBRIDGE_INTEL_NEHALEM
diff --git a/src/northbridge/intel/sandybridge/Kconfig b/src/northbridge/intel/sandybridge/Kconfig
index 07d1815..ad1ceae 100644
--- a/src/northbridge/intel/sandybridge/Kconfig
+++ b/src/northbridge/intel/sandybridge/Kconfig
@@ -62,6 +62,7 @@
 config MAINBOARD_DO_NATIVE_VGA_INIT
 	select VGA
 	select INTEL_EDID
+	select HAVE_LINEAR_FRAMEBUFFER
 	select HAVE_VGA_TEXT_FRAMEBUFFER
 
 config MRC_CACHE_SIZE
diff --git a/src/northbridge/intel/x4x/Kconfig b/src/northbridge/intel/x4x/Kconfig
index aef21b5..5517d97 100644
--- a/src/northbridge/intel/x4x/Kconfig
+++ b/src/northbridge/intel/x4x/Kconfig
@@ -25,6 +25,7 @@
 	select VGA
 	select INTEL_GMA_ACPI
 	select RELOCATABLE_RAMSTAGE
+	select HAVE_LINEAR_FRAMEBUFFER if MAINBOARD_DO_NATIVE_VGA_INIT
 	select HAVE_VGA_TEXT_FRAMEBUFFER if MAINBOARD_DO_NATIVE_VGA_INIT
 
 config CBFS_SIZE
diff --git a/src/soc/nvidia/tegra124/Kconfig b/src/soc/nvidia/tegra124/Kconfig
index cd753f4..8fe0451 100644
--- a/src/soc/nvidia/tegra124/Kconfig
+++ b/src/soc/nvidia/tegra124/Kconfig
@@ -13,6 +13,9 @@
 	select BOOTBLOCK_CONSOLE
 	select ARM_LPAE
 	select GENERIC_GPIO_LIB
+	select MAINBOARD_HAS_NATIVE_VGA_INIT
+	select MAINBOARD_DO_NATIVE_VGA_INIT
+	select HAVE_LINEAR_FRAMEBUFFER
 
 if SOC_NVIDIA_TEGRA124
 
diff --git a/src/soc/nvidia/tegra210/Kconfig b/src/soc/nvidia/tegra210/Kconfig
index 30a23ef..c7c1cf0 100644
--- a/src/soc/nvidia/tegra210/Kconfig
+++ b/src/soc/nvidia/tegra210/Kconfig
@@ -26,6 +26,7 @@
 	bool "Use dsi graphics interface"
 	depends on MAINBOARD_DO_NATIVE_VGA_INIT
 	default n
+	select HAVE_LINEAR_FRAMEBUFFER
 	help
 	  Initialize dsi display
 
@@ -33,6 +34,7 @@
 	bool "Use dp graphics interface"
 	depends on MAINBOARD_DO_NATIVE_VGA_INIT
 	default n
+	select HAVE_LINEAR_FRAMEBUFFER
 	help
 	  Initialize dp display
 
diff --git a/src/soc/rockchip/rk3288/Kconfig b/src/soc/rockchip/rk3288/Kconfig
index 19e52b6..293743c 100644
--- a/src/soc/rockchip/rk3288/Kconfig
+++ b/src/soc/rockchip/rk3288/Kconfig
@@ -28,6 +28,9 @@
 	select GENERIC_GPIO_LIB
 	select RTC
 	select UART_OVERRIDE_REFCLK
+	select MAINBOARD_HAS_NATIVE_VGA_INIT
+	select MAINBOARD_DO_NATIVE_VGA_INIT
+	select HAVE_LINEAR_FRAMEBUFFER
 
 if SOC_ROCKCHIP_RK3288
 
diff --git a/src/soc/rockchip/rk3399/Kconfig b/src/soc/rockchip/rk3399/Kconfig
index ff857c0..5e7c55a 100644
--- a/src/soc/rockchip/rk3399/Kconfig
+++ b/src/soc/rockchip/rk3399/Kconfig
@@ -11,6 +11,7 @@
 	select GENERIC_UDELAY
 	select HAVE_MONOTONIC_TIMER
 	select UART_OVERRIDE_REFCLK
+	select HAVE_LINEAR_FRAMEBUFFER if MAINBOARD_DO_NATIVE_VGA_INIT
 
 if SOC_ROCKCHIP_RK3399