[edk2-devel] [PATCH v1 6/6] UefiPayloadPkg: Update UefiPayload driver for FDT support.

2024-05-23 Thread Linus Liu
Add FDT detection and comsume FDT when needed.
Move some x86 speciifc function in the x86 folder.
Create HandOffHbo 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]  HobThe 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] HobListHob start address
+  @param[in] Base   Memory start address
+  @param[in] TopMemory 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 UINTNMinimalNeededSize,
+  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  StringPoint to the string where to find the substring.
@@ -191,187 +274,6 @@ FixUpPcdDatabase (
   return EFI_SUCCESS;
 }
 
-/**
-  Add HOB into HOB list
- 

[edk2-devel] [PATCH v1 6/6] UefiPayloadPkg: Update UefiPayload driver for FDT support.

2024-05-23 Thread Linus Liu
Add FDT detection and comsume FDT when needed.
Move some x86 speciifc function in the x86 folder.
Create HandOffHbo 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]  HobThe 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] HobListHob start address
+  @param[in] Base   Memory start address
+  @param[in] TopMemory 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 UINTNMinimalNeededSize,
+  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  StringPoint to the string where to find the substring.
@@ -191,187 +274,6 @@ FixUpPcdDatabase (
   return EFI_SUCCESS;
 }
 
-/**
-  Add HOB into HOB list
-