soc/amd/*/memmap.c: Report FCH MMIO regions as reserved

The following error is observed in Linux:
[   30.255680] ACPI Error: Aborting method \_SB.FUR4.AOAC._OFF due to previous error (AE_AML_LOOP_TIMEOUT)
It caused a boot delay issue in the virtualization case above due to
some mmio regions not being passed through and the acpi interpreter
waiting.

reserve MMIO regions which are used by ACPI code in order to fix this
issue.

source: "Address Space Mapping" Table in relevant PPRs.

Signed-off-by: Maximilian Brune <maximilian.brune@9elements.com>
Change-Id: Ia12a3dea0e24ae24fa1f7db7c7f2bd9f7dd6a591
Reviewed-on: https://review.coreboot.org/c/coreboot/+/90212
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
This commit is contained in:
Maximilian Brune 2025-11-10 16:46:23 +01:00 committed by Felix Held
commit 02342b31df
5 changed files with 25 additions and 0 deletions

View file

@ -1,9 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <amdblocks/acpimmio_map.h>
#include <amdblocks/iomap.h>
#include <amdblocks/memmap.h>
#include <amdblocks/root_complex.h>
#include <device/device.h>
#include <soc/iomap.h>
#include <stdint.h>
/*
@ -65,5 +67,8 @@ void read_soc_memmap_resources(struct device *dev, unsigned long *idx)
/* Reserve fixed IOMMU MMIO region */
mmio_range(dev, (*idx)++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
mmio_range(dev, (*idx)++, AMD_SB_ACPI_MMIO_ADDR, 0x2000);
mmio_range(dev, (*idx)++, ALINK_AHB_ADDRESS, 0x20000);
read_fsp_resources(dev, idx);
}

View file

@ -1,9 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <amdblocks/acpimmio_map.h>
#include <amdblocks/iomap.h>
#include <amdblocks/memmap.h>
#include <amdblocks/root_complex.h>
#include <device/device.h>
#include <soc/iomap.h>
#include <stdint.h>
/*
@ -65,5 +67,8 @@ void read_soc_memmap_resources(struct device *dev, unsigned long *idx)
/* Reserve fixed IOMMU MMIO region */
mmio_range(dev, (*idx)++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
mmio_range(dev, (*idx)++, AMD_SB_ACPI_MMIO_ADDR, 0x2000);
mmio_range(dev, (*idx)++, ALINK_AHB_ADDRESS, 0x20000);
read_fsp_resources(dev, idx);
}

View file

@ -1,9 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <amdblocks/acpimmio_map.h>
#include <amdblocks/iomap.h>
#include <amdblocks/memmap.h>
#include <amdblocks/root_complex.h>
#include <device/device.h>
#include <soc/iomap.h>
#include <stdint.h>
/*
@ -65,5 +67,8 @@ void read_soc_memmap_resources(struct device *dev, unsigned long *idx)
/* Reserve fixed IOMMU MMIO region */
mmio_range(dev, (*idx)++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
mmio_range(dev, (*idx)++, AMD_SB_ACPI_MMIO_ADDR, 0x2000);
mmio_range(dev, (*idx)++, ALINK_AHB_ADDRESS, 0x20000);
read_fsp_resources(dev, idx);
}

View file

@ -1,10 +1,12 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <amdblocks/acpimmio_map.h>
#include <amdblocks/iomap.h>
#include <amdblocks/memmap.h>
#include <amdblocks/root_complex.h>
#include <device/device.h>
#include <drivers/amd/opensil/opensil.h>
#include <soc/iomap.h>
#include <stdint.h>
/*
@ -66,6 +68,9 @@ void read_soc_memmap_resources(struct device *dev, unsigned long *idx)
/* Reserve fixed IOMMU MMIO region */
mmio_range(dev, (*idx)++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
mmio_range(dev, (*idx)++, AMD_SB_ACPI_MMIO_ADDR, 0x2000);
mmio_range(dev, (*idx)++, ALINK_AHB_ADDRESS, 0x20000);
if (CONFIG(PLATFORM_USES_FSP2_0))
read_fsp_resources(dev, idx);
else

View file

@ -1,9 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <amdblocks/acpimmio_map.h>
#include <amdblocks/memmap.h>
#include <amdblocks/iomap.h>
#include <amdblocks/root_complex.h>
#include <device/device.h>
#include <soc/iomap.h>
#include <stdint.h>
/*
@ -65,5 +67,8 @@ void read_soc_memmap_resources(struct device *dev, unsigned long *idx)
/* Reserve fixed IOMMU MMIO region */
mmio_range(dev, (*idx)++, IOMMU_RESERVED_MMIO_BASE, IOMMU_RESERVED_MMIO_SIZE);
mmio_range(dev, (*idx)++, AMD_SB_ACPI_MMIO_ADDR, 0x2000);
mmio_range(dev, (*idx)++, ALINK_AHB_ADDRESS, 0x20000);
read_fsp_resources(dev, idx);
}