From 59da910fede2c5c5d432847a51823233dc78ba49 Mon Sep 17 00:00:00 2001 From: Ajan Zhong Date: Tue, 24 Dec 2024 15:58:27 +0800 Subject: [PATCH] UefiPayloadPkg: Align base address for ACPI region In platform which support ACPI 2.0 only, the base address of ACPI region is not page aligned. This unalinged base address leads to failure at BuildMemoryAllocationHob when parsing ACPI node in FdtParserLib, before building gUniversalPayloadAcpiTableGuid GUID HOB. Align base address of ACPI region down to EFI_PAGE_SIZE to make sure base address always aligned. Signed-off-by: Ajan Zhong --- UefiPayloadPkg/Library/FdtParserLib/FdtParserLib.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/UefiPayloadPkg/Library/FdtParserLib/FdtParserLib.c b/UefiPayloadPkg/Library/FdtParserLib/FdtParserLib.c index 372ca0776558..aeb294517ebf 100644 --- a/UefiPayloadPkg/Library/FdtParserLib/FdtParserLib.c +++ b/UefiPayloadPkg/Library/FdtParserLib/FdtParserLib.c @@ -60,6 +60,8 @@ typedef enum { EFI_PCI_IO_ATTRIBUTE_ISA_IO | \ EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO) +#define UPL_ALIGN_DOWN_PAGE_U64(Address) ((UINT64)(Address) & ~(UINT64)(EFI_PAGE_SIZE - 1)) + extern VOID *mHobList; UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *mPciRootBridgeInfo = NULL; INT32 mNode[0x500] = { 0 }; @@ -289,7 +291,10 @@ ParseReservedMemory ( BuildMemoryAllocationHob (StartAddress, NumberOfBytes, EfiACPIMemoryNVS); } else if (AsciiStrnCmp (TempStr, "acpi", AsciiStrLen ("acpi")) == 0) { DEBUG ((DEBUG_INFO, " acpi, StartAddress:%x, NumberOfBytes:%x\n", StartAddress, NumberOfBytes)); - BuildMemoryAllocationHob (StartAddress, NumberOfBytes, EfiBootServicesData); + + BuildMemoryAllocationHob (UPL_ALIGN_DOWN_PAGE_U64(StartAddress), + ALIGN_VALUE(NumberOfBytes, EFI_PAGE_SIZE), + EfiBootServicesData); PlatformAcpiTable = BuildGuidHob (&gUniversalPayloadAcpiTableGuid, sizeof (UNIVERSAL_PAYLOAD_ACPI_TABLE)); if (PlatformAcpiTable != NULL) { DEBUG ((DEBUG_INFO, " build gUniversalPayloadAcpiTableGuid , NumberOfBytes:%x\n", NumberOfBytes));