X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=UefiPayloadPkg%2FBlSupportDxe%2FBlSupportDxe.c;h=2e70c4533c21582671638f0ba5faae5311049b84;hb=e5efcf8be8a1bf59aa98875787475e3144ee4cef;hp=28dfc8fc5545c8754c8a334a325549bc25f2df05;hpb=976d0353a6ce48149039849b52bb67527be5b580;p=mirror_edk2.git diff --git a/UefiPayloadPkg/BlSupportDxe/BlSupportDxe.c b/UefiPayloadPkg/BlSupportDxe/BlSupportDxe.c index 28dfc8fc55..2e70c4533c 100644 --- a/UefiPayloadPkg/BlSupportDxe/BlSupportDxe.c +++ b/UefiPayloadPkg/BlSupportDxe/BlSupportDxe.c @@ -2,7 +2,7 @@ This driver will report some MMIO/IO resources to dxe core, extract smbios and acpi tables from bootloader. - Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.
+ Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ @@ -30,7 +30,7 @@ ReserveResourceInGcd ( IN EFI_HANDLE ImageHandle ) { - EFI_STATUS Status; + EFI_STATUS Status; if (IsMMIO) { Status = gDS->AddMemorySpace ( @@ -41,13 +41,13 @@ ReserveResourceInGcd ( ); if (EFI_ERROR (Status)) { DEBUG (( - DEBUG_ERROR, + DEBUG_WARN, "Failed to add memory space :0x%lx 0x%lx\n", BaseAddress, Length )); } - ASSERT_EFI_ERROR (Status); + Status = gDS->AllocateMemorySpace ( EfiGcdAllocateAddress, GcdType, @@ -57,14 +57,21 @@ ReserveResourceInGcd ( ImageHandle, NULL ); - ASSERT_EFI_ERROR (Status); } else { Status = gDS->AddIoSpace ( GcdType, BaseAddress, Length ); - ASSERT_EFI_ERROR (Status); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_WARN, + "Failed to add IO space :0x%lx 0x%lx\n", + BaseAddress, + Length + )); + } + Status = gDS->AllocateIoSpace ( EfiGcdAllocateAddress, GcdType, @@ -74,12 +81,11 @@ ReserveResourceInGcd ( ImageHandle, NULL ); - ASSERT_EFI_ERROR (Status); } + return Status; } - /** Main entry for the bootloader support DXE module. @@ -93,49 +99,22 @@ ReserveResourceInGcd ( EFI_STATUS EFIAPI BlDxeEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; + EFI_STATUS Status; EFI_HOB_GUID_TYPE *GuidHob; - SYSTEM_TABLE_INFO *SystemTableInfo; EFI_PEI_GRAPHICS_INFO_HOB *GfxInfo; + ACPI_BOARD_INFO *AcpiBoardInfo; Status = EFI_SUCCESS; // // Report MMIO/IO Resources // - Status = ReserveResourceInGcd (TRUE, EfiGcdMemoryTypeMemoryMappedIo, 0xFEC00000, SIZE_4KB, 0, ImageHandle); // IOAPIC - ASSERT_EFI_ERROR (Status); + ReserveResourceInGcd (TRUE, EfiGcdMemoryTypeMemoryMappedIo, 0xFEC00000, SIZE_4KB, 0, ImageHandle); // IOAPIC - Status = ReserveResourceInGcd (TRUE, EfiGcdMemoryTypeMemoryMappedIo, 0xFED00000, SIZE_1KB, 0, ImageHandle); // HPET - ASSERT_EFI_ERROR (Status); - - // - // Find the system table information guid hob - // - GuidHob = GetFirstGuidHob (&gUefiSystemTableInfoGuid); - ASSERT (GuidHob != NULL); - SystemTableInfo = (SYSTEM_TABLE_INFO *)GET_GUID_HOB_DATA (GuidHob); - - // - // Install Acpi Table - // - if (SystemTableInfo->AcpiTableBase != 0 && SystemTableInfo->AcpiTableSize != 0) { - DEBUG ((DEBUG_ERROR, "Install Acpi Table at 0x%lx, length 0x%x\n", SystemTableInfo->AcpiTableBase, SystemTableInfo->AcpiTableSize)); - Status = gBS->InstallConfigurationTable (&gEfiAcpiTableGuid, (VOID *)(UINTN)SystemTableInfo->AcpiTableBase); - ASSERT_EFI_ERROR (Status); - } - - // - // Install Smbios Table - // - if (SystemTableInfo->SmbiosTableBase != 0 && SystemTableInfo->SmbiosTableSize != 0) { - DEBUG ((DEBUG_ERROR, "Install Smbios Table at 0x%lx, length 0x%x\n", SystemTableInfo->SmbiosTableBase, SystemTableInfo->SmbiosTableSize)); - Status = gBS->InstallConfigurationTable (&gEfiSmbiosTableGuid, (VOID *)(UINTN)SystemTableInfo->SmbiosTableBase); - ASSERT_EFI_ERROR (Status); - } + ReserveResourceInGcd (TRUE, EfiGcdMemoryTypeMemoryMappedIo, 0xFED00000, SIZE_1KB, 0, ImageHandle); // HPET // // Find the frame buffer information and update PCDs @@ -143,7 +122,7 @@ BlDxeEntryPoint ( GuidHob = GetFirstGuidHob (&gEfiGraphicsInfoHobGuid); if (GuidHob != NULL) { GfxInfo = (EFI_PEI_GRAPHICS_INFO_HOB *)GET_GUID_HOB_DATA (GuidHob); - Status = PcdSet32S (PcdVideoHorizontalResolution, GfxInfo->GraphicsMode.HorizontalResolution); + Status = PcdSet32S (PcdVideoHorizontalResolution, GfxInfo->GraphicsMode.HorizontalResolution); ASSERT_EFI_ERROR (Status); Status = PcdSet32S (PcdVideoVerticalResolution, GfxInfo->GraphicsMode.VerticalResolution); ASSERT_EFI_ERROR (Status); @@ -153,6 +132,17 @@ BlDxeEntryPoint ( ASSERT_EFI_ERROR (Status); } + // + // Set PcdPciExpressBaseAddress and PcdPciExpressBaseSize by HOB info + // + GuidHob = GetFirstGuidHob (&gUefiAcpiBoardInfoGuid); + if (GuidHob != NULL) { + AcpiBoardInfo = (ACPI_BOARD_INFO *)GET_GUID_HOB_DATA (GuidHob); + Status = PcdSet64S (PcdPciExpressBaseAddress, AcpiBoardInfo->PcieBaseAddress); + ASSERT_EFI_ERROR (Status); + Status = PcdSet64S (PcdPciExpressBaseSize, AcpiBoardInfo->PcieBaseSize); + ASSERT_EFI_ERROR (Status); + } + return EFI_SUCCESS; } -