I also believe this code needs to go through crustify etc to ensure it follows all edk2 standards? On Mon, Jun 3, 2024 at 4:57 PM Dhaval Sharma wrote: > BuildFitLoadablesFvHob: > > - Fdt variable is not initialized. > - It ONLY gets initialized if GuidHob is found. What if it is not > found? > - FdtCheckHeader still evaluating it? > > > On Mon, Jun 3, 2024 at 7:49 AM Linus Liu wrote: > >> Add FDT detection and comsume FDT when needed. >> Move some x86 specific function in the x86 folder. >> Create HandOffHob via FDT memory node. >> >> Cc: Benny Lin >> Cc: Gua Guo >> Cc: Chasel Chiu >> Cc: James Lu >> Cc: Dhaval Sharma >> >> Signed-off-by: Linus Liu >> --- >> UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.c >> | 428 +++++++++----------- >> UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFunc.c >> | 12 + >> UefiPayloadPkg/UefiPayloadEntry/Ia32/{DxeLoadFunc.c => DxeLoadFuncFit.c} >> | 32 +- >> UefiPayloadPkg/UefiPayloadEntry/MemoryAllocation.c >> | 50 +++ >> UefiPayloadPkg/UefiPayloadEntry/PrintHob.c >> | 6 +- >> UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c >> | 6 - >> UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFunc.c >> | 12 + >> UefiPayloadPkg/UefiPayloadEntry/X64/{DxeLoadFunc.c => DxeLoadFuncFit.c} >> | 31 +- >> UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf >> | 20 +- >> UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h >> | 68 ++++ >> UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf >> | 16 +- >> UefiPayloadPkg/UefiPayloadPkg.dsc >> | 29 +- >> 12 files changed, 443 insertions(+), 267 deletions(-) >> >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.c >> b/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.c >> index eb0b325369a0..813d656950d1 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.c >> +++ b/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.c >> @@ -6,6 +6,8 @@ >> #include "UefiPayloadEntry.h" >> #include >> #include >> +#include >> +#include >> >> #define MEMORY_ATTRIBUTE_MASK (EFI_RESOURCE_ATTRIBUTE_PRESENT >> | \ >> >> EFI_RESOURCE_ATTRIBUTE_INITIALIZED | \ >> @@ -23,6 +25,15 @@ >> >> EFI_RESOURCE_ATTRIBUTE_INITIALIZED | \ >> EFI_RESOURCE_ATTRIBUTE_TESTED >> ) >> >> +EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = { >> + { EfiACPIReclaimMemory, FixedPcdGet32 >> (PcdMemoryTypeEfiACPIReclaimMemory) }, >> + { EfiACPIMemoryNVS, FixedPcdGet32 >> (PcdMemoryTypeEfiACPIMemoryNVS) }, >> + { EfiReservedMemoryType, FixedPcdGet32 >> (PcdMemoryTypeEfiReservedMemoryType) }, >> + { EfiRuntimeServicesData, FixedPcdGet32 >> (PcdMemoryTypeEfiRuntimeServicesData) }, >> + { EfiRuntimeServicesCode, FixedPcdGet32 >> (PcdMemoryTypeEfiRuntimeServicesCode) }, >> + { EfiMaxMemoryType, 0 >> } >> +}; >> + >> extern VOID *mHobList; >> >> CHAR8 *mLineBuffer = NULL; >> @@ -36,6 +47,78 @@ PrintHob ( >> IN CONST VOID *HobStart >> ); >> >> +/** >> + Add HOB into HOB list >> + @param[in] Hob The HOB to be added into the HOB list. >> +**/ >> +VOID >> +AddNewHob ( >> + IN EFI_PEI_HOB_POINTERS *Hob >> + ); >> + >> +/** >> + Found the Resource Descriptor HOB that contains a range (Base, Top) >> + @param[in] HobList Hob start address >> + @param[in] Base Memory start address >> + @param[in] Top Memory end address. >> + @retval The pointer to the Resource Descriptor HOB. >> +**/ >> +EFI_HOB_RESOURCE_DESCRIPTOR * >> +FindResourceDescriptorByRange ( >> + IN VOID *HobList, >> + IN EFI_PHYSICAL_ADDRESS Base, >> + IN EFI_PHYSICAL_ADDRESS Top >> + ); >> + >> +/** >> + Find the highest below 4G memory resource descriptor, except the input >> Resource Descriptor. >> + @param[in] HobList Hob start address >> + @param[in] MinimalNeededSize Minimal needed size. >> + @param[in] ExceptResourceHob Ignore this Resource Descriptor. >> + @retval The pointer to the Resource Descriptor HOB. >> +**/ >> +EFI_HOB_RESOURCE_DESCRIPTOR * >> +FindAnotherHighestBelow4GResourceDescriptor ( >> + IN VOID *HobList, >> + IN UINTN MinimalNeededSize, >> + IN EFI_HOB_RESOURCE_DESCRIPTOR *ExceptResourceHob >> + ); >> + >> +/** >> + Check the HOB and decide if it is need inside Payload >> + Payload maintainer may make decision which HOB is need or needn't >> + Then add the check logic in the function. >> + @param[in] Hob The HOB to check >> + @retval TRUE If HOB is need inside Payload >> + @retval FALSE If HOB is needn't inside Payload >> +**/ >> +BOOLEAN >> +FitIsHobNeed ( >> + EFI_PEI_HOB_POINTERS Hob >> + ); >> + >> +/** >> + Check the HOB and decide if it is need inside Payload >> + >> + Payload maintainer may make decision which HOB is need or needn't >> + Then add the check logic in the function. >> + >> + @param[in] Hob The HOB to check >> + >> + @retval TRUE If HOB is need inside Payload >> + @retval FALSE If HOB is needn't inside Payload >> +**/ >> +BOOLEAN >> +IsHobNeed ( >> + EFI_PEI_HOB_POINTERS Hob >> + ); >> + >> +VOID >> +EFIAPI >> +ProcessLibraryConstructorList ( >> + VOID >> + ); >> + >> /** >> Find the first substring. >> @param String Point to the string where to find the substring. >> @@ -191,187 +274,6 @@ FixUpPcdDatabase ( >> return EFI_SUCCESS; >> } >> >> -/** >> - Add HOB into HOB list >> - @param[in] Hob The HOB to be added into the HOB list. >> -**/ >> -VOID >> -AddNewHob ( >> - IN EFI_PEI_HOB_POINTERS *Hob >> - ) >> -{ >> - EFI_PEI_HOB_POINTERS NewHob; >> - >> - if (Hob->Raw == NULL) { >> - return; >> - } >> - >> - NewHob.Header = CreateHob (Hob->Header->HobType, >> Hob->Header->HobLength); >> - ASSERT (NewHob.Header != NULL); >> - if (NewHob.Header == NULL) { >> - return; >> - } >> - >> - CopyMem (NewHob.Header + 1, Hob->Header + 1, Hob->Header->HobLength - >> sizeof (EFI_HOB_GENERIC_HEADER)); >> -} >> - >> -/** >> - Found the Resource Descriptor HOB that contains a range (Base, Top) >> - @param[in] HobList Hob start address >> - @param[in] Base Memory start address >> - @param[in] Top Memory end address. >> - @retval The pointer to the Resource Descriptor HOB. >> -**/ >> -EFI_HOB_RESOURCE_DESCRIPTOR * >> -FindResourceDescriptorByRange ( >> - IN VOID *HobList, >> - IN EFI_PHYSICAL_ADDRESS Base, >> - IN EFI_PHYSICAL_ADDRESS Top >> - ) >> -{ >> - EFI_PEI_HOB_POINTERS Hob; >> - EFI_HOB_RESOURCE_DESCRIPTOR *ResourceHob; >> - >> - for (Hob.Raw = (UINT8 *)HobList; !END_OF_HOB_LIST (Hob); Hob.Raw = >> GET_NEXT_HOB (Hob)) { >> - // >> - // Skip all HOBs except Resource Descriptor HOBs >> - // >> - if (GET_HOB_TYPE (Hob) != EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) { >> - continue; >> - } >> - >> - // >> - // Skip Resource Descriptor HOBs that do not describe tested system >> memory >> - // >> - ResourceHob = Hob.ResourceDescriptor; >> - if (ResourceHob->ResourceType != EFI_RESOURCE_SYSTEM_MEMORY) { >> - continue; >> - } >> - >> - if ((ResourceHob->ResourceAttribute & MEMORY_ATTRIBUTE_MASK) != >> TESTED_MEMORY_ATTRIBUTES) { >> - continue; >> - } >> - >> - // >> - // Skip Resource Descriptor HOBs that do not contain the PHIT range >> EfiFreeMemoryBottom..EfiFreeMemoryTop >> - // >> - if (Base < ResourceHob->PhysicalStart) { >> - continue; >> - } >> - >> - if (Top > (ResourceHob->PhysicalStart + >> ResourceHob->ResourceLength)) { >> - continue; >> - } >> - >> - return ResourceHob; >> - } >> - >> - return NULL; >> -} >> - >> -/** >> - Find the highest below 4G memory resource descriptor, except the input >> Resource Descriptor. >> - @param[in] HobList Hob start address >> - @param[in] MinimalNeededSize Minimal needed size. >> - @param[in] ExceptResourceHob Ignore this Resource Descriptor. >> - @retval The pointer to the Resource Descriptor HOB. >> -**/ >> -EFI_HOB_RESOURCE_DESCRIPTOR * >> -FindAnotherHighestBelow4GResourceDescriptor ( >> - IN VOID *HobList, >> - IN UINTN MinimalNeededSize, >> - IN EFI_HOB_RESOURCE_DESCRIPTOR *ExceptResourceHob >> - ) >> -{ >> - EFI_PEI_HOB_POINTERS Hob; >> - EFI_HOB_RESOURCE_DESCRIPTOR *ResourceHob; >> - EFI_HOB_RESOURCE_DESCRIPTOR *ReturnResourceHob; >> - >> - ReturnResourceHob = NULL; >> - >> - for (Hob.Raw = (UINT8 *)HobList; !END_OF_HOB_LIST (Hob); Hob.Raw = >> GET_NEXT_HOB (Hob)) { >> - // >> - // Skip all HOBs except Resource Descriptor HOBs >> - // >> - if (GET_HOB_TYPE (Hob) != EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) { >> - continue; >> - } >> - >> - // >> - // Skip Resource Descriptor HOBs that do not describe tested system >> memory >> - // >> - ResourceHob = Hob.ResourceDescriptor; >> - if (ResourceHob->ResourceType != EFI_RESOURCE_SYSTEM_MEMORY) { >> - continue; >> - } >> - >> - if ((ResourceHob->ResourceAttribute & MEMORY_ATTRIBUTE_MASK) != >> TESTED_MEMORY_ATTRIBUTES) { >> - continue; >> - } >> - >> - // >> - // Skip if the Resource Descriptor HOB equals to ExceptResourceHob >> - // >> - if (ResourceHob == ExceptResourceHob) { >> - continue; >> - } >> - >> - // >> - // Skip Resource Descriptor HOBs that are beyond 4G >> - // >> - if ((ResourceHob->PhysicalStart + ResourceHob->ResourceLength) > >> BASE_4GB) { >> - continue; >> - } >> - >> - // >> - // Skip Resource Descriptor HOBs that are too small >> - // >> - if (ResourceHob->ResourceLength < MinimalNeededSize) { >> - continue; >> - } >> - >> - // >> - // Return the topest Resource Descriptor >> - // >> - if (ReturnResourceHob == NULL) { >> - ReturnResourceHob = ResourceHob; >> - } else { >> - if (ReturnResourceHob->PhysicalStart < ResourceHob->PhysicalStart) >> { >> - ReturnResourceHob = ResourceHob; >> - } >> - } >> - } >> - >> - return ReturnResourceHob; >> -} >> - >> -/** >> - Check the HOB and decide if it is need inside Payload >> - Payload maintainer may make decision which HOB is need or needn't >> - Then add the check logic in the function. >> - @param[in] Hob The HOB to check >> - @retval TRUE If HOB is need inside Payload >> - @retval FALSE If HOB is needn't inside Payload >> -**/ >> -BOOLEAN >> -IsHobNeed ( >> - EFI_PEI_HOB_POINTERS Hob >> - ) >> -{ >> - if (Hob.Header->HobType == EFI_HOB_TYPE_HANDOFF) { >> - return FALSE; >> - } >> - >> - if (Hob.Header->HobType == EFI_HOB_TYPE_MEMORY_ALLOCATION) { >> - if (CompareGuid >> (&Hob.MemoryAllocationModule->MemoryAllocationHeader.Name, >> &gEfiHobMemoryAllocModuleGuid)) { >> - return FALSE; >> - } >> - } >> - >> - // Arrive here mean the HOB is need >> - return TRUE; >> -} >> - >> /** >> It will build Fv HOBs based on information from bootloaders. >> @param[out] DxeFv The pointer to the DXE FV in memory. >> @@ -409,21 +311,25 @@ BuildFitLoadablesFvHob ( >> >> Status = FdtCheckHeader (Fdt); >> if (EFI_ERROR (Status)) { >> + DEBUG ((DEBUG_INFO, "FdtCheckHeader UPSUPPORTED\n")); >> return EFI_UNSUPPORTED; >> } >> >> ConfigNode = FdtSubnodeOffsetNameLen (Fdt, 0, "configurations", >> (INT32)AsciiStrLen ("configurations")); >> if (ConfigNode <= 0) { >> + DEBUG ((DEBUG_INFO, "BuildFitLoadablesFvHob configurations >> EFI_NOT_FOUND\n")); >> return EFI_NOT_FOUND; >> } >> >> Config1Node = FdtSubnodeOffsetNameLen (Fdt, ConfigNode, "conf-1", >> (INT32)AsciiStrLen ("conf-1")); >> if (Config1Node <= 0) { >> + DEBUG ((DEBUG_INFO, "BuildFitLoadablesFvHob conf-1 >> EFI_NOT_FOUND\n")); >> return EFI_NOT_FOUND; >> } >> >> ImageNode = FdtSubnodeOffsetNameLen (Fdt, 0, "images", >> (INT32)AsciiStrLen ("images")); >> if (ImageNode <= 0) { >> + DEBUG ((DEBUG_INFO, "BuildFitLoadablesFvHob images >> EFI_NOT_FOUND\n")); >> return EFI_NOT_FOUND; >> } >> >> @@ -467,31 +373,25 @@ BuildFitLoadablesFvHob ( >> } >> >> /** >> - It will build HOBs based on information from bootloaders. >> - @param[in] BootloaderParameter The starting memory address of >> bootloader parameter block. >> - @param[out] DxeFv The pointer to the DXE FV in memory. >> - @retval EFI_SUCCESS If it completed successfully. >> - @retval Others If it failed to build required HOBs. >> + * >> + Create new HOB for new HOB list >> + >> + @param[in] BootloaderParameter The HOB to be added into the HOB list. >> **/ >> -EFI_STATUS >> -BuildHobs ( >> - IN UINTN BootloaderParameter, >> - OUT EFI_FIRMWARE_VOLUME_HEADER **DxeFv >> +VOID >> +CreatNewHobForHoblist ( >> + IN UINTN BootloaderParameter >> ) >> { >> - EFI_PEI_HOB_POINTERS Hob; >> - UINTN MinimalNeededSize; >> - EFI_PHYSICAL_ADDRESS FreeMemoryBottom; >> - EFI_PHYSICAL_ADDRESS FreeMemoryTop; >> - EFI_PHYSICAL_ADDRESS MemoryBottom; >> - EFI_PHYSICAL_ADDRESS MemoryTop; >> - EFI_HOB_RESOURCE_DESCRIPTOR *PhitResourceHob; >> - EFI_HOB_RESOURCE_DESCRIPTOR *ResourceHob; >> - UINT8 *GuidHob; >> - EFI_HOB_FIRMWARE_VOLUME *FvHob; >> - UNIVERSAL_PAYLOAD_ACPI_TABLE *AcpiTable; >> - ACPI_BOARD_INFO *AcpiBoardInfo; >> - EFI_HOB_HANDOFF_INFO_TABLE *HobInfo; >> + EFI_PEI_HOB_POINTERS Hob; >> + UINTN MinimalNeededSize; >> + EFI_PHYSICAL_ADDRESS FreeMemoryBottom; >> + EFI_PHYSICAL_ADDRESS FreeMemoryTop; >> + EFI_PHYSICAL_ADDRESS MemoryBottom; >> + EFI_PHYSICAL_ADDRESS MemoryTop; >> + EFI_HOB_RESOURCE_DESCRIPTOR *PhitResourceHob; >> + EFI_HOB_RESOURCE_DESCRIPTOR *ResourceHob; >> + EFI_HOB_HANDOFF_INFO_TABLE *HobInfo; >> >> Hob.Raw = (UINT8 *)BootloaderParameter; >> MinimalNeededSize = FixedPcdGet32 (PcdSystemMemoryUefiRegionSize); >> @@ -512,7 +412,7 @@ BuildHobs ( >> // >> ResourceHob = FindAnotherHighestBelow4GResourceDescriptor (Hob.Raw, >> MinimalNeededSize, NULL); >> if (ResourceHob == NULL) { >> - return EFI_NOT_FOUND; >> + return; >> } >> >> MemoryBottom = ResourceHob->PhysicalStart + >> ResourceHob->ResourceLength - MinimalNeededSize; >> @@ -542,7 +442,7 @@ BuildHobs ( >> // >> ResourceHob = FindAnotherHighestBelow4GResourceDescriptor (Hob.Raw, >> MinimalNeededSize, PhitResourceHob); >> if (ResourceHob == NULL) { >> - return EFI_NOT_FOUND; >> + return; >> } >> >> MemoryBottom = ResourceHob->PhysicalStart + >> ResourceHob->ResourceLength - MinimalNeededSize; >> @@ -553,14 +453,7 @@ BuildHobs ( >> >> HobInfo = HobConstructor ((VOID *)(UINTN)MemoryBottom, (VOID >> *)(UINTN)MemoryTop, (VOID *)(UINTN)FreeMemoryBottom, (VOID >> *)(UINTN)FreeMemoryTop); >> HobInfo->BootMode = Hob.HandoffInformationTable->BootMode; >> - // >> - // From now on, mHobList will point to the new Hob range. >> - // >> >> - // >> - // Create an empty FvHob for the DXE FV that contains DXE core. >> - // >> - BuildFvHob ((EFI_PHYSICAL_ADDRESS)0, 0); >> // >> // Since payload created new Hob, move all hobs except PHIT from boot >> loader hob list. >> // >> @@ -573,7 +466,57 @@ BuildHobs ( >> Hob.Raw = GET_NEXT_HOB (Hob); >> } >> >> - BuildFitLoadablesFvHob (DxeFv); >> + return; >> +} >> + >> +/** >> + It will build HOBs based on information from bootloaders. >> + @param[in] NewFdtBase The pointer to New FdtBase. >> + @param[out] DxeFv The pointer to the DXE FV in memory. >> + @retval EFI_SUCCESS If it completed successfully. >> + @retval Others If it failed to build required HOBs. >> +**/ >> +EFI_STATUS >> +FitBuildHobs ( >> + IN UINTN NewFdtBase, >> + OUT EFI_FIRMWARE_VOLUME_HEADER **DxeFv >> + ) >> +{ >> + UINT8 *GuidHob; >> + UINT32 FdtSize; >> + EFI_HOB_FIRMWARE_VOLUME *FvHob; >> + UNIVERSAL_PAYLOAD_ACPI_TABLE *AcpiTable; >> + ACPI_BOARD_INFO *AcpiBoardInfo; >> + UNIVERSAL_PAYLOAD_DEVICE_TREE *Fdt; >> + >> + if (FixedPcdGetBool (PcdHandOffFdtEnable)) { >> + // >> + // Back up FDT in Reserved memory region >> + // >> + >> + GuidHob = GetFirstGuidHob (&gUniversalPayloadDeviceTreeGuid); >> + if (GuidHob != NULL) { >> + Fdt = (UNIVERSAL_PAYLOAD_DEVICE_TREE *)GET_GUID_HOB_DATA >> (GuidHob); >> + if (Fdt != NULL) { >> + DEBUG ((DEBUG_INFO, "Update FDT base to reserved memory\n")); >> + FdtSize = 4 * EFI_PAGE_SIZE; >> + CopyMem ((VOID *)NewFdtBase, (VOID *)(Fdt->DeviceTreeAddress), >> FdtSize); >> + Fdt->DeviceTreeAddress = NewFdtBase; >> + } >> + } >> + } >> + >> + // >> + // To create Memory Type Information HOB >> + // >> + GuidHob = GetFirstGuidHob (&gEfiMemoryTypeInformationGuid); >> + if (GuidHob == NULL) { >> + BuildGuidDataHob ( >> + &gEfiMemoryTypeInformationGuid, >> + mDefaultMemoryTypeInformation, >> + sizeof (mDefaultMemoryTypeInformation) >> + ); >> + } >> >> // >> // Create guid hob for acpi board information >> @@ -588,6 +531,12 @@ BuildHobs ( >> } >> } >> >> + // >> + // Create an empty FvHob for the DXE FV that contains DXE core. >> + // >> + BuildFvHob ((EFI_PHYSICAL_ADDRESS)0, 0); >> + >> + BuildFitLoadablesFvHob (DxeFv); >> // >> // Update DXE FV information to first fv hob in the hob list, which >> // is the empty FvHob created before. >> @@ -600,12 +549,12 @@ BuildHobs ( >> >> /** >> Entry point to the C language phase of UEFI payload. >> - @param[in] BootloaderParameter The starting address of bootloader >> parameter block. >> + @param[in] BootloaderParameter The starting address of FDT . >> @retval It will not return if SUCCESS, and return error when >> passing bootloader parameter. >> **/ >> EFI_STATUS >> EFIAPI >> -_ModuleEntryPoint ( >> +FitUplEntryPoint ( >> IN UINTN BootloaderParameter >> ) >> { >> @@ -613,14 +562,46 @@ _ModuleEntryPoint ( >> PHYSICAL_ADDRESS DxeCoreEntryPoint; >> EFI_PEI_HOB_POINTERS Hob; >> EFI_FIRMWARE_VOLUME_HEADER *DxeFv; >> + PHYSICAL_ADDRESS HobListPtr; >> + VOID *FdtBase; >> + VOID *FdtBaseResvd; >> >> - mHobList = (VOID *)BootloaderParameter; >> - DxeFv = NULL; >> + if (FixedPcdGetBool (PcdHandOffFdtEnable)) { >> + mHobList = (VOID *)NULL; >> + } else { >> + mHobList = (VOID *)BootloaderParameter; >> + } >> + >> + DxeFv = NULL; >> // Call constructor for all libraries >> ProcessLibraryConstructorList (); >> >> DEBUG ((DEBUG_INFO, "Entering Universal Payload...\n")); >> DEBUG ((DEBUG_INFO, "sizeof(UINTN) = 0x%x\n", sizeof (UINTN))); >> + DEBUG ((DEBUG_INFO, "BootloaderParameter = 0x%x\n", >> BootloaderParameter)); >> + >> + DEBUG ((DEBUG_INFO, "Start init Hobs...\n")); >> + HobListPtr = UplInitHob ((VOID *)BootloaderParameter); >> + >> + // >> + // Found hob list node >> + // >> + if (HobListPtr != 0) { >> + FdtBase = (VOID *)BootloaderParameter; >> + if (FdtCheckHeader (FdtBase) == 0) { >> + CustomFdtNodeParser ((VOID *)FdtBase, (VOID *)HobListPtr); >> + } else { >> + CreatNewHobForHoblist (BootloaderParameter); >> + } >> + >> + FdtBaseResvd = PayloadAllocatePages (4, EfiReservedMemoryType); >> + >> + // Build HOB based on information from Bootloader >> + Status = FitBuildHobs ((UINTN)FdtBaseResvd, &DxeFv); >> + } >> + >> + // Call constructor for all libraries again since hobs were built >> + ProcessLibraryConstructorList (); >> >> DEBUG_CODE ( >> // >> @@ -629,23 +610,10 @@ _ModuleEntryPoint ( >> PrintHob (mHobList); >> ); >> >> - // Initialize floating point operating environment to be compliant >> with UEFI spec. >> - InitializeFloatingPointUnits (); >> - >> - // Build HOB based on information from Bootloader >> - Status = BuildHobs (BootloaderParameter, &DxeFv); >> - ASSERT_EFI_ERROR (Status); >> - >> FixUpPcdDatabase (DxeFv); >> Status = UniversalLoadDxeCore (DxeFv, &DxeCoreEntryPoint); >> ASSERT_EFI_ERROR (Status); >> >> - // >> - // Mask off all legacy 8259 interrupt sources >> - // >> - IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0xFF); >> - IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0xFF); >> - >> Hob.HandoffInformationTable = (EFI_HOB_HANDOFF_INFO_TABLE >> *)GetFirstHob (EFI_HOB_TYPE_HANDOFF); >> HandOffToDxeCore (DxeCoreEntryPoint, Hob); >> >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFunc.c >> b/UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFunc.c >> index 61a9f01ec9e7..cf9c03a9a8e9 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFunc.c >> +++ b/UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFunc.c >> @@ -15,12 +15,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent >> #include >> #include >> #include >> +#include >> #include "VirtualMemory.h" >> #include "UefiPayloadEntry.h" >> >> #define STACK_SIZE 0x20000 >> #define IDT_ENTRY_COUNT 32 >> >> +extern VOID *mHobList; >> + >> typedef struct _X64_IDT_TABLE { >> // >> // Reserved 4 bytes preceding PeiService and IdtTable, >> @@ -268,6 +271,15 @@ HandOffToDxeCore ( >> UINT32 Index; >> X64_IDT_TABLE *IdtTableForX64; >> >> + // Initialize floating point operating environment to be compliant >> with UEFI spec. >> + InitializeFloatingPointUnits (); >> + >> + // >> + // Mask off all legacy 8259 interrupt sources >> + // >> + IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0xFF); >> + IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0xFF); >> + >> // >> // Clear page 0 and mark it as allocated if NULL pointer detection is >> enabled. >> // >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFunc.c >> b/UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFuncFit.c >> similarity index 90% >> copy from UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFunc.c >> copy to UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFuncFit.c >> index 61a9f01ec9e7..439d5bee0b8c 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFunc.c >> +++ b/UefiPayloadPkg/UefiPayloadEntry/Ia32/DxeLoadFuncFit.c >> @@ -1,10 +1,8 @@ >> /** @file >> Ia32-specific functionality for DxeLoad. >> >> -Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.
>> -Copyright (c) 2017, AMD Incorporated. All rights reserved.
>> - >> -SPDX-License-Identifier: BSD-2-Clause-Patent >> + Copyright (c) 2024, Intel Corporation. All rights reserved.
>> + SPDX-License-Identifier: BSD-2-Clause-Patent >> >> **/ >> >> @@ -15,12 +13,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent >> #include >> #include >> #include >> +#include >> #include "VirtualMemory.h" >> #include "UefiPayloadEntry.h" >> >> #define STACK_SIZE 0x20000 >> #define IDT_ENTRY_COUNT 32 >> >> +extern VOID *mHobList; >> + >> typedef struct _X64_IDT_TABLE { >> // >> // Reserved 4 bytes preceding PeiService and IdtTable, >> @@ -268,6 +269,15 @@ HandOffToDxeCore ( >> UINT32 Index; >> X64_IDT_TABLE *IdtTableForX64; >> >> + // Initialize floating point operating environment to be compliant >> with UEFI spec. >> + InitializeFloatingPointUnits (); >> + >> + // >> + // Mask off all legacy 8259 interrupt sources >> + // >> + IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0xFF); >> + IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0xFF); >> + >> // >> // Clear page 0 and mark it as allocated if NULL pointer detection is >> enabled. >> // >> @@ -379,3 +389,17 @@ HandOffToDxeCore ( >> CpuDeadLoop (); >> } >> } >> + >> +/** >> + Entry point to the C language phase of UEFI payload. >> + @param[in] BootloaderParameter The starting address of bootloader >> parameter block. >> + @retval It will not return if SUCCESS, and return error when >> passing bootloader parameter. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +_ModuleEntryPoint ( >> + IN UINTN BootloaderParameter >> + ) >> +{ >> + return FitUplEntryPoint (BootloaderParameter); >> +} >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/MemoryAllocation.c >> b/UefiPayloadPkg/UefiPayloadEntry/MemoryAllocation.c >> index 83936ae26e68..36edca81f997 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/MemoryAllocation.c >> +++ b/UefiPayloadPkg/UefiPayloadEntry/MemoryAllocation.c >> @@ -10,6 +10,56 @@ >> >> #include "UefiPayloadEntry.h" >> >> +/** >> + Allocates one or more pages of type EfiBootServicesData. >> + >> + Allocates the number of pages of MemoryType and returns a pointer to >> the >> + allocated buffer. The buffer returned is aligned on a 4KB boundary. >> + If Pages is 0, then NULL is returned. >> + If there is not enough memory availble to satisfy the request, then >> NULL >> + is returned. >> + >> + @param Pages The number of 4 KB pages to allocate. >> + @param MemoryType The MemoryType >> + @return A pointer to the allocated buffer or NULL if allocation fails. >> +**/ >> +VOID * >> +EFIAPI >> +PayloadAllocatePages ( >> + IN UINTN Pages, >> + IN EFI_MEMORY_TYPE MemoryType >> + ) >> +{ >> + EFI_PEI_HOB_POINTERS Hob; >> + EFI_PHYSICAL_ADDRESS Offset; >> + EFI_HOB_HANDOFF_INFO_TABLE *HobTable; >> + >> + Hob.Raw = GetHobList (); >> + HobTable = Hob.HandoffInformationTable; >> + >> + if (Pages == 0) { >> + return NULL; >> + } >> + >> + // Make sure allocation address is page alligned. >> + Offset = HobTable->EfiFreeMemoryTop & EFI_PAGE_MASK; >> + if (Offset != 0) { >> + HobTable->EfiFreeMemoryTop -= Offset; >> + } >> + >> + // >> + // Check available memory for the allocation >> + // >> + if (HobTable->EfiFreeMemoryTop - ((Pages * EFI_PAGE_SIZE) + sizeof >> (EFI_HOB_MEMORY_ALLOCATION)) < HobTable->EfiFreeMemoryBottom) { >> + return NULL; >> + } >> + >> + HobTable->EfiFreeMemoryTop -= Pages * EFI_PAGE_SIZE; >> + BuildMemoryAllocationHob (HobTable->EfiFreeMemoryTop, Pages * >> EFI_PAGE_SIZE, MemoryType); >> + >> + return (VOID *)(UINTN)HobTable->EfiFreeMemoryTop; >> +} >> + >> /** >> Allocates one or more pages of type EfiBootServicesData. >> >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/PrintHob.c >> b/UefiPayloadPkg/UefiPayloadEntry/PrintHob.c >> index b63e93c07ec2..153d1b00f637 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/PrintHob.c >> +++ b/UefiPayloadPkg/UefiPayloadEntry/PrintHob.c >> @@ -169,13 +169,13 @@ PrintMemoryAllocationHob ( >> } >> >> /** >> - Print the information in Resource Discriptor Hob. >> + Print the information in Resource Descriptor Hob. >> @param[in] HobStart A pointer to HOB of type >> EFI_HOB_TYPE_RESOURCE_DESCRIPTOR. >> @param[in] HobLength The Length in bytes of HOB of type >> EFI_HOB_TYPE_RESOURCE_DESCRIPTOR. >> @retval EFI_SUCCESS If it completed successfully. >> **/ >> EFI_STATUS >> -PrintResourceDiscriptorHob ( >> +PrintResourceDescriptorHob ( >> IN VOID *HobStart, >> IN UINT16 HobLength >> ) >> @@ -620,7 +620,7 @@ PrintFv3Hob ( >> HOB_PRINT_HANDLER_TABLE mHobHandles[] = { >> { EFI_HOB_TYPE_HANDOFF, "EFI_HOB_TYPE_HANDOFF", >> PrintHandOffHob }, >> { EFI_HOB_TYPE_MEMORY_ALLOCATION, "EFI_HOB_TYPE_MEMORY_ALLOCATION", >> PrintMemoryAllocationHob }, >> - { EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, >> "EFI_HOB_TYPE_RESOURCE_DESCRIPTOR", PrintResourceDiscriptorHob }, >> + { EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, >> "EFI_HOB_TYPE_RESOURCE_DESCRIPTOR", PrintResourceDescriptorHob }, >> { EFI_HOB_TYPE_GUID_EXTENSION, "EFI_HOB_TYPE_GUID_EXTENSION", >> PrintGuidHob }, >> { EFI_HOB_TYPE_FV, "EFI_HOB_TYPE_FV", >> PrintFvHob }, >> { EFI_HOB_TYPE_CPU, "EFI_HOB_TYPE_CPU", >> PrintCpuHob }, >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c >> b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c >> index f37c00fad774..5b864eeefe10 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c >> +++ b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c >> @@ -486,12 +486,6 @@ _ModuleEntryPoint ( >> Status = UniversalLoadDxeCore (DxeFv, &DxeCoreEntryPoint); >> ASSERT_EFI_ERROR (Status); >> >> - // >> - // Mask off all legacy 8259 interrupt sources >> - // >> - IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0xFF); >> - IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0xFF); >> - >> Hob.HandoffInformationTable = (EFI_HOB_HANDOFF_INFO_TABLE >> *)GetFirstHob (EFI_HOB_TYPE_HANDOFF); >> HandOffToDxeCore (DxeCoreEntryPoint, Hob); >> >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFunc.c >> b/UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFunc.c >> index 346e3feb0459..6c3603f12098 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFunc.c >> +++ b/UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFunc.c >> @@ -13,10 +13,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent >> #include >> #include >> #include >> +#include >> #include "X64/VirtualMemory.h" >> #include "UefiPayloadEntry.h" >> #define STACK_SIZE 0x20000 >> >> +extern VOID *mHobList; >> + >> /** >> Transfers control to DxeCore. >> >> @@ -40,6 +43,15 @@ HandOffToDxeCore ( >> VOID *GhcbBase; >> UINTN GhcbSize; >> >> + // Initialize floating point operating environment to be compliant >> with UEFI spec. >> + InitializeFloatingPointUnits (); >> + >> + // >> + // Mask off all legacy 8259 interrupt sources >> + // >> + IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0xFF); >> + IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0xFF); >> + >> // >> // Clear page 0 and mark it as allocated if NULL pointer detection is >> enabled. >> // >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFunc.c >> b/UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFuncFit.c >> similarity index 74% >> copy from UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFunc.c >> copy to UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFuncFit.c >> index 346e3feb0459..35b52a911df3 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFunc.c >> +++ b/UefiPayloadPkg/UefiPayloadEntry/X64/DxeLoadFuncFit.c >> @@ -1,8 +1,8 @@ >> /** @file >> x64-specifc functionality for DxeLoad. >> >> -Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.
>> -SPDX-License-Identifier: BSD-2-Clause-Patent >> + Copyright (c) 2024, Intel Corporation. All rights reserved.
>> + SPDX-License-Identifier: BSD-2-Clause-Patent >> >> **/ >> >> @@ -13,10 +13,14 @@ SPDX-License-Identifier: BSD-2-Clause-Patent >> #include >> #include >> #include >> +#include >> +#include >> #include "X64/VirtualMemory.h" >> #include "UefiPayloadEntry.h" >> #define STACK_SIZE 0x20000 >> >> +extern VOID *mHobList; >> + >> /** >> Transfers control to DxeCore. >> >> @@ -40,6 +44,15 @@ HandOffToDxeCore ( >> VOID *GhcbBase; >> UINTN GhcbSize; >> >> + // Initialize floating point operating environment to be compliant >> with UEFI spec. >> + InitializeFloatingPointUnits (); >> + >> + // >> + // Mask off all legacy 8259 interrupt sources >> + // >> + IoWrite8 (LEGACY_8259_MASK_REGISTER_MASTER, 0xFF); >> + IoWrite8 (LEGACY_8259_MASK_REGISTER_SLAVE, 0xFF); >> + >> // >> // Clear page 0 and mark it as allocated if NULL pointer detection is >> enabled. >> // >> @@ -106,3 +119,17 @@ HandOffToDxeCore ( >> TopOfStack >> ); >> } >> + >> +/** >> + Entry point to the C language phase of UEFI payload. >> + @param[in] BootloaderParameter The starting address of bootloader >> parameter block. >> + @retval It will not return if SUCCESS, and return error when >> passing bootloader parameter. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +_ModuleEntryPoint ( >> + IN UINTN BootloaderParameter >> + ) >> +{ >> + return FitUplEntryPoint (BootloaderParameter); >> +} >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf >> b/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf >> index b87a0989eee3..c87e674f7cbd 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf >> +++ b/UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf >> @@ -30,13 +30,13 @@ >> [Sources.Ia32] >> X64/VirtualMemory.h >> X64/VirtualMemory.c >> - Ia32/DxeLoadFunc.c >> + Ia32/DxeLoadFuncFit.c >> Ia32/IdtVectorAsm.nasm >> >> [Sources.X64] >> X64/VirtualMemory.h >> X64/VirtualMemory.c >> - X64/DxeLoadFunc.c >> + X64/DxeLoadFuncFit.c >> >> [Packages] >> MdePkg/MdePkg.dec >> @@ -54,6 +54,8 @@ >> PeCoffLib >> CpuLib >> FdtLib >> + CustomFdtNodeParserLib >> + PcdLib >> >> [Guids] >> gEfiMemoryTypeInformationGuid >> @@ -71,6 +73,7 @@ >> gUniversalPayloadAcpiTableGuid >> gUniversalPayloadPciRootBridgeInfoGuid >> gUniversalPayloadSmbios3TableGuid >> + gUniversalPayloadDeviceTreeGuid >> >> [FeaturePcd.IA32] >> gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## >> CONSUMES >> @@ -78,7 +81,6 @@ >> [FeaturePcd.X64] >> gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables ## >> CONSUMES >> >> - >> [Pcd.IA32,Pcd.X64] >> gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile >> gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable >> ## SOMETIMES_CONSUMES >> @@ -88,11 +90,19 @@ >> gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard >> ## CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase >> ## CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbSize >> ## CONSUMES >> - >> gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemBase >> gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize >> gUefiPayloadPkgTokenSpaceGuid.PcdSystemMemoryUefiRegionSize >> - >> gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack ## >> SOMETIMES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy ## >> SOMETIMES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy ## >> SOMETIMES_CONSUMES >> + gUefiPayloadPkgTokenSpaceGuid.PcdHandOffFdtEnable >> + gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS >> + gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory >> + gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType >> + gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData >> + gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode >> + >> +[BuildOptions] >> + MSFT:*_*_*_CC_FLAGS = /wd4244 /wd4305 >> + GCC:*_*_*_CC_FLAGS = -Wno-error=pointer-to-int-cast >> -Wno-error=int-to-pointer-cast >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h >> b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h >> index 80ccc5072c55..09fce8dbcf35 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h >> +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h >> @@ -35,6 +35,7 @@ >> #include >> #include >> #include >> +#include >> #include >> >> #define LEGACY_8259_MASK_REGISTER_MASTER 0x21 >> @@ -134,6 +135,31 @@ UniversalLoadDxeCore ( >> OUT PHYSICAL_ADDRESS *DxeCoreEntryPoint >> ); >> >> +/** >> + It will Parse FDT -node based on information. >> + @param[in] FdtBase The starting memory address of FdtBase >> + @retval HobList The base address of Hoblist. >> + >> +**/ >> +UINT64 >> +EFIAPI >> +FdtNodeParser ( >> + IN VOID *FdtBase >> + ); >> + >> +/** >> + It will Parse FDT -custom node based on information. >> + @param[in] FdtBase The starting memory address of FdtBase >> + @param[in] HostList The starting memory address of New Hob list. >> + >> +**/ >> +UINTN >> +EFIAPI >> +CustomFdtNodeParser ( >> + IN VOID *FdtBase, >> + IN VOID *HostList >> + ); >> + >> /** >> Transfers control to DxeCore. >> >> @@ -206,4 +232,46 @@ BuildHobFromAcpi ( >> IN UINT64 AcpiTableBase >> ); >> >> +/** >> + Allocates one or more pages . >> + >> + Allocates the number of pages of MemoryType and returns a pointer to >> the >> + allocated buffer. The buffer returned is aligned on a 4KB boundary. >> + If Pages is 0, then NULL is returned. >> + If there is not enough memory availble to satisfy the request, then >> NULL >> + is returned. >> + >> + @param Pages The number of 4 KB pages to allocate. >> + @param MemoryType The Memorytype >> + @return A pointer to the allocated buffer or NULL if allocation fails. >> +**/ >> +VOID * >> +EFIAPI >> +PayloadAllocatePages ( >> + IN UINTN Pages, >> + IN EFI_MEMORY_TYPE MemoryType >> + ); >> + >> +/** >> + Entry point to the C language phase of UEFI payload. >> + @param[in] FdtPrt The starting address of FDT . >> + @retval It will not return if SUCCESS, and return error when >> passing bootloader parameter. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +FitUplEntryPoint ( >> + IN UINTN BootloaderParameter >> + ); >> + >> +/** >> + Entry point to the C language phase of UEFI payload. >> + @param[in] BootloaderParameter The starting address of bootloader >> parameter block. >> + @retval It will not return if SUCCESS, and return error when >> passing bootloader parameter. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +UplEntryPoint ( >> + IN UINTN BootloaderParameter >> + ); >> + >> #endif >> diff --git a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf >> b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf >> index a62da5c7059d..be91f7be2819 100644 >> --- a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf >> +++ b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf >> @@ -6,44 +6,37 @@ >> # SPDX-License-Identifier: BSD-2-Clause-Patent >> # >> ## >> - >> [Defines] >> INF_VERSION = 1.30 >> BASE_NAME = UniversalPayloadEntry >> FILE_GUID = D4F0F269-1209-4A66-8039-C4D5A700EA4E >> MODULE_TYPE = SEC >> VERSION_STRING = 1.0 >> - >> # >> # The following information is for reference only and not required by >> the build tools. >> # >> # VALID_ARCHITECTURES = IA32 X64 >> # >> - >> [Sources] >> UniversalPayloadEntry.c >> LoadDxeCore.c >> MemoryAllocation.c >> PrintHob.c >> AcpiTable.c >> - >> [Sources.Ia32] >> X64/VirtualMemory.h >> X64/VirtualMemory.c >> Ia32/DxeLoadFunc.c >> Ia32/IdtVectorAsm.nasm >> - >> [Sources.X64] >> X64/VirtualMemory.h >> X64/VirtualMemory.c >> X64/DxeLoadFunc.c >> - >> [Packages] >> MdePkg/MdePkg.dec >> MdeModulePkg/MdeModulePkg.dec >> UefiCpuPkg/UefiCpuPkg.dec >> UefiPayloadPkg/UefiPayloadPkg.dec >> - >> [LibraryClasses] >> BaseMemoryLib >> DebugLib >> @@ -69,14 +62,12 @@ >> gUniversalPayloadAcpiTableGuid >> gUniversalPayloadPciRootBridgeInfoGuid >> gUniversalPayloadSmbios3TableGuid >> - >> + gUniversalPayloadBaseGuid >> + gUniversalPayloadDeviceTreeGuid >> [FeaturePcd.IA32] >> gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## >> CONSUMES >> - >> [FeaturePcd.X64] >> gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildPageTables ## >> CONSUMES >> - >> - >> [Pcd.IA32,Pcd.X64] >> gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile >> gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable >> ## SOMETIMES_CONSUMES >> @@ -86,12 +77,9 @@ >> gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard >> ## CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase >> ## CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbSize >> ## CONSUMES >> - >> gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemBase >> gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize >> gUefiPayloadPkgTokenSpaceGuid.PcdSystemMemoryUefiRegionSize >> - >> gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack ## >> SOMETIMES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy ## >> SOMETIMES_CONSUMES >> gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy ## >> SOMETIMES_CONSUMES >> - >> diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc >> b/UefiPayloadPkg/UefiPayloadPkg.dsc >> index 2860a659f6a7..779f74da7171 100644 >> --- a/UefiPayloadPkg/UefiPayloadPkg.dsc >> +++ b/UefiPayloadPkg/UefiPayloadPkg.dsc >> @@ -55,7 +55,7 @@ >> # ELF: Build UniversalPayload file as UniversalPayload.elf >> # FIT: Build UniversalPayload file as UniversalPayload.fit >> # >> - DEFINE UNIVERSAL_PAYLOAD = FALSE >> + DEFINE UNIVERSAL_PAYLOAD = TRUE >> DEFINE UNIVERSAL_PAYLOAD_FORMAT = ELF >> >> # >> @@ -226,6 +226,7 @@ >> OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf >> RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf >> HobLib|UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.inf >> + >> CustomFdtNodeParserLib|UefiPayloadPkg/Library/CustomFdtNodeParserNullLib/CustomFdtNodeParserNullLib.inf >> >> # >> # UEFI & PI >> @@ -470,6 +471,8 @@ >> gEfiMdeModulePkgTokenSpaceGuid.PcdVpdBaseAddress|0x0 >> gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE >> gEfiMdeModulePkgTokenSpaceGuid.PcdUse1GPageTable|TRUE >> + gUefiPayloadPkgTokenSpaceGuid.PcdHandOffFdtEnable|TRUE >> + >> >> gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, >> 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, >> 0x23, 0x31 } >> gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile|{ 0x57, 0x72, 0xcf, >> 0x80, 0xab, 0x87, 0xf9, 0x47, 0xa3, 0xfe, 0xD5, 0x0B, 0x76, 0xd8, 0x95, >> 0x41 } >> @@ -513,7 +516,15 @@ >> !endif >> !endif >> >> + >> [PcdsPatchableInModule.X64] >> + # >> + # The following parameters are set by Library/PlatformHookLib >> + # >> + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|FALSE >> + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x3F8 >> + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate|$(BAUD_RATE) >> + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride|1 >> !if $(NETWORK_DRIVER_ENABLE) == TRUE >> gEfiNetworkPkgTokenSpaceGuid.PcdAllowHttpConnections|TRUE >> !endif >> @@ -635,7 +646,13 @@ >> !if $(UNIVERSAL_PAYLOAD_FORMAT) == "ELF" >> UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf >> !elseif $(UNIVERSAL_PAYLOAD_FORMAT) == "FIT" >> - UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf >> + UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf { >> + >> + FdtLib|MdePkg/Library/BaseFdtLib/BaseFdtLib.inf >> + >> CustomFdtNodeParserLib|UefiPayloadPkg/Library/CustomFdtNodeParserLib/CustomFdtNodeParserLib.inf >> + NULL|UefiPayloadPkg/Library/FdtParserLib/FdtParseLib.inf >> + NULL|UefiPayloadPkg/Library/HobParseLib/HobParseLib.inf >> + } >> !else >> UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf >> !endif >> @@ -648,7 +665,13 @@ >> !if $(UNIVERSAL_PAYLOAD_FORMAT) == "ELF" >> UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf >> !elseif $(UNIVERSAL_PAYLOAD_FORMAT) == "FIT" >> - UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf >> + UefiPayloadPkg/UefiPayloadEntry/FitUniversalPayloadEntry.inf { >> + >> + FdtLib|MdePkg/Library/BaseFdtLib/BaseFdtLib.inf >> + >> CustomFdtNodeParserLib|UefiPayloadPkg/Library/CustomFdtNodeParserLib/CustomFdtNodeParserLib.inf >> + NULL|UefiPayloadPkg/Library/FdtParserLib/FdtParseLib.inf >> + NULL|UefiPayloadPkg/Library/HobParseLib/HobParseLib.inf >> + } >> !else >> UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf >> !endif >> -- >> 2.39.2.windows.1 >> >> > > -- > Thanks! > =D > -- Thanks! =D -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#119451): https://edk2.groups.io/g/devel/message/119451 Mute This Topic: https://groups.io/mt/106455168/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-