aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/amd/cezanne/root_complex.c4
-rw-r--r--src/soc/amd/common/block/include/amdblocks/iomap.h3
-rw-r--r--src/soc/amd/glinda/root_complex.c4
-rw-r--r--src/soc/amd/mendocino/root_complex.c4
-rw-r--r--src/soc/amd/phoenix/root_complex.c4
-rw-r--r--src/soc/amd/picasso/root_complex.c4
6 files changed, 23 insertions, 0 deletions
diff --git a/src/soc/amd/cezanne/root_complex.c b/src/soc/amd/cezanne/root_complex.c
index 29070f6d4e..b5bf62c061 100644
--- a/src/soc/amd/cezanne/root_complex.c
+++ b/src/soc/amd/cezanne/root_complex.c
@@ -5,6 +5,7 @@
#include <amdblocks/alib.h>
#include <amdblocks/data_fabric.h>
#include <amdblocks/ioapic.h>
+#include <amdblocks/iomap.h>
#include <amdblocks/memmap.h>
#include <arch/ioapic.h>
#include <arch/vga.h>
@@ -151,6 +152,9 @@ static void read_resources(struct device *dev)
gnb_apic->size = 0x00001000;
gnb_apic->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+ /* Reserve fixed IOMMU MMIO region */
+ mmio_range(dev, idx++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
+
if (fsp_hob_iterator_init(&hob_iterator) != CB_SUCCESS) {
printk(BIOS_ERR, "%s incomplete because no HOB list was found\n",
__func__);
diff --git a/src/soc/amd/common/block/include/amdblocks/iomap.h b/src/soc/amd/common/block/include/amdblocks/iomap.h
index 759466b052..d166a833a9 100644
--- a/src/soc/amd/common/block/include/amdblocks/iomap.h
+++ b/src/soc/amd/common/block/include/amdblocks/iomap.h
@@ -12,4 +12,7 @@
#define FLASH_BELOW_4GB_MAPPING_REGION_BASE ((0xffffffff - 16 * MiB) + 1)
#define FLASH_BELOW_4GB_MAPPING_REGION_SIZE (16 * MiB)
+#define IOMMU_RESERVED_MMIO_BASE 0xfd00000000
+#define IOMMU_RESERVED_MMIO_SIZE (4ULL * GiB)
+
#endif /* AMD_BLOCK_IOMAP_H */
diff --git a/src/soc/amd/glinda/root_complex.c b/src/soc/amd/glinda/root_complex.c
index b18e948abe..1794d08983 100644
--- a/src/soc/amd/glinda/root_complex.c
+++ b/src/soc/amd/glinda/root_complex.c
@@ -7,6 +7,7 @@
#include <amdblocks/alib.h>
#include <amdblocks/data_fabric.h>
#include <amdblocks/ioapic.h>
+#include <amdblocks/iomap.h>
#include <amdblocks/memmap.h>
#include <arch/ioapic.h>
#include <arch/vga.h>
@@ -166,6 +167,9 @@ static void read_resources(struct device *dev)
gnb_apic->size = 0x00001000;
gnb_apic->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+ /* Reserve fixed IOMMU MMIO region */
+ mmio_range(dev, idx++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
+
if (fsp_hob_iterator_init(&hob_iterator) != CB_SUCCESS) {
printk(BIOS_ERR, "%s incomplete because no HOB list was found\n",
__func__);
diff --git a/src/soc/amd/mendocino/root_complex.c b/src/soc/amd/mendocino/root_complex.c
index 7a58f015e6..0dcf2b8a02 100644
--- a/src/soc/amd/mendocino/root_complex.c
+++ b/src/soc/amd/mendocino/root_complex.c
@@ -7,6 +7,7 @@
#include <amdblocks/alib.h>
#include <amdblocks/data_fabric.h>
#include <amdblocks/ioapic.h>
+#include <amdblocks/iomap.h>
#include <amdblocks/memmap.h>
#include <arch/ioapic.h>
#include <arch/vga.h>
@@ -194,6 +195,9 @@ static void read_resources(struct device *dev)
gnb_apic->size = 0x00001000;
gnb_apic->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+ /* Reserve fixed IOMMU MMIO region */
+ mmio_range(dev, idx++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
+
if (fsp_hob_iterator_init(&hob_iterator) != CB_SUCCESS) {
printk(BIOS_ERR, "%s incomplete because no HOB list was found\n",
__func__);
diff --git a/src/soc/amd/phoenix/root_complex.c b/src/soc/amd/phoenix/root_complex.c
index 3110ea3ee5..a75de50618 100644
--- a/src/soc/amd/phoenix/root_complex.c
+++ b/src/soc/amd/phoenix/root_complex.c
@@ -7,6 +7,7 @@
#include <amdblocks/alib.h>
#include <amdblocks/data_fabric.h>
#include <amdblocks/ioapic.h>
+#include <amdblocks/iomap.h>
#include <amdblocks/memmap.h>
#include <arch/ioapic.h>
#include <arch/vga.h>
@@ -166,6 +167,9 @@ static void read_resources(struct device *dev)
gnb_apic->size = 0x00001000;
gnb_apic->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+ /* Reserve fixed IOMMU MMIO region */
+ mmio_range(dev, idx++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
+
if (fsp_hob_iterator_init(&hob_iterator) != CB_SUCCESS) {
printk(BIOS_ERR, "%s incomplete because no HOB list was found\n",
__func__);
diff --git a/src/soc/amd/picasso/root_complex.c b/src/soc/amd/picasso/root_complex.c
index cd10fdb762..bf36f6dd50 100644
--- a/src/soc/amd/picasso/root_complex.c
+++ b/src/soc/amd/picasso/root_complex.c
@@ -6,6 +6,7 @@
#include <amdblocks/data_fabric.h>
#include <amdblocks/memmap.h>
#include <amdblocks/ioapic.h>
+#include <amdblocks/iomap.h>
#include <arch/ioapic.h>
#include <arch/vga.h>
#include <assert.h>
@@ -149,6 +150,9 @@ static void read_resources(struct device *dev)
gnb_apic->size = 0x00001000;
gnb_apic->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+ /* Reserve fixed IOMMU MMIO region */
+ mmio_range(dev, idx++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
+
if (fsp_hob_iterator_init(&hob_iterator) != CB_SUCCESS) {
printk(BIOS_ERR, "%s incomplete because no HOB list was found\n", __func__);
return;