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 <wonchung@google.com>
Change-Id: I393207746a9e82c1fd7622ab3661d7b1232cb62f
Reviewed-on: https://review.coreboot.org/c/coreboot/+/74365
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Kapil Porwal <kapilporwal@google.com>
diff --git a/src/drivers/gfx/generic/chip.h b/src/drivers/gfx/generic/chip.h
index d600823..1a666a2 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 <acpi/acpi_device.h>
+#include <acpi/acpi_pld.h>
 
 /* Config for electronic privacy screen */
 struct drivers_gfx_generic_privacy_screen_config {
@@ -35,6 +36,9 @@
 	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 @@
 	/* 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 7c6076c..0ab1676 100644
--- a/src/drivers/gfx/generic/generic.c
+++ b/src/drivers/gfx/generic/generic.c
@@ -128,6 +128,10 @@
 
 		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 */