acpi: Add functions to declare ARM GIC V3 hardware

For GICD and GICR a SOC needs to implement 2 callbacks to get the base
of those interrupt controllers.

For all the cpu GIC the code loops over all the DEVICE_PATH_GICC_V3
devices in a similar fashion to how x86 lapics are added. It's up to the
SOC to add those devices to the tree.

Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Change-Id: I5074d0a76316e854b7801e14b3241f88e805b02f
Reviewed-on: https://review.coreboot.org/c/coreboot/+/76132
Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/include/acpi/acpi.h b/src/include/acpi/acpi.h
index 16fe912..201d851 100644
--- a/src/include/acpi/acpi.h
+++ b/src/include/acpi/acpi.h
@@ -1566,6 +1566,9 @@
 
 unsigned long acpi_create_madt_lapic_nmis(unsigned long current);
 
+uintptr_t platform_get_gicd_base(void);
+uintptr_t platform_get_gicr_base(void);
+
 int acpi_create_srat_lapic(acpi_srat_lapic_t *lapic, u8 node, u8 apic);
 int acpi_create_srat_x2apic(acpi_srat_x2apic_t *x2apic, u32 node, u32 apic);
 int acpi_create_srat_mem(acpi_srat_mem_t *mem, u8 node, u32 basek, u32 sizek,
diff --git a/src/include/device/path.h b/src/include/device/path.h
index c0df66b..f8c4390 100644
--- a/src/include/device/path.h
+++ b/src/include/device/path.h
@@ -23,6 +23,7 @@
 	DEVICE_PATH_MMIO,
 	DEVICE_PATH_GPIO,
 	DEVICE_PATH_MDIO,
+	DEVICE_PATH_GICC_V3,
 
 	/*
 	 * When adding path types to this table, please also update the
@@ -48,6 +49,7 @@
 		"DEVICE_PATH_MMIO",		\
 		"DEVICE_PATH_GPIO",		\
 		"DEVICE_PATH_MDIO",		\
+		"DEVICE_PATH_GICC_V3",		\
 }
 
 struct domain_path {
@@ -120,6 +122,12 @@
 	unsigned int addr;
 };
 
+struct gicc_v3_path {
+	unsigned long long mpidr;
+	unsigned int vgic_mi;
+	unsigned int pi_gsiv;
+};
+
 struct device_path {
 	enum device_path_type type;
 	union {
@@ -138,6 +146,7 @@
 		struct mmio_path	mmio;
 		struct gpio_path	gpio;
 		struct mdio_path	mdio;
+		struct gicc_v3_path	gicc_v3;
 	};
 };