From: "Dhaval Sharma" <dhaval@rivosinc.com>
To: Linus Liu <linus.liu@intel.com>
Cc: devel@edk2.groups.io, Benny Lin <benny.lin@intel.com>,
Gua Guo <gua.guo@intel.com>, Chasel Chiu <chasel.chiu@intel.com>,
James Lu <james.lu@intel.com>
Subject: Re: [edk2-devel] [PATCH v4 6/6] UefiPayloadPkg: Update UefiPayload driver for FDT support.
Date: Mon, 3 Jun 2024 16:57:49 +0530 [thread overview]
Message-ID: <CAAxYnhSgt869GbMb04NM4cPupFV567oc2bsM0ZN+Z6JkN3g5yw@mail.gmail.com> (raw)
In-Reply-To: <20240603021923.1356-1-linus.liu@intel.com>
[-- Attachment #1: Type: text/plain, Size: 44944 bytes --]
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 <linus.liu@intel.com> 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 <benny.lin@intel.com>
> Cc: Gua Guo <gua.guo@intel.com>
> Cc: Chasel Chiu <chasel.chiu@intel.com>
> Cc: James Lu <james.lu@intel.com>
> Cc: Dhaval Sharma <dhaval@rivosinc.com>
>
> Signed-off-by: Linus Liu <linus.liu@intel.com>
> ---
> 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 <Library/FdtLib.h>
> #include <Guid/UniversalPayloadBase.h>
> +#include <Guid/MemoryTypeInformation.h>
> +#include <Library/FdtParserLib.h>
>
> #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 <Library/MemoryAllocationLib.h>
> #include <Library/PcdLib.h>
> #include <Library/HobLib.h>
> +#include <Library/FdtLib.h>
> #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.<BR>
> -Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
> -
> -SPDX-License-Identifier: BSD-2-Clause-Patent
> + Copyright (c) 2024, Intel Corporation. All rights reserved.<BR>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
>
> @@ -15,12 +13,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
> #include <Library/MemoryAllocationLib.h>
> #include <Library/PcdLib.h>
> #include <Library/HobLib.h>
> +#include <Library/FdtLib.h>
> #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 <Library/MemoryAllocationLib.h>
> #include <Library/PcdLib.h>
> #include <Library/HobLib.h>
> +#include <Library/FdtLib.h>
> #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.<BR>
> -SPDX-License-Identifier: BSD-2-Clause-Patent
> + Copyright (c) 2024, Intel Corporation. All rights reserved.<BR>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
>
> @@ -13,10 +13,14 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
> #include <Library/MemoryAllocationLib.h>
> #include <Library/PcdLib.h>
> #include <Library/HobLib.h>
> +#include <Library/FdtLib.h>
> +#include <Library/PcdLib.h>
> #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 <UniversalPayload/UniversalPayload.h>
> #include <UniversalPayload/ExtraData.h>
> #include <UniversalPayload/SerialPortInfo.h>
> +#include <UniversalPayload/DeviceTree.h>
> #include <Guid/PcdDataBaseSignatureGuid.h>
>
> #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 {
> + <LibraryClasses>
> + 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 {
> + <LibraryClasses>
> + 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
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#119426): https://edk2.groups.io/g/devel/message/119426
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]
-=-=-=-=-=-=-=-=-=-=-=-
[-- Attachment #2: Type: text/html, Size: 52171 bytes --]
next prev parent reply other threads:[~2024-06-03 11:28 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-03 2:19 [edk2-devel] [PATCH v4 6/6] UefiPayloadPkg: Update UefiPayload driver for FDT support Linus Liu
2024-06-03 11:27 ` Dhaval Sharma [this message]
2024-06-04 17:18 ` Dhaval Sharma
2024-06-05 3:47 ` Linus Liu
2024-06-04 23:10 ` Chiu, Chasel
2024-06-05 1:34 ` [edk2-devel] FW: " Linus Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAAxYnhSgt869GbMb04NM4cPupFV567oc2bsM0ZN+Z6JkN3g5yw@mail.gmail.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox