From 467c88b3a971a364d2013b9e397d9cd6f5bcfdda Mon Sep 17 00:00:00 2001 From: Won Chung Date: Mon, 10 Apr 2023 20:35:58 +0000 Subject: drivers/gfx/generic: Add _PLD support to GFX device Add _PLD support to GFX device so that each display output can store its physical location of connection point. This is to be used primarily for describing DP on USB-C ports in the future patches. The upstream Linux kernel now has a feature to compare _PLD of Type C connectors and DP connectors to link them together. https://cgit.freedesktop.org/drm/drm-misc/commit/?id=c5c51b2420625faa1f0e363f21dba1de53806ff7 This feature allows us to tell which display output is used by which USB-C port. So, for the future boards, we want to add _PLD for each DP connector matching with the corresponding USB-C port. BUG=b:277629750 TEST=emerge-${BOARD} coreboot Signed-off-by: Won Chung Change-Id: I393207746a9e82c1fd7622ab3661d7b1232cb62f Reviewed-on: https://review.coreboot.org/c/coreboot/+/74365 Tested-by: build bot (Jenkins) Reviewed-by: Kapil Porwal --- src/drivers/gfx/generic/chip.h | 7 ++++++- src/drivers/gfx/generic/generic.c | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/drivers/gfx/generic/chip.h b/src/drivers/gfx/generic/chip.h index d60082372b..1a666a27eb 100644 --- a/src/drivers/gfx/generic/chip.h +++ b/src/drivers/gfx/generic/chip.h @@ -4,6 +4,7 @@ #define __DRIVERS_GFX_GENERIC_CHIP_H__ #include +#include /* Config for electronic privacy screen */ struct drivers_gfx_generic_privacy_screen_config { @@ -35,6 +36,9 @@ struct drivers_gfx_generic_device_config { unsigned int addr; /* Electronic privacy screen specific config */ struct drivers_gfx_generic_privacy_screen_config privacy; + /* Physical location of connection point */ + bool use_pld; + struct acpi_pld pld; }; /* Config for an ACPI video device defined in Appendix A of the ACPI spec */ @@ -47,7 +51,8 @@ struct drivers_gfx_generic_config { /* The number of output devices defined */ int device_count; /* Config for output devices */ - struct drivers_gfx_generic_device_config device[5]; + /* 1 DDIA + 1 DDIB + max 4 TCP = up to 6 GFX devices */ + struct drivers_gfx_generic_device_config device[6]; }; #endif /* __DRIVERS_GFX_GENERIC_CHIP_H__ */ diff --git a/src/drivers/gfx/generic/generic.c b/src/drivers/gfx/generic/generic.c index 7c6076c9f4..0ab16767eb 100644 --- a/src/drivers/gfx/generic/generic.c +++ b/src/drivers/gfx/generic/generic.c @@ -128,6 +128,10 @@ static void gfx_fill_ssdt_generator(const struct device *dev) acpigen_write_name_integer("_STA", 0xF); gfx_fill_privacy_screen_dsm(&config->device[i].privacy); + + if (config->device[i].use_pld) + acpigen_write_pld(&config->device[i].pld); + acpigen_pop_len(); /* Device */ } acpigen_pop_len(); /* Scope */ -- cgit v1.2.3