drivers/intel/gma: Hook up libgfxinit in romstage

A mainboard port needs to:

- select `CONFIG_MAINBOARD_HAS_EARLY_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 (and ramstage) for the graphic device.

BUG=b:252792591
BRANCH=firmware-brya-14505.B
TEST=libgfxinit compiles in romstage.
     libgfxinit successfully executes in romstage and ramstage using
     the requested MMIO setting on skolas.

Change-Id: I3c2101de10dc5df54fe873e43bbe0f1c4dccff44
Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/70276
Reviewed-by: Tarun Tuli <taruntuli@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Jeremy Compostella
2022-12-01 15:45:51 -07:00
committed by Subrata Banik
parent ea2dbdba2e
commit 765e5df0dd
5 changed files with 98 additions and 11 deletions

View File

@@ -90,15 +90,31 @@ config GFX_GMA
depends on MAINBOARD_USE_LIBGFXINIT || INTEL_GMA_LIBGFXINIT_EDID
select RAMSTAGE_LIBHWBASE
config EARLY_GFX_GMA
def_bool y
depends on SOC_INTEL_ALDERLAKE
depends on MAINBOARD_USE_EARLY_LIBGFXINIT
select ROMSTAGE_LIBHWBASE
config GFX_GMA_DEFAULT_MMIO
hex
depends on HWBASE_STATIC_MMIO && (GFX_GMA || EARLY_GFX_GMA)
help
Graphics device MMIO address. This is typically an unused
memory mapping region which can be allocated to the MMIO
region as graphics PCI device Base Address Range zero.
config GFX_GMA_PANEL_1_ON_EDP
bool
depends on GFX_GMA || MAINBOARD_HAS_LIBGFXINIT
depends on GFX_GMA || MAINBOARD_HAS_LIBGFXINIT \
|| MAINBOARD_HAS_EARLY_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_EARLY_LIBGFXINIT
default y if NORTHBRIDGE_INTEL_GM45 || NORTHBRIDGE_INTEL_IRONLAKE
default n
@@ -111,7 +127,7 @@ config INTEL_GMA_OPREGION_2_1
bool
default n
if GFX_GMA
if GFX_GMA || EARLY_GFX_GMA
config GFX_GMA_DYN_CPU
def_bool y

View File

@@ -20,24 +20,39 @@ endif
$(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_EARLY_GFX_GMA)))
gfx-gma-stages = \
$(if $(filter y,$(CONFIG_EARLY_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_EARLY_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 @@ ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += text_fb/gma-gfx_init.adb
endif
endif # CONFIG_GFX_GMA
ifeq ($(CONFIG_EARLY_GFX_GMA),y)
romstage-$(CONFIG_MAINBOARD_USE_EARLY_LIBGFXINIT) += \
gma-gfx_init.ads \
text_fb/gma-gfx_init.adb
endif # CONFIG_EARLY_GFX_GMA