Jérémy Compostella has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/70276 )
Change subject: drivers/intel/gma: Hook up libgfxinit in romstage ......................................................................
drivers/intel/gma: Hook up libgfxinit in romstage
A mainboard port needs to:
- select `CONFIG_ROMSTAGE_MAINBOARD_HAS_LIBGFXINIT'
- implement the Ada package `GMA.Mainboard' with a single function `ports' that returns a list of ports to be probed for displays.
- set the desired `GFX_GMA_DEFAULT_MMIO' IO memory address to use in romstage for the graphic device.
This CL requires the libgfxinit https://review.coreboot.org/c/libgfxinit/+/69855 patch.
BUG=b:252792591 BRANCH=firmware-brya-14505.B TEST=TO-BE-COMPLETED
Change-Id: I3c2101de10dc5df54fe873e43bbe0f1c4dccff44 Signed-off-by: Jeremy Compostella jeremy.compostella@intel.com --- M src/arch/x86/car.ld M src/device/Kconfig M src/drivers/intel/gma/Kconfig M src/drivers/intel/gma/Makefile.inc 4 files changed, 107 insertions(+), 11 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/76/70276/1
diff --git a/src/arch/x86/car.ld b/src/arch/x86/car.ld index dc075c6..d1048a3 100644 --- a/src/arch/x86/car.ld +++ b/src/arch/x86/car.ld @@ -73,6 +73,9 @@ #if CONFIG(ROMSTAGE_LIBHWBASE) *(.data.hw__*_E) #endif +#if CONFIG(ROMSTAGE_GFX_GMA) + *(.data.gma*_E) +#endif . = ALIGN(ARCH_POINTER_ALIGN_SIZE); _ebss = .; RECORD_SIZE(bss) diff --git a/src/device/Kconfig b/src/device/Kconfig index 34600ad..b0000f6 100644 --- a/src/device/Kconfig +++ b/src/device/Kconfig @@ -4,7 +4,7 @@
config HAVE_VGA_TEXT_FRAMEBUFFER bool - depends on !NO_GFX_INIT + depends on !(NO_GFX_INIT && NO_ROMSTAGE_GFX_INIT) help Selected by graphics drivers that support legacy VGA text mode.
@@ -58,6 +58,13 @@ Selected by mainboards that implement support for `libgfxinit`. Usually this requires a list of ports to be probed for displays.
+config MAINBOARD_HAS_ROMSTAGE_LIBGFXINIT + def_bool n + help + Selected by mainboards that implement support for `libgfxinit` + in romstage. Usually this requires a list of ports to be + probed for displays. + choice prompt "Graphics initialization" default NO_GFX_INIT if VGA_ROM_RUN_DEFAULT && PAYLOAD_SEABIOS @@ -117,6 +124,28 @@
endchoice
+choice + prompt "Early (romstage) graphics initialization" + default MAINBOARD_USE_ROMSTAGE_LIBGFXINIT if MAINBOARD_HAS_ROMSTAGE_LIBGFXINIT + default NO_ROMSTAGE_GFX_INIT + +config NO_ROMSTAGE_GFX_INIT + bool "None" + help + Select this to not perform any graphics initialization at + romstage. + +config MAINBOARD_USE_ROMSTAGE_LIBGFXINIT + bool "Use libgfxinit" + depends on MAINBOARD_HAS_ROMSTAGE_LIBGFXINIT + select ROMSTAGE_VGA + help + Use the SPARK library `libgfxinit` for the romstage native + graphics initialization. This requires an Ada + toolchain. Graphics at romstage is limited to VGA text mode. + +endchoice + config PRE_GRAPHICS_DELAY_MS int "Graphics initialization delay in ms" default 0 diff --git a/src/drivers/intel/gma/Kconfig b/src/drivers/intel/gma/Kconfig index 87f6d12..c923e0b 100644 --- a/src/drivers/intel/gma/Kconfig +++ b/src/drivers/intel/gma/Kconfig @@ -90,15 +90,29 @@ depends on MAINBOARD_USE_LIBGFXINIT || INTEL_GMA_LIBGFXINIT_EDID select RAMSTAGE_LIBHWBASE
+config ROMSTAGE_GFX_GMA + def_bool y + depends on SOC_INTEL_ALDERLAKE + depends on MAINBOARD_USE_ROMSTAGE_LIBGFXINIT + select ROMSTAGE_LIBHWBASE + +config GFX_GMA_DEFAULT_MMIO + hex + depends on HWBASE_STATIC_MMIO && (GFX_GMA || ROMSTAGE_GFX_GMA) + help + Graphic MMIO address + config GFX_GMA_PANEL_1_ON_EDP bool - depends on GFX_GMA || MAINBOARD_HAS_LIBGFXINIT + depends on GFX_GMA || MAINBOARD_HAS_LIBGFXINIT \ + || MAINBOARD_HAS_ROMSTAGE_LIBGFXINIT default n if GFX_GMA_PANEL_1_ON_LVDS default y
config GFX_GMA_PANEL_1_ON_LVDS bool - depends on GFX_GMA || MAINBOARD_HAS_LIBGFXINIT + depends on GFX_GMA || MAINBOARD_HAS_LIBGFXINIT \ + || MAINBOARD_HAS_ROMSTAGE_LIBGFXINIT default y if NORTHBRIDGE_INTEL_GM45 || NORTHBRIDGE_INTEL_IRONLAKE default n
@@ -111,7 +125,7 @@ bool default n
-if GFX_GMA +if GFX_GMA || ROMSTAGE_GFX_GMA
config GFX_GMA_DYN_CPU def_bool y diff --git a/src/drivers/intel/gma/Makefile.inc b/src/drivers/intel/gma/Makefile.inc index 5588e5a..6db1321 100644 --- a/src/drivers/intel/gma/Makefile.inc +++ b/src/drivers/intel/gma/Makefile.inc @@ -20,24 +20,39 @@
$(call add_vbt_to_cbfs, vbt.bin, $(call strip_quotes,$(CONFIG_INTEL_GMA_VBT_FILE)))
-ifeq ($(CONFIG_GFX_GMA),y) +ifneq (,$(filter y, $(CONFIG_GFX_GMA) $(CONFIG_ROMSTAGE_GFX_GMA))) + +gfx-gma-stages = \ + $(if $(filter y,$(CONFIG_ROMSTAGE_GFX_GMA)),romstage) \ + $(if $(filter y,$(CONFIG_GFX_GMA)),ramstage) \
$(call add-special-class,gfxinit) -gfxinit-handler = $(eval ramstage-srcs += $(1)$(2)) +gfxinit-handler +=$(foreach stage, $(gfx-gma-stages), \ + $(eval $(stage)-srcs += $$(addprefix $(1),$(2))))
$(call add-special-class,gfxinit-gen) -gfxinit-gen-handler = \ +gfxinit-gen-handler += \ $(eval additional-dirs += $(dir $(2))) \ - $(eval ramstage-srcs += $(2)) \ - $(eval ramstage-ads-deps += $(2)) \ - $(eval ramstage-adb-deps += $(2)) \ + $(foreach stage, $(gfx-gma-stages), \ + $(eval $(stage)-srcs += $(2)) \ + $(eval $(stage)-ads-deps += $(2)) \ + $(eval $(stage)-adb-deps += $(2))) \ $(eval $(2): $(obj)/config.h)
+ifeq ($(CONFIG_GFX_GMA_DEFAULT_MMIO),) CONFIG_GFX_GMA_DEFAULT_MMIO := 0 # dummy, will be overwritten at runtime +else +$(call to-ada-hex,CONFIG_GFX_GMA_DEFAULT_MMIO) +endif
subdirs-y += ../../../../3rdparty/libgfxinit
-ramstage-y += gma.ads gma.adb +$(foreach stage,$(gfx-gma-stages), \ + $(eval $(stage)-y += gma.ads gma.adb)) + +endif # CONFIG_GFX_GMA || CONFIG_ROMSTAGE_GFX_GMA + +ifeq ($(CONFIG_GFX_GMA),y)
ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-gfx_init.ads ifeq ($(CONFIG_LINEAR_FRAMEBUFFER),y) @@ -47,3 +62,11 @@ endif
endif # CONFIG_GFX_GMA + +ifeq ($(CONFIG_ROMSTAGE_GFX_GMA),y) + +romstage-$(CONFIG_MAINBOARD_USE_ROMSTAGE_LIBGFXINIT) += \ + gma-gfx_init.ads \ + text_fb/gma-gfx_init.adb + +endif # CONFIG_ROMSTAGE_GFX_GMA