From a639248bd0dd1f1ea0b020dd16aab8a7bb76ddd2 Mon Sep 17 00:00:00 2001 From: MarsX Lin Date: Wed, 23 Nov 2022 15:50:06 +0800 Subject: UefiPayloadPkg: Support multiple firmware volume REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4164 To support multiple FVs provided by UPL Cc: Guo Dong Cc: Ray Ni Cc: Sean Rhodes Reviewed-by: James Lu Reviewed-by: Gua Guo Signed-off-by: MarsX Lin --- UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'UefiPayloadPkg') diff --git a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c index 09aee89..46ee27c 100644 --- a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c +++ b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c @@ -310,6 +310,7 @@ BuildHobs ( UNIVERSAL_PAYLOAD_ACPI_TABLE *AcpiTable; ACPI_BOARD_INFO *AcpiBoardInfo; EFI_HOB_HANDOFF_INFO_TABLE *HobInfo; + UINT8 Idx; Hob.Raw = (UINT8 *)BootloaderParameter; MinimalNeededSize = FixedPcdGet32 (PcdSystemMemoryUefiRegionSize); @@ -397,11 +398,24 @@ BuildHobs ( GuidHob = GetFirstGuidHob (&gUniversalPayloadExtraDataGuid); ASSERT (GuidHob != NULL); ExtraData = (UNIVERSAL_PAYLOAD_EXTRA_DATA *)GET_GUID_HOB_DATA (GuidHob); - ASSERT (ExtraData->Count == 1); + DEBUG ((DEBUG_INFO, "Multiple Fv Count=%d\n", ExtraData->Count)); ASSERT (AsciiStrCmp (ExtraData->Entry[0].Identifier, "uefi_fv") == 0); *DxeFv = (EFI_FIRMWARE_VOLUME_HEADER *)(UINTN)ExtraData->Entry[0].Base; ASSERT ((*DxeFv)->FvLength == ExtraData->Entry[0].Size); + // + // support multiple FVs provided by UPL + // + for (Idx = 1; Idx < ExtraData->Count; Idx++) { + BuildFvHob (ExtraData->Entry[Idx].Base, ExtraData->Entry[Idx].Size); + DEBUG (( + DEBUG_INFO, + "UPL Multiple fv[%d], Base=0x%x, size=0x%x\n", + Idx, + ExtraData->Entry[Idx].Base, + ExtraData->Entry[Idx].Size + )); + } // // Create guid hob for acpi board information -- cgit v1.1