summaryrefslogtreecommitdiff
path: root/src/soc/amd/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/amd/common')
-rw-r--r--src/soc/amd/common/block/include/amdblocks/root_complex.h2
-rw-r--r--src/soc/amd/common/block/root_complex/Makefile.mk7
-rw-r--r--src/soc/amd/common/block/root_complex/ioapic.c17
3 files changed, 25 insertions, 1 deletions
diff --git a/src/soc/amd/common/block/include/amdblocks/root_complex.h b/src/soc/amd/common/block/include/amdblocks/root_complex.h
index cac659e756..767221ec06 100644
--- a/src/soc/amd/common/block/include/amdblocks/root_complex.h
+++ b/src/soc/amd/common/block/include/amdblocks/root_complex.h
@@ -31,4 +31,6 @@ signed int get_iohc_fabric_id(struct device *domain);
void read_fsp_resources(struct device *dev, unsigned long *idx);
+void amd_pci_domain_init(struct device *domain);
+
#endif /* AMD_BLOCK_ROOT_COMPLEX_H */
diff --git a/src/soc/amd/common/block/root_complex/Makefile.mk b/src/soc/amd/common/block/root_complex/Makefile.mk
index ba550bda6b..07f3ab108e 100644
--- a/src/soc/amd/common/block/root_complex/Makefile.mk
+++ b/src/soc/amd/common/block/root_complex/Makefile.mk
@@ -1,2 +1,7 @@
## SPDX-License-Identifier: GPL-2.0-only
-ramstage-$(CONFIG_SOC_AMD_COMMON_BLOCK_ROOT_COMPLEX) += non_pci_resources.c
+ifeq ($(CONFIG_SOC_AMD_COMMON_BLOCK_ROOT_COMPLEX),y)
+
+ramstage-y += ioapic.c
+ramstage-y += non_pci_resources.c
+
+endif # CONFIG_SOC_AMD_COMMON_BLOCK_ROOT_COMPLEX
diff --git a/src/soc/amd/common/block/root_complex/ioapic.c b/src/soc/amd/common/block/root_complex/ioapic.c
new file mode 100644
index 0000000000..cdeb53239b
--- /dev/null
+++ b/src/soc/amd/common/block/root_complex/ioapic.c
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <amdblocks/ioapic.h>
+#include <amdblocks/root_complex.h>
+#include <arch/ioapic.h>
+#include <device/device.h>
+#include <device/resource.h>
+#include <types.h>
+
+void amd_pci_domain_init(struct device *domain)
+{
+ struct resource *res = probe_resource(domain, IOMMU_IOAPIC_IDX);
+ if (!res)
+ return;
+
+ register_new_ioapic((void *)(uintptr_t)res->base);
+}