summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMa, Maurice <maurice.ma@intel.com>2021-09-30 09:59:07 -0700
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2021-10-13 23:03:50 +0000
commit978d428ec3ca2520c217819901c8465235c45c5e (patch)
treee2af29a9052466ebe6e6cd4dec17ab18b2c34a1b
parent6ed6abd6c116e8599876a2876b77e172e800b13e (diff)
downloadedk2-978d428ec3ca2520c217819901c8465235c45c5e.tar.gz
edk2-978d428ec3ca2520c217819901c8465235c45c5e.tar.bz2
edk2-978d428ec3ca2520c217819901c8465235c45c5e.zip
UefiPayloadPkg: Add PCI root bridge info hob support for SBL
Current UefiPayloadPkg can suport PCI root bridge info HOB provided by bootloader. For UniversalPayload, bootloader can directly provide this HOB for payload consumption. However, for legacy UEFI payload, it is required to migrate the HOB information from bootloader HOB space to UEFI payload HOB space. This patch added the missing part for the bootloader ParseLib in order to support both legacy and universal UEFI payload. This patch was tested on Slim Bootloader with latest UEFI payload, and it worked as expected. Cc: Ray Ni <ray.ni@intel.com> Cc: Guo Dong <guo.dong@intel.com> Cc: Benjamin You <benjamin.you@intel.com> Signed-off-by: Maurice Ma <maurice.ma@intel.com> Reviewed-by: Guo Dong <guo.dong@intel.com>
-rw-r--r--UefiPayloadPkg/Include/Library/BlParseLib.h14
-rw-r--r--UefiPayloadPkg/Library/CbParseLib/CbParseLib.c16
-rw-r--r--UefiPayloadPkg/Library/SblParseLib/SblParseLib.c47
-rw-r--r--UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf1
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c8
5 files changed, 84 insertions, 2 deletions
diff --git a/UefiPayloadPkg/Include/Library/BlParseLib.h b/UefiPayloadPkg/Include/Library/BlParseLib.h
index 1244190d4e..49eac31248 100644
--- a/UefiPayloadPkg/Include/Library/BlParseLib.h
+++ b/UefiPayloadPkg/Include/Library/BlParseLib.h
@@ -116,4 +116,18 @@ ParseGfxDeviceInfo (
OUT EFI_PEI_GRAPHICS_DEVICE_INFO_HOB *GfxDeviceInfo
);
+/**
+ Parse and handle the misc info provided by bootloader
+
+ @retval RETURN_SUCCESS The misc information was parsed successfully.
+ @retval RETURN_NOT_FOUND Could not find required misc info.
+ @retval RETURN_OUT_OF_RESOURCES Insufficant memory space.
+
+**/
+RETURN_STATUS
+EFIAPI
+ParseMiscInfo (
+ VOID
+ );
+
#endif
diff --git a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c
index 4f90687e40..f81aa0f301 100644
--- a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c
+++ b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c
@@ -560,3 +560,19 @@ ParseGfxDeviceInfo (
return RETURN_NOT_FOUND;
}
+/**
+ Parse and handle the misc info provided by bootloader
+
+ @retval RETURN_SUCCESS The misc information was parsed successfully.
+ @retval RETURN_NOT_FOUND Could not find required misc info.
+ @retval RETURN_OUT_OF_RESOURCES Insufficant memory space.
+
+**/
+RETURN_STATUS
+EFIAPI
+ParseMiscInfo (
+ VOID
+ )
+{
+ return RETURN_SUCCESS;
+}
diff --git a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c
index 7214fd87d2..ccdcbfc07d 100644
--- a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c
+++ b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.c
@@ -1,7 +1,7 @@
/** @file
This library will parse the Slim Bootloader to get required information.
- Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -15,7 +15,7 @@
#include <Library/HobLib.h>
#include <Library/BlParseLib.h>
#include <IndustryStandard/Acpi.h>
-
+#include <UniversalPayload/PciRootBridges.h>
/**
This function retrieves the parameter base address from boot loader.
@@ -221,3 +221,46 @@ ParseGfxDeviceInfo (
return RETURN_SUCCESS;
}
+/**
+ Parse and handle the misc info provided by bootloader
+
+ @retval RETURN_SUCCESS The misc information was parsed successfully.
+ @retval RETURN_NOT_FOUND Could not find required misc info.
+ @retval RETURN_OUT_OF_RESOURCES Insufficant memory space.
+
+**/
+RETURN_STATUS
+EFIAPI
+ParseMiscInfo (
+ VOID
+ )
+{
+ RETURN_STATUS Status;
+ UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *BlRootBridgesHob;
+ UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *PldRootBridgesHob;
+
+ Status = RETURN_NOT_FOUND;
+ BlRootBridgesHob = (UNIVERSAL_PAYLOAD_PCI_ROOT_BRIDGES *) GetGuidHobDataFromSbl (
+ &gUniversalPayloadPciRootBridgeInfoGuid
+ );
+ if (BlRootBridgesHob != NULL) {
+ //
+ // Migrate bootloader root bridge info hob from bootloader to payload.
+ //
+ PldRootBridgesHob = BuildGuidHob (
+ &gUniversalPayloadPciRootBridgeInfoGuid,
+ BlRootBridgesHob->Header.Length
+ );
+ ASSERT (PldRootBridgesHob != NULL);
+ if (PldRootBridgesHob != NULL) {
+ CopyMem (PldRootBridgesHob, BlRootBridgesHob, BlRootBridgesHob->Header.Length);
+ DEBUG ((DEBUG_INFO, "Create PCI root bridge info guid hob\n"));
+ Status = RETURN_SUCCESS;
+ } else {
+ Status = RETURN_OUT_OF_RESOURCES;
+ }
+ }
+
+ return Status;
+}
+
diff --git a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf
index 665a5a8adc..535cca58a6 100644
--- a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf
+++ b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf
@@ -41,6 +41,7 @@
gLoaderMemoryMapInfoGuid
gEfiGraphicsInfoHobGuid
gEfiGraphicsDeviceInfoHobGuid
+ gUniversalPayloadPciRootBridgeInfoGuid
[Pcd]
gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
index f2ac3d2c69..5a1e578668 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
+++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
@@ -322,6 +322,14 @@ BuildHobFromBl (
}
//
+ // Parse the misc info provided by bootloader
+ //
+ Status = ParseMiscInfo ();
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_WARN, "Error when parsing misc info, Status = %r\n", Status));
+ }
+
+ //
// Parse platform specific information.
//
Status = ParsePlatformInfo ();