forked from tianocore/edk2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
UefiPayloadPkg/Pci: Use the PCIE Base Addr stored in AcpiBoardInfo HOB
Today's UefiPayloadPkg always uses 0xE0000000 as the PCIE base address and ignores the value set in AcpiBoardInfo HOB created by the boot loader. This makes the payload binary cannot work in environment where the PCIE base address set by boot loader doesn't equal to 0xE0000000. The patch enhances UefiPayloadPkg so that the PCIE base address set by boot loader in the AcpiBoardInfo HOB is used. Signed-off-by: Ray Ni <[email protected]> Reviewed-by: Maurice Ma <[email protected]> Reviewed-by: Guo Dong <[email protected]> Cc: Benjamin You <[email protected]>
- Loading branch information
1 parent
03013d9
commit 3900a63
Showing
6 changed files
with
119 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 59 additions & 0 deletions
59
UefiPayloadPkg/Library/PciSegmentInfoLibAcpiBoardInfo/PciSegmentInfoLibAcpiBoardInfo.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/** @file | ||
PCI Segment Information Library that returns one segment whose | ||
segment base address is retrieved from AcpiBoardInfo HOB. | ||
Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> | ||
SPDX-License-Identifier: BSD-2-Clause-Patent | ||
**/ | ||
|
||
#include <PiDxe.h> | ||
#include <Guid/AcpiBoardInfoGuid.h> | ||
|
||
#include <Library/HobLib.h> | ||
#include <Library/PciSegmentInfoLib.h> | ||
#include <Library/DebugLib.h> | ||
|
||
STATIC PCI_SEGMENT_INFO mPciSegment0 = { | ||
0, // Segment number | ||
0, // To be fixed later | ||
0, // Start bus number | ||
255 // End bus number | ||
}; | ||
|
||
/** | ||
Return an array of PCI_SEGMENT_INFO holding the segment information. | ||
Note: The returned array/buffer is owned by callee. | ||
@param Count Return the count of segments. | ||
@retval A callee owned array holding the segment information. | ||
**/ | ||
PCI_SEGMENT_INFO * | ||
EFIAPI | ||
GetPciSegmentInfo ( | ||
UINTN *Count | ||
) | ||
{ | ||
EFI_HOB_GUID_TYPE *GuidHob; | ||
ACPI_BOARD_INFO *AcpiBoardInfo; | ||
|
||
ASSERT (Count != NULL); | ||
if (Count == NULL) { | ||
return NULL; | ||
} | ||
|
||
if (mPciSegment0.BaseAddress == 0) { | ||
// | ||
// Find the acpi board information guid hob | ||
// | ||
GuidHob = GetFirstGuidHob (&gUefiAcpiBoardInfoGuid); | ||
ASSERT (GuidHob != NULL); | ||
|
||
AcpiBoardInfo = (ACPI_BOARD_INFO *) GET_GUID_HOB_DATA (GuidHob); | ||
mPciSegment0.BaseAddress = AcpiBoardInfo->PcieBaseAddress; | ||
} | ||
*Count = 1; | ||
return &mPciSegment0; | ||
} |
36 changes: 36 additions & 0 deletions
36
UefiPayloadPkg/Library/PciSegmentInfoLibAcpiBoardInfo/PciSegmentInfoLibAcpiBoardInfo.inf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
## @file | ||
# PCI Segment Information Library that returns one segment whose | ||
# segment base address is retrieved from AcpiBoardInfo HOB. | ||
# | ||
# Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> | ||
# | ||
# SPDX-License-Identifier: BSD-2-Clause-Patent | ||
# | ||
# | ||
## | ||
|
||
[Defines] | ||
INF_VERSION = 0x00010005 | ||
BASE_NAME = PciSegmentInfoLibAcpiBoardInfo | ||
FILE_GUID = 0EA82AA2-6C36-4FD5-BC90-FFA3ECB5E0CE | ||
MODULE_TYPE = BASE | ||
VERSION_STRING = 1.0 | ||
LIBRARY_CLASS = PciSegmentInfoLib | DXE_DRIVER | ||
|
||
# | ||
# The following information is for reference only and not required by the build tools. | ||
# | ||
# VALID_ARCHITECTURES = IA32 X64 EBC | ||
# | ||
|
||
[Sources] | ||
PciSegmentInfoLibAcpiBoardInfo.c | ||
|
||
[Packages] | ||
MdePkg/MdePkg.dec | ||
UefiPayloadPkg/UefiPayloadPkg.dec | ||
|
||
[LibraryClasses] | ||
PcdLib | ||
HobLib | ||
DebugLib |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters