[edk2-devel] [`edk2-devel][PATCH] UefiPayloadPkg: Remove asm code and sharing libraries

Guo Dong posted 1 patch 2 years, 7 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/edk2 tags/patchew/20210929054903.1188-1-guo.dong@intel.com
UefiPayloadPkg/Include/Library/BlParseLib.h                                |   5 ++---
UefiPayloadPkg/Library/CbParseLib/CbParseLib.c                             |   6 ++++--
UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf                           |   4 ++--
UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c                   | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------
UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf                 |  18 ++++++++++--------
UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf                         |   4 ++--
UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.c   |  95 -----------------------------------------------------------------------------------------------
UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf |  40 ----------------------------------------
UefiPayloadPkg/UefiPayloadEntry/Ia32/SecEntry.nasm                         |  46 ----------------------------------------------
UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c                         |  30 +++++++++++++++++++++++-------
UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h                         |   1 +
UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf                       |   5 ++---
UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf                  |   1 -
UefiPayloadPkg/UefiPayloadEntry/X64/SecEntry.nasm                          |  47 -----------------------------------------------
UefiPayloadPkg/UefiPayloadPkg.dec                                          |   4 ++--
UefiPayloadPkg/UefiPayloadPkg.dsc                                          |  10 +---------
16 files changed, 105 insertions(+), 321 deletions(-)
[edk2-devel] [`edk2-devel][PATCH] UefiPayloadPkg: Remove asm code and sharing libraries
Posted by Guo Dong 2 years, 7 months ago
From: Guo Dong <guo.dong@intel.com>

Remove asm code used for payload entry.
Use patchable PCD instead a fixed PCD PcdPayloadStackTop to avoid
potential conflict.

Based on the removal, use same HobLib regardless UNIVERSAL_PAYLOAD.
Use same PlatformHookLib regardless UNIVERSAL_PAYLOAD. The original
PlatformHookLib was removed and UniversalPayloadPlatformHookLib was
rename to new PlatformHookLib.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Maurice Ma <maurice.ma@intel.com>
Cc: Benjamin You <benjamin.you@intel.com>
Signed-off-by: Guo Dong <guo.dong@intel.com>
---
 UefiPayloadPkg/Include/Library/BlParseLib.h                                |   5 ++---
 UefiPayloadPkg/Library/CbParseLib/CbParseLib.c                             |   6 ++++--
 UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf                           |   4 ++--
 UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c                   | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------
 UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf                 |  18 ++++++++++--------
 UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf                         |   4 ++--
 UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.c   |  95 -----------------------------------------------------------------------------------------------
 UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf |  40 ----------------------------------------
 UefiPayloadPkg/UefiPayloadEntry/Ia32/SecEntry.nasm                         |  46 ----------------------------------------------
 UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c                         |  30 +++++++++++++++++++++++-------
 UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h                         |   1 +
 UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf                       |   5 ++---
 UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf                  |   1 -
 UefiPayloadPkg/UefiPayloadEntry/X64/SecEntry.nasm                          |  47 -----------------------------------------------
 UefiPayloadPkg/UefiPayloadPkg.dec                                          |   4 ++--
 UefiPayloadPkg/UefiPayloadPkg.dsc                                          |  10 +---------
 16 files changed, 105 insertions(+), 321 deletions(-)

diff --git a/UefiPayloadPkg/Include/Library/BlParseLib.h b/UefiPayloadPkg/Include/Library/BlParseLib.h
index 20a526d15c..1244190d4e 100644
--- a/UefiPayloadPkg/Include/Library/BlParseLib.h
+++ b/UefiPayloadPkg/Include/Library/BlParseLib.h
@@ -2,7 +2,7 @@
   This library will parse the coreboot table in memory and extract those required
   information.
 
-  Copyright (c) 2014 - 2020, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -16,8 +16,7 @@
 #ifndef __BOOTLOADER_PARSE_LIB__
 #define __BOOTLOADER_PARSE_LIB__
 
-#define GET_BOOTLOADER_PARAMETER()      (*(UINTN *)(UINTN)(PcdGet32(PcdPayloadStackTop) - sizeof(UINT64)))
-#define SET_BOOTLOADER_PARAMETER(Value) GET_BOOTLOADER_PARAMETER()=Value
+#define GET_BOOTLOADER_PARAMETER()      PcdGet64 (PcdBootloaderParameter)
 
 typedef RETURN_STATUS \
         (*BL_MEM_INFO_CALLBACK) (MEMROY_MAP_ENTRY *MemoryMapEntry, VOID *Param);
diff --git a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c
index 4e23cff50e..4f90687e40 100644
--- a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c
+++ b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c
@@ -2,7 +2,7 @@
   This library will parse the coreboot table in memory and extract those required
   information.
 
-  Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -140,6 +140,7 @@ GetParameterBase (
   UINT8              *TmpPtr;
   UINT8              *CbTablePtr;
   UINTN              Idx;
+  EFI_STATUS         Status;
 
   //
   // coreboot could pass coreboot table to UEFI payload
@@ -193,7 +194,8 @@ GetParameterBase (
     return NULL;
   }
 
-  SET_BOOTLOADER_PARAMETER ((UINT32)(UINTN)CbTablePtr);
+  PcdSet64S (PcdBootloaderParameter, (UINTN)CbTablePtr);
+  ASSERT_EFI_STATUS (Status);
 
   return CbTablePtr;
 }
diff --git a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf
index 52e3ad2054..cf81697703 100644
--- a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf
+++ b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf
@@ -1,7 +1,7 @@
 ## @file
 #  Coreboot Table Parse Library.
 #
-#  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
 #  SPDX-License-Identifier: BSD-2-Clause-Patent
 #
 ##
@@ -36,4 +36,4 @@
   PcdLib
 
 [Pcd]
-  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop
+  gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter
diff --git a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
index d8453e5957..004fcd8b7c 100644
--- a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
+++ b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
@@ -1,29 +1,34 @@
 /** @file
   Platform Hook Library instance for UART device.
 
-  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
 
 #include <Base.h>
-#include <Uefi/UefiBaseType.h>
-#include <Library/PciLib.h>
+#include <PiDxe.h>
+#include <UniversalPayload/SerialPortInfo.h>
 #include <Library/PlatformHookLib.h>
-#include <Library/BlParseLib.h>
 #include <Library/PcdLib.h>
+#include <Library/HobLib.h>
 
-typedef struct {
-  UINT16  VendorId;          ///< Vendor ID to match the PCI device.  The value 0xFFFF terminates the list of entries.
-  UINT16  DeviceId;          ///< Device ID to match the PCI device
-  UINT32  ClockRate;         ///< UART clock rate.  Set to 0 for default clock rate of 1843200 Hz
-  UINT64  Offset;            ///< The byte offset into to the BAR
-  UINT8   BarIndex;          ///< Which BAR to get the UART base address
-  UINT8   RegisterStride;    ///< UART register stride in bytes.  Set to 0 for default register stride of 1 byte.
-  UINT16  ReceiveFifoDepth;  ///< UART receive FIFO depth in bytes. Set to 0 for a default FIFO depth of 16 bytes.
-  UINT16  TransmitFifoDepth; ///< UART transmit FIFO depth in bytes. Set to 0 for a default FIFO depth of 16 bytes.
-  UINT8   Reserved[2];
-} PCI_SERIAL_PARAMETER;
+
+/** Library Constructor
+
+  @retval RETURN_SUCCESS  Success.
+**/
+EFI_STATUS
+EFIAPI
+PlatformHookSerialPortConstructor (
+  VOID
+  )
+{
+  // Nothing to do here. This constructor is added to
+  // enable the chain of constructor invocation for
+  // dependent libraries.
+  return RETURN_SUCCESS;
+}
 
 /**
   Performs platform specific initialization required for the CPU to access
@@ -42,52 +47,49 @@ PlatformHookSerialPortInitialize (
   VOID
   )
 {
-  RETURN_STATUS         Status;
-  UINT32                DeviceVendor;
-  PCI_SERIAL_PARAMETER  *SerialParam;
-  SERIAL_PORT_INFO      SerialPortInfo;
-
-  Status = ParseSerialInfo (&SerialPortInfo);
-  if (RETURN_ERROR (Status)) {
-    return Status;
-  }
+  RETURN_STATUS                       Status;
+  UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO  *SerialPortInfo;
+  UINT8                               *GuidHob;
+  UNIVERSAL_PAYLOAD_GENERIC_HEADER    *GenericHeader;
 
-  if (SerialPortInfo.Type == PLD_SERIAL_TYPE_MEMORY_MAPPED) {
-    Status = PcdSetBoolS (PcdSerialUseMmio, TRUE);
-  } else { //IO
-    Status = PcdSetBoolS (PcdSerialUseMmio, FALSE);
-  }
-  if (RETURN_ERROR (Status)) {
-    return Status;
-  }
-  Status = PcdSet64S (PcdSerialRegisterBase, SerialPortInfo.BaseAddr);
-  if (RETURN_ERROR (Status)) {
-    return Status;
+  GuidHob = GetFirstGuidHob (&gUniversalPayloadSerialPortInfoGuid);
+  if (GuidHob == NULL) {
+    return EFI_NOT_FOUND;
   }
 
-  Status = PcdSet32S (PcdSerialRegisterStride, SerialPortInfo.RegWidth);
-  if (RETURN_ERROR (Status)) {
-    return Status;
+  GenericHeader = (UNIVERSAL_PAYLOAD_GENERIC_HEADER *) GET_GUID_HOB_DATA (GuidHob);
+  if ((sizeof (UNIVERSAL_PAYLOAD_GENERIC_HEADER) > GET_GUID_HOB_DATA_SIZE (GuidHob)) || (GenericHeader->Length > GET_GUID_HOB_DATA_SIZE (GuidHob))) {
+    return EFI_NOT_FOUND;
   }
 
-  Status = PcdSet32S (PcdSerialBaudRate, SerialPortInfo.Baud);
-  if (RETURN_ERROR (Status)) {
-    return Status;
-  }
+  if (GenericHeader->Revision == UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO_REVISION) {
+    SerialPortInfo = (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO *) GET_GUID_HOB_DATA (GuidHob);
+    if (GenericHeader->Length < UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO, RegisterBase)) {
+      //
+      // Return if can't find the Serial Port Info Hob with enough length
+      //
+      return EFI_NOT_FOUND;
+    }
 
-  Status = PcdSet32S (PcdSerialClockRate, SerialPortInfo.InputHertz);
-  if (RETURN_ERROR (Status)) {
-    return Status;
-  }
+    Status = PcdSetBoolS (PcdSerialUseMmio, SerialPortInfo->UseMmio);
+    if (RETURN_ERROR (Status)) {
+      return Status;
+    }
+    Status = PcdSet64S (PcdSerialRegisterBase, SerialPortInfo->RegisterBase);
+    if (RETURN_ERROR (Status)) {
+      return Status;
+    }
+    Status = PcdSet32S (PcdSerialRegisterStride, SerialPortInfo->RegisterStride);
+    if (RETURN_ERROR (Status)) {
+      return Status;
+    }
+    Status = PcdSet32S (PcdSerialBaudRate, SerialPortInfo->BaudRate);
+    if (RETURN_ERROR (Status)) {
+      return Status;
+    }
 
-  if (SerialPortInfo.UartPciAddr >= 0x80000000) {
-    DeviceVendor = PciRead32 (SerialPortInfo.UartPciAddr & 0x0ffff000);
-    SerialParam  = PcdGetPtr(PcdPciSerialParameters);
-    SerialParam->VendorId  = (UINT16)DeviceVendor;
-    SerialParam->DeviceId  = DeviceVendor >> 16;
-    SerialParam->ClockRate = SerialPortInfo.InputHertz;
-    SerialParam->RegisterStride = (UINT8)SerialPortInfo.RegWidth;
+    return RETURN_SUCCESS;
   }
 
-  return RETURN_SUCCESS;
+  return EFI_NOT_FOUND;
 }
diff --git a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
index 3eeb94d8fa..7ac6bfa1b1 100644
--- a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
+++ b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
@@ -1,7 +1,7 @@
 ## @file
-#  Platform Hook Library instance for UART device.
+#  Platform Hook Library instance for UART device for Universal Payload.
 #
-#  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
 #
 #  SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -10,29 +10,31 @@
 [Defines]
   INF_VERSION                    = 0x00010005
   BASE_NAME                      = PlatformHookLib
-  FILE_GUID                      = 40A2CBC6-CFB8-447b-A90E-198E88FD345E
+  FILE_GUID                      = 807E05AB-9411-429F-97F0-FE425BF6B094
   MODULE_TYPE                    = BASE
   VERSION_STRING                 = 1.0
   LIBRARY_CLASS                  = PlatformHookLib
-  CONSTRUCTOR                    = PlatformHookSerialPortInitialize
+  CONSTRUCTOR                    = PlatformHookSerialPortConstructor
 
 [Sources]
   PlatformHookLib.c
 
 [LibraryClasses]
-  BlParseLib
   PcdLib
-  PciLib
+  BaseLib
+  HobLib
+  DxeHobListLib
 
 [Packages]
   MdePkg/MdePkg.dec
   MdeModulePkg/MdeModulePkg.dec
   UefiPayloadPkg/UefiPayloadPkg.dec
 
+[Guids]
+  gUniversalPayloadSerialPortInfoGuid
+
 [Pcd]
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio         ## PRODUCES
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase    ## PRODUCES
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate        ## PRODUCES
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride  ## PRODUCES
-  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate       ## PRODUCES
-  gEfiMdeModulePkgTokenSpaceGuid.PcdPciSerialParameters   ## PRODUCES
diff --git a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf
index 9ce2864f9f..665a5a8adc 100644
--- a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf
+++ b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf
@@ -1,7 +1,7 @@
 ## @file
 #  Slim Bootloader parse library.
 #
-#  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2019 - 2021, Intel Corporation. All rights reserved.<BR>
 #  SPDX-License-Identifier: BSD-2-Clause-Patent
 #
 ##
@@ -43,4 +43,4 @@
   gEfiGraphicsDeviceInfoHobGuid
 
 [Pcd]
-  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop
+  gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter
diff --git a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.c b/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.c
deleted file mode 100644
index 004fcd8b7c..0000000000
--- a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/** @file
-  Platform Hook Library instance for UART device.
-
-  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
-  SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-#include <PiDxe.h>
-#include <UniversalPayload/SerialPortInfo.h>
-#include <Library/PlatformHookLib.h>
-#include <Library/PcdLib.h>
-#include <Library/HobLib.h>
-
-
-/** Library Constructor
-
-  @retval RETURN_SUCCESS  Success.
-**/
-EFI_STATUS
-EFIAPI
-PlatformHookSerialPortConstructor (
-  VOID
-  )
-{
-  // Nothing to do here. This constructor is added to
-  // enable the chain of constructor invocation for
-  // dependent libraries.
-  return RETURN_SUCCESS;
-}
-
-/**
-  Performs platform specific initialization required for the CPU to access
-  the hardware associated with a SerialPortLib instance.  This function does
-  not initialize the serial port hardware itself.  Instead, it initializes
-  hardware devices that are required for the CPU to access the serial port
-  hardware.  This function may be called more than once.
-
-  @retval RETURN_SUCCESS       The platform specific initialization succeeded.
-  @retval RETURN_DEVICE_ERROR  The platform specific initialization could not be completed.
-
-**/
-RETURN_STATUS
-EFIAPI
-PlatformHookSerialPortInitialize (
-  VOID
-  )
-{
-  RETURN_STATUS                       Status;
-  UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO  *SerialPortInfo;
-  UINT8                               *GuidHob;
-  UNIVERSAL_PAYLOAD_GENERIC_HEADER    *GenericHeader;
-
-  GuidHob = GetFirstGuidHob (&gUniversalPayloadSerialPortInfoGuid);
-  if (GuidHob == NULL) {
-    return EFI_NOT_FOUND;
-  }
-
-  GenericHeader = (UNIVERSAL_PAYLOAD_GENERIC_HEADER *) GET_GUID_HOB_DATA (GuidHob);
-  if ((sizeof (UNIVERSAL_PAYLOAD_GENERIC_HEADER) > GET_GUID_HOB_DATA_SIZE (GuidHob)) || (GenericHeader->Length > GET_GUID_HOB_DATA_SIZE (GuidHob))) {
-    return EFI_NOT_FOUND;
-  }
-
-  if (GenericHeader->Revision == UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO_REVISION) {
-    SerialPortInfo = (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO *) GET_GUID_HOB_DATA (GuidHob);
-    if (GenericHeader->Length < UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO, RegisterBase)) {
-      //
-      // Return if can't find the Serial Port Info Hob with enough length
-      //
-      return EFI_NOT_FOUND;
-    }
-
-    Status = PcdSetBoolS (PcdSerialUseMmio, SerialPortInfo->UseMmio);
-    if (RETURN_ERROR (Status)) {
-      return Status;
-    }
-    Status = PcdSet64S (PcdSerialRegisterBase, SerialPortInfo->RegisterBase);
-    if (RETURN_ERROR (Status)) {
-      return Status;
-    }
-    Status = PcdSet32S (PcdSerialRegisterStride, SerialPortInfo->RegisterStride);
-    if (RETURN_ERROR (Status)) {
-      return Status;
-    }
-    Status = PcdSet32S (PcdSerialBaudRate, SerialPortInfo->BaudRate);
-    if (RETURN_ERROR (Status)) {
-      return Status;
-    }
-
-    return RETURN_SUCCESS;
-  }
-
-  return EFI_NOT_FOUND;
-}
diff --git a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf b/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf
deleted file mode 100644
index 7ac6bfa1b1..0000000000
--- a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf
+++ /dev/null
@@ -1,40 +0,0 @@
-## @file
-#  Platform Hook Library instance for UART device for Universal Payload.
-#
-#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
-#
-#  SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = PlatformHookLib
-  FILE_GUID                      = 807E05AB-9411-429F-97F0-FE425BF6B094
-  MODULE_TYPE                    = BASE
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = PlatformHookLib
-  CONSTRUCTOR                    = PlatformHookSerialPortConstructor
-
-[Sources]
-  PlatformHookLib.c
-
-[LibraryClasses]
-  PcdLib
-  BaseLib
-  HobLib
-  DxeHobListLib
-
-[Packages]
-  MdePkg/MdePkg.dec
-  MdeModulePkg/MdeModulePkg.dec
-  UefiPayloadPkg/UefiPayloadPkg.dec
-
-[Guids]
-  gUniversalPayloadSerialPortInfoGuid
-
-[Pcd]
-  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio         ## PRODUCES
-  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase    ## PRODUCES
-  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate        ## PRODUCES
-  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride  ## PRODUCES
diff --git a/UefiPayloadPkg/UefiPayloadEntry/Ia32/SecEntry.nasm b/UefiPayloadPkg/UefiPayloadEntry/Ia32/SecEntry.nasm
deleted file mode 100644
index fa5ed159c6..0000000000
--- a/UefiPayloadPkg/UefiPayloadEntry/Ia32/SecEntry.nasm
+++ /dev/null
@@ -1,46 +0,0 @@
-;------------------------------------------------------------------------------
-;*
-;*   Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
-;*   SPDX-License-Identifier: BSD-2-Clause-Patent
-
-;------------------------------------------------------------------------------
-
-#include <Base.h>
-
-SECTION .text
-
-extern ASM_PFX(PayloadEntry)
-extern  ASM_PFX(PcdGet32 (PcdPayloadStackTop))
-
-;
-; SecCore Entry Point
-;
-; Processor is in flat protected mode
-
-global ASM_PFX(_ModuleEntryPoint)
-ASM_PFX(_ModuleEntryPoint):
-
-  ;
-  ; Disable all the interrupts
-  ;
-  cli
-
-  ;
-  ; Save the bootloader parameter base address
-  ;
-  mov   eax, [esp + 4]
-
-  mov   esp, FixedPcdGet32 (PcdPayloadStackTop)
-
-  ;
-  ; Push the bootloader parameter address onto new stack
-  ;
-  push  0
-  push  eax
-
-  ;
-  ; Call into C code
-  ;
-  call  ASM_PFX(PayloadEntry)
-  jmp   $
-
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
index a12d9961f1..f2ac3d2c69 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
+++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
@@ -385,7 +385,7 @@ BuildGenericHob (
 **/
 EFI_STATUS
 EFIAPI
-PayloadEntry (
+_ModuleEntryPoint (
   IN UINTN                     BootloaderParameter
   )
 {
@@ -395,13 +395,10 @@ PayloadEntry (
   UINTN                         HobMemBase;
   UINTN                         HobMemTop;
   EFI_PEI_HOB_POINTERS          Hob;
+  SERIAL_PORT_INFO              SerialPortInfo;
+  UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO  *UniversalSerialPort;
 
-  // Call constructor for all libraries
-  ProcessLibraryConstructorList ();
-
-  DEBUG ((DEBUG_INFO, "GET_BOOTLOADER_PARAMETER() = 0x%lx\n", GET_BOOTLOADER_PARAMETER()));
-  DEBUG ((DEBUG_INFO, "sizeof(UINTN) = 0x%x\n", sizeof(UINTN)));
-
+  PcdSet64S (PcdBootloaderParameter, BootloaderParameter);
   // Initialize floating point operating environment to be compliant with UEFI spec.
   InitializeFloatingPointUnits ();
 
@@ -412,6 +409,25 @@ PayloadEntry (
 
   HobConstructor ((VOID *)MemBase, (VOID *)HobMemTop, (VOID *)HobMemBase, (VOID *)HobMemTop);
 
+  //
+  // Build serial port info
+  //
+  Status = ParseSerialInfo (&SerialPortInfo);
+  if (!EFI_ERROR (Status)) {
+    UniversalSerialPort = BuildGuidHob (&gUniversalPayloadSerialPortInfoGuid, sizeof (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO));
+    ASSERT (UniversalSerialPort != NULL);
+    UniversalSerialPort->Header.Revision = UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO_REVISION;
+    UniversalSerialPort->Header.Length   = sizeof (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO);
+    UniversalSerialPort->UseMmio         = (SerialPortInfo.Type == 1)?FALSE:TRUE;
+    UniversalSerialPort->RegisterBase    = SerialPortInfo.BaseAddr;
+    UniversalSerialPort->BaudRate        = SerialPortInfo.Baud;
+    UniversalSerialPort->RegisterStride  = (UINT8)SerialPortInfo.RegWidth;
+  }
+
+  // The library constructors might depend on serial port, so call it after serial port hob
+  ProcessLibraryConstructorList ();
+  DEBUG ((DEBUG_INFO, "sizeof(UINTN) = 0x%x\n", sizeof(UINTN)));
+
   // Build HOB based on information from Bootloader
   Status = BuildHobFromBl ();
   if (EFI_ERROR (Status)) {
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h
index 9922b56b39..de51c2fba9 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h
+++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h
@@ -35,6 +35,7 @@
 #include <UniversalPayload/AcpiTable.h>
 #include <UniversalPayload/UniversalPayload.h>
 #include <UniversalPayload/ExtraData.h>
+#include <UniversalPayload/SerialPortInfo.h>
 #include <Guid/PcdDataBaseSignatureGuid.h>
 
 #define LEGACY_8259_MASK_REGISTER_MASTER  0x21
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
index 4c5170d9cc..96e4bb81f4 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
+++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
@@ -32,13 +32,11 @@
   X64/VirtualMemory.c
   Ia32/DxeLoadFunc.c
   Ia32/IdtVectorAsm.nasm
-  Ia32/SecEntry.nasm
 
 [Sources.X64]
   X64/VirtualMemory.h
   X64/VirtualMemory.c
   X64/DxeLoadFunc.c
-  X64/SecEntry.nasm
 
 [Packages]
   MdePkg/MdePkg.dec
@@ -67,6 +65,7 @@
   gUefiAcpiBoardInfoGuid
   gUniversalPayloadSmbiosTableGuid
   gUniversalPayloadAcpiTableGuid
+  gUniversalPayloadSerialPortInfoGuid
 
 [FeaturePcd.IA32]
   gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode      ## CONSUMES
@@ -87,7 +86,7 @@
 
   gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemBase
   gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize
-  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop
+  gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter
   gUefiPayloadPkgTokenSpaceGuid.PcdSystemMemoryUefiRegionSize
 
   gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack               ## SOMETIMES_CONSUMES
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
index e7e05b744a..928bd2e42b 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
+++ b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
@@ -92,7 +92,6 @@
 
   gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemBase
   gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize
-  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop
   gUefiPayloadPkgTokenSpaceGuid.PcdSystemMemoryUefiRegionSize
 
   gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack               ## SOMETIMES_CONSUMES
diff --git a/UefiPayloadPkg/UefiPayloadEntry/X64/SecEntry.nasm b/UefiPayloadPkg/UefiPayloadEntry/X64/SecEntry.nasm
deleted file mode 100644
index 974cf77771..0000000000
--- a/UefiPayloadPkg/UefiPayloadEntry/X64/SecEntry.nasm
+++ /dev/null
@@ -1,47 +0,0 @@
-;------------------------------------------------------------------------------
-;*
-;*   Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
-;*   SPDX-License-Identifier: BSD-2-Clause-Patent
-
-;------------------------------------------------------------------------------
-
-#include <Base.h>
-
-DEFAULT REL
-SECTION .text
-
-extern ASM_PFX(PayloadEntry)
-extern  ASM_PFX(PcdGet32 (PcdPayloadStackTop))
-
-;
-; SecCore Entry Point
-;
-; Processor is in flat protected mode
-
-global ASM_PFX(_ModuleEntryPoint)
-ASM_PFX(_ModuleEntryPoint):
-
-  ;
-  ; Disable all the interrupts
-  ;
-  cli
-
-
-  mov   rsp, FixedPcdGet32 (PcdPayloadStackTop)
-
-  ;
-  ; Push the bootloader parameter address onto new stack
-  ;
-  push  rcx
-  mov   rax, 0
-  push  rax ; shadow space
-  push  rax
-  push  rax
-  push  rax
-
-  ;
-  ; Call into C code
-  ;
-  call  ASM_PFX(PayloadEntry)
-  jmp   $
-
diff --git a/UefiPayloadPkg/UefiPayloadPkg.dec b/UefiPayloadPkg/UefiPayloadPkg.dec
index 8f0a7e3f95..e5e8db8863 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.dec
+++ b/UefiPayloadPkg/UefiPayloadPkg.dec
@@ -60,8 +60,8 @@
 gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemBase|0|UINT32|0x10000001
 ## Provides the size of the payload binary in memory
 gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize|0|UINT32|0x10000002
-## Payload stack top
-gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop|0x90000|UINT32|0x10000004
+## Save bootloader parameter
+gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter|0|UINT64|0x10000004
 
 ## FFS filename to find the shell application.
 gUefiPayloadPkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, 0x7C, 0x3E, 0x9E, 0x1c, 0x4f, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1 }|VOID*|0x10000005
diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc b/UefiPayloadPkg/UefiPayloadPkg.dsc
index fb805dc772..57b04f10be 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.dsc
+++ b/UefiPayloadPkg/UefiPayloadPkg.dsc
@@ -169,12 +169,7 @@
   IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
   OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
   RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf
-
-!if $(UNIVERSAL_PAYLOAD) == TRUE
   HobLib|UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.inf
-!else
-  HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
-!endif
 
   #
   # UEFI & PI
@@ -217,11 +212,7 @@
   TimerLib|UefiPayloadPkg/Library/AcpiTimerLib/AcpiTimerLib.inf
   ResetSystemLib|UefiPayloadPkg/Library/ResetSystemLib/ResetSystemLib.inf
   SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
-!if $(UNIVERSAL_PAYLOAD) == TRUE
-  PlatformHookLib|UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf
-!else
   PlatformHookLib|UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
-!endif
   PlatformBootManagerLib|UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
   IoApicLib|PcAtChipsetPkg/Library/BaseIoApicLib/BaseIoApicLib.inf
 
@@ -366,6 +357,7 @@
 
   gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber|$(MAX_LOGICAL_PROCESSORS)
   gUefiCpuPkgTokenSpaceGuid.PcdCpuNumberOfReservedVariableMtrrs|0
+  gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter|0
 
 ################################################################################
 #
-- 
2.32.0.windows.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#81267): https://edk2.groups.io/g/devel/message/81267
Mute This Topic: https://groups.io/mt/85942633/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-


Re: [edk2-devel] [`edk2-devel][PATCH] UefiPayloadPkg: Remove asm code and sharing libraries
Posted by Ni, Ray 2 years, 7 months ago
It looks much cleaner and universal payload code is not touched.

Reviewed-by: Ray Ni <ray.ni@intel.com>

> -----Original Message-----
> From: Dong, Guo <guo.dong@intel.com>
> Sent: Wednesday, September 29, 2021 1:49 PM
> To: devel@edk2.groups.io
> Cc: Dong, Guo <guo.dong@intel.com>; Ni, Ray <ray.ni@intel.com>; Ma, Maurice <maurice.ma@intel.com>; You, Benjamin
> <benjamin.you@intel.com>
> Subject: [`edk2-devel][PATCH] UefiPayloadPkg: Remove asm code and sharing libraries
> 
> From: Guo Dong <guo.dong@intel.com>
> 
> Remove asm code used for payload entry.
> Use patchable PCD instead a fixed PCD PcdPayloadStackTop to avoid
> potential conflict.
> 
> Based on the removal, use same HobLib regardless UNIVERSAL_PAYLOAD.
> Use same PlatformHookLib regardless UNIVERSAL_PAYLOAD. The original
> PlatformHookLib was removed and UniversalPayloadPlatformHookLib was
> rename to new PlatformHookLib.
> 
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Maurice Ma <maurice.ma@intel.com>
> Cc: Benjamin You <benjamin.you@intel.com>
> Signed-off-by: Guo Dong <guo.dong@intel.com>
> ---
>  UefiPayloadPkg/Include/Library/BlParseLib.h                                |   5 ++---
>  UefiPayloadPkg/Library/CbParseLib/CbParseLib.c                             |   6 ++++--
>  UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf                           |   4 ++--
>  UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c                   | 110
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------
>  UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf                 |  18 ++++++++++--------
>  UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf                         |   4 ++--
>  UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.c   |  95 ---------------------------------------------------
> --------------------------------------------
>  UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf |  40 ----------------------------------------
>  UefiPayloadPkg/UefiPayloadEntry/Ia32/SecEntry.nasm                         |  46 ----------------------------------------------
>  UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c                         |  30 +++++++++++++++++++++++-------
>  UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h                         |   1 +
>  UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf                       |   5 ++---
>  UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf                  |   1 -
>  UefiPayloadPkg/UefiPayloadEntry/X64/SecEntry.nasm                          |  47 -----------------------------------------------
>  UefiPayloadPkg/UefiPayloadPkg.dec                                          |   4 ++--
>  UefiPayloadPkg/UefiPayloadPkg.dsc                                          |  10 +---------
>  16 files changed, 105 insertions(+), 321 deletions(-)
> 
> diff --git a/UefiPayloadPkg/Include/Library/BlParseLib.h b/UefiPayloadPkg/Include/Library/BlParseLib.h
> index 20a526d15c..1244190d4e 100644
> --- a/UefiPayloadPkg/Include/Library/BlParseLib.h
> +++ b/UefiPayloadPkg/Include/Library/BlParseLib.h
> @@ -2,7 +2,7 @@
>    This library will parse the coreboot table in memory and extract those required
> 
>    information.
> 
> 
> 
> -  Copyright (c) 2014 - 2020, Intel Corporation. All rights reserved.<BR>
> 
> +  Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
> 
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
>  **/
> 
> @@ -16,8 +16,7 @@
>  #ifndef __BOOTLOADER_PARSE_LIB__
> 
>  #define __BOOTLOADER_PARSE_LIB__
> 
> 
> 
> -#define GET_BOOTLOADER_PARAMETER()      (*(UINTN *)(UINTN)(PcdGet32(PcdPayloadStackTop) - sizeof(UINT64)))
> 
> -#define SET_BOOTLOADER_PARAMETER(Value) GET_BOOTLOADER_PARAMETER()=Value
> 
> +#define GET_BOOTLOADER_PARAMETER()      PcdGet64 (PcdBootloaderParameter)
> 
> 
> 
>  typedef RETURN_STATUS \
> 
>          (*BL_MEM_INFO_CALLBACK) (MEMROY_MAP_ENTRY *MemoryMapEntry, VOID *Param);
> 
> diff --git a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c
> index 4e23cff50e..4f90687e40 100644
> --- a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c
> +++ b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.c
> @@ -2,7 +2,7 @@
>    This library will parse the coreboot table in memory and extract those required
> 
>    information.
> 
> 
> 
> -  Copyright (c) 2014 - 2016, Intel Corporation. All rights reserved.<BR>
> 
> +  Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
> 
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
>  **/
> 
> @@ -140,6 +140,7 @@ GetParameterBase (
>    UINT8              *TmpPtr;
> 
>    UINT8              *CbTablePtr;
> 
>    UINTN              Idx;
> 
> +  EFI_STATUS         Status;
> 
> 
> 
>    //
> 
>    // coreboot could pass coreboot table to UEFI payload
> 
> @@ -193,7 +194,8 @@ GetParameterBase (
>      return NULL;
> 
>    }
> 
> 
> 
> -  SET_BOOTLOADER_PARAMETER ((UINT32)(UINTN)CbTablePtr);
> 
> +  PcdSet64S (PcdBootloaderParameter, (UINTN)CbTablePtr);
> 
> +  ASSERT_EFI_STATUS (Status);
> 
> 
> 
>    return CbTablePtr;
> 
>  }
> 
> diff --git a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf
> index 52e3ad2054..cf81697703 100644
> --- a/UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf
> +++ b/UefiPayloadPkg/Library/CbParseLib/CbParseLib.inf
> @@ -1,7 +1,7 @@
>  ## @file
> 
>  #  Coreboot Table Parse Library.
> 
>  #
> 
> -#  Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
> 
> +#  Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
> 
>  #  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
>  ##
> 
> @@ -36,4 +36,4 @@
>    PcdLib
> 
> 
> 
>  [Pcd]
> 
> -  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop
> 
> +  gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter
> 
> diff --git a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
> b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
> index d8453e5957..004fcd8b7c 100644
> --- a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
> +++ b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.c
> @@ -1,29 +1,34 @@
>  /** @file
> 
>    Platform Hook Library instance for UART device.
> 
> 
> 
> -  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
>  **/
> 
> 
> 
>  #include <Base.h>
> 
> -#include <Uefi/UefiBaseType.h>
> 
> -#include <Library/PciLib.h>
> 
> +#include <PiDxe.h>
> 
> +#include <UniversalPayload/SerialPortInfo.h>
> 
>  #include <Library/PlatformHookLib.h>
> 
> -#include <Library/BlParseLib.h>
> 
>  #include <Library/PcdLib.h>
> 
> +#include <Library/HobLib.h>
> 
> 
> 
> -typedef struct {
> 
> -  UINT16  VendorId;          ///< Vendor ID to match the PCI device.  The value 0xFFFF terminates the list of entries.
> 
> -  UINT16  DeviceId;          ///< Device ID to match the PCI device
> 
> -  UINT32  ClockRate;         ///< UART clock rate.  Set to 0 for default clock rate of 1843200 Hz
> 
> -  UINT64  Offset;            ///< The byte offset into to the BAR
> 
> -  UINT8   BarIndex;          ///< Which BAR to get the UART base address
> 
> -  UINT8   RegisterStride;    ///< UART register stride in bytes.  Set to 0 for default register stride of 1 byte.
> 
> -  UINT16  ReceiveFifoDepth;  ///< UART receive FIFO depth in bytes. Set to 0 for a default FIFO depth of 16 bytes.
> 
> -  UINT16  TransmitFifoDepth; ///< UART transmit FIFO depth in bytes. Set to 0 for a default FIFO depth of 16 bytes.
> 
> -  UINT8   Reserved[2];
> 
> -} PCI_SERIAL_PARAMETER;
> 
> +
> 
> +/** Library Constructor
> 
> +
> 
> +  @retval RETURN_SUCCESS  Success.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +PlatformHookSerialPortConstructor (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  // Nothing to do here. This constructor is added to
> 
> +  // enable the chain of constructor invocation for
> 
> +  // dependent libraries.
> 
> +  return RETURN_SUCCESS;
> 
> +}
> 
> 
> 
>  /**
> 
>    Performs platform specific initialization required for the CPU to access
> 
> @@ -42,52 +47,49 @@ PlatformHookSerialPortInitialize (
>    VOID
> 
>    )
> 
>  {
> 
> -  RETURN_STATUS         Status;
> 
> -  UINT32                DeviceVendor;
> 
> -  PCI_SERIAL_PARAMETER  *SerialParam;
> 
> -  SERIAL_PORT_INFO      SerialPortInfo;
> 
> -
> 
> -  Status = ParseSerialInfo (&SerialPortInfo);
> 
> -  if (RETURN_ERROR (Status)) {
> 
> -    return Status;
> 
> -  }
> 
> +  RETURN_STATUS                       Status;
> 
> +  UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO  *SerialPortInfo;
> 
> +  UINT8                               *GuidHob;
> 
> +  UNIVERSAL_PAYLOAD_GENERIC_HEADER    *GenericHeader;
> 
> 
> 
> -  if (SerialPortInfo.Type == PLD_SERIAL_TYPE_MEMORY_MAPPED) {
> 
> -    Status = PcdSetBoolS (PcdSerialUseMmio, TRUE);
> 
> -  } else { //IO
> 
> -    Status = PcdSetBoolS (PcdSerialUseMmio, FALSE);
> 
> -  }
> 
> -  if (RETURN_ERROR (Status)) {
> 
> -    return Status;
> 
> -  }
> 
> -  Status = PcdSet64S (PcdSerialRegisterBase, SerialPortInfo.BaseAddr);
> 
> -  if (RETURN_ERROR (Status)) {
> 
> -    return Status;
> 
> +  GuidHob = GetFirstGuidHob (&gUniversalPayloadSerialPortInfoGuid);
> 
> +  if (GuidHob == NULL) {
> 
> +    return EFI_NOT_FOUND;
> 
>    }
> 
> 
> 
> -  Status = PcdSet32S (PcdSerialRegisterStride, SerialPortInfo.RegWidth);
> 
> -  if (RETURN_ERROR (Status)) {
> 
> -    return Status;
> 
> +  GenericHeader = (UNIVERSAL_PAYLOAD_GENERIC_HEADER *) GET_GUID_HOB_DATA (GuidHob);
> 
> +  if ((sizeof (UNIVERSAL_PAYLOAD_GENERIC_HEADER) > GET_GUID_HOB_DATA_SIZE (GuidHob)) || (GenericHeader->Length >
> GET_GUID_HOB_DATA_SIZE (GuidHob))) {
> 
> +    return EFI_NOT_FOUND;
> 
>    }
> 
> 
> 
> -  Status = PcdSet32S (PcdSerialBaudRate, SerialPortInfo.Baud);
> 
> -  if (RETURN_ERROR (Status)) {
> 
> -    return Status;
> 
> -  }
> 
> +  if (GenericHeader->Revision == UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO_REVISION) {
> 
> +    SerialPortInfo = (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO *) GET_GUID_HOB_DATA (GuidHob);
> 
> +    if (GenericHeader->Length < UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO,
> RegisterBase)) {
> 
> +      //
> 
> +      // Return if can't find the Serial Port Info Hob with enough length
> 
> +      //
> 
> +      return EFI_NOT_FOUND;
> 
> +    }
> 
> 
> 
> -  Status = PcdSet32S (PcdSerialClockRate, SerialPortInfo.InputHertz);
> 
> -  if (RETURN_ERROR (Status)) {
> 
> -    return Status;
> 
> -  }
> 
> +    Status = PcdSetBoolS (PcdSerialUseMmio, SerialPortInfo->UseMmio);
> 
> +    if (RETURN_ERROR (Status)) {
> 
> +      return Status;
> 
> +    }
> 
> +    Status = PcdSet64S (PcdSerialRegisterBase, SerialPortInfo->RegisterBase);
> 
> +    if (RETURN_ERROR (Status)) {
> 
> +      return Status;
> 
> +    }
> 
> +    Status = PcdSet32S (PcdSerialRegisterStride, SerialPortInfo->RegisterStride);
> 
> +    if (RETURN_ERROR (Status)) {
> 
> +      return Status;
> 
> +    }
> 
> +    Status = PcdSet32S (PcdSerialBaudRate, SerialPortInfo->BaudRate);
> 
> +    if (RETURN_ERROR (Status)) {
> 
> +      return Status;
> 
> +    }
> 
> 
> 
> -  if (SerialPortInfo.UartPciAddr >= 0x80000000) {
> 
> -    DeviceVendor = PciRead32 (SerialPortInfo.UartPciAddr & 0x0ffff000);
> 
> -    SerialParam  = PcdGetPtr(PcdPciSerialParameters);
> 
> -    SerialParam->VendorId  = (UINT16)DeviceVendor;
> 
> -    SerialParam->DeviceId  = DeviceVendor >> 16;
> 
> -    SerialParam->ClockRate = SerialPortInfo.InputHertz;
> 
> -    SerialParam->RegisterStride = (UINT8)SerialPortInfo.RegWidth;
> 
> +    return RETURN_SUCCESS;
> 
>    }
> 
> 
> 
> -  return RETURN_SUCCESS;
> 
> +  return EFI_NOT_FOUND;
> 
>  }
> 
> diff --git a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
> b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
> index 3eeb94d8fa..7ac6bfa1b1 100644
> --- a/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
> +++ b/UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
> @@ -1,7 +1,7 @@
>  ## @file
> 
> -#  Platform Hook Library instance for UART device.
> 
> +#  Platform Hook Library instance for UART device for Universal Payload.
> 
>  #
> 
> -#  Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
> 
> +#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
>  #
> 
>  #  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
> @@ -10,29 +10,31 @@
>  [Defines]
> 
>    INF_VERSION                    = 0x00010005
> 
>    BASE_NAME                      = PlatformHookLib
> 
> -  FILE_GUID                      = 40A2CBC6-CFB8-447b-A90E-198E88FD345E
> 
> +  FILE_GUID                      = 807E05AB-9411-429F-97F0-FE425BF6B094
> 
>    MODULE_TYPE                    = BASE
> 
>    VERSION_STRING                 = 1.0
> 
>    LIBRARY_CLASS                  = PlatformHookLib
> 
> -  CONSTRUCTOR                    = PlatformHookSerialPortInitialize
> 
> +  CONSTRUCTOR                    = PlatformHookSerialPortConstructor
> 
> 
> 
>  [Sources]
> 
>    PlatformHookLib.c
> 
> 
> 
>  [LibraryClasses]
> 
> -  BlParseLib
> 
>    PcdLib
> 
> -  PciLib
> 
> +  BaseLib
> 
> +  HobLib
> 
> +  DxeHobListLib
> 
> 
> 
>  [Packages]
> 
>    MdePkg/MdePkg.dec
> 
>    MdeModulePkg/MdeModulePkg.dec
> 
>    UefiPayloadPkg/UefiPayloadPkg.dec
> 
> 
> 
> +[Guids]
> 
> +  gUniversalPayloadSerialPortInfoGuid
> 
> +
> 
>  [Pcd]
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio         ## PRODUCES
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase    ## PRODUCES
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate        ## PRODUCES
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride  ## PRODUCES
> 
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate       ## PRODUCES
> 
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdPciSerialParameters   ## PRODUCES
> 
> diff --git a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf
> index 9ce2864f9f..665a5a8adc 100644
> --- a/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf
> +++ b/UefiPayloadPkg/Library/SblParseLib/SblParseLib.inf
> @@ -1,7 +1,7 @@
>  ## @file
> 
>  #  Slim Bootloader parse library.
> 
>  #
> 
> -#  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> 
> +#  Copyright (c) 2019 - 2021, Intel Corporation. All rights reserved.<BR>
> 
>  #  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
>  ##
> 
> @@ -43,4 +43,4 @@
>    gEfiGraphicsDeviceInfoHobGuid
> 
> 
> 
>  [Pcd]
> 
> -  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop
> 
> +  gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter
> 
> diff --git a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.c
> b/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.c
> deleted file mode 100644
> index 004fcd8b7c..0000000000
> --- a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.c
> +++ /dev/null
> @@ -1,95 +0,0 @@
> -/** @file
> 
> -  Platform Hook Library instance for UART device.
> 
> -
> 
> -  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> -  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> -
> 
> -**/
> 
> -
> 
> -#include <Base.h>
> 
> -#include <PiDxe.h>
> 
> -#include <UniversalPayload/SerialPortInfo.h>
> 
> -#include <Library/PlatformHookLib.h>
> 
> -#include <Library/PcdLib.h>
> 
> -#include <Library/HobLib.h>
> 
> -
> 
> -
> 
> -/** Library Constructor
> 
> -
> 
> -  @retval RETURN_SUCCESS  Success.
> 
> -**/
> 
> -EFI_STATUS
> 
> -EFIAPI
> 
> -PlatformHookSerialPortConstructor (
> 
> -  VOID
> 
> -  )
> 
> -{
> 
> -  // Nothing to do here. This constructor is added to
> 
> -  // enable the chain of constructor invocation for
> 
> -  // dependent libraries.
> 
> -  return RETURN_SUCCESS;
> 
> -}
> 
> -
> 
> -/**
> 
> -  Performs platform specific initialization required for the CPU to access
> 
> -  the hardware associated with a SerialPortLib instance.  This function does
> 
> -  not initialize the serial port hardware itself.  Instead, it initializes
> 
> -  hardware devices that are required for the CPU to access the serial port
> 
> -  hardware.  This function may be called more than once.
> 
> -
> 
> -  @retval RETURN_SUCCESS       The platform specific initialization succeeded.
> 
> -  @retval RETURN_DEVICE_ERROR  The platform specific initialization could not be completed.
> 
> -
> 
> -**/
> 
> -RETURN_STATUS
> 
> -EFIAPI
> 
> -PlatformHookSerialPortInitialize (
> 
> -  VOID
> 
> -  )
> 
> -{
> 
> -  RETURN_STATUS                       Status;
> 
> -  UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO  *SerialPortInfo;
> 
> -  UINT8                               *GuidHob;
> 
> -  UNIVERSAL_PAYLOAD_GENERIC_HEADER    *GenericHeader;
> 
> -
> 
> -  GuidHob = GetFirstGuidHob (&gUniversalPayloadSerialPortInfoGuid);
> 
> -  if (GuidHob == NULL) {
> 
> -    return EFI_NOT_FOUND;
> 
> -  }
> 
> -
> 
> -  GenericHeader = (UNIVERSAL_PAYLOAD_GENERIC_HEADER *) GET_GUID_HOB_DATA (GuidHob);
> 
> -  if ((sizeof (UNIVERSAL_PAYLOAD_GENERIC_HEADER) > GET_GUID_HOB_DATA_SIZE (GuidHob)) || (GenericHeader->Length >
> GET_GUID_HOB_DATA_SIZE (GuidHob))) {
> 
> -    return EFI_NOT_FOUND;
> 
> -  }
> 
> -
> 
> -  if (GenericHeader->Revision == UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO_REVISION) {
> 
> -    SerialPortInfo = (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO *) GET_GUID_HOB_DATA (GuidHob);
> 
> -    if (GenericHeader->Length < UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO,
> RegisterBase)) {
> 
> -      //
> 
> -      // Return if can't find the Serial Port Info Hob with enough length
> 
> -      //
> 
> -      return EFI_NOT_FOUND;
> 
> -    }
> 
> -
> 
> -    Status = PcdSetBoolS (PcdSerialUseMmio, SerialPortInfo->UseMmio);
> 
> -    if (RETURN_ERROR (Status)) {
> 
> -      return Status;
> 
> -    }
> 
> -    Status = PcdSet64S (PcdSerialRegisterBase, SerialPortInfo->RegisterBase);
> 
> -    if (RETURN_ERROR (Status)) {
> 
> -      return Status;
> 
> -    }
> 
> -    Status = PcdSet32S (PcdSerialRegisterStride, SerialPortInfo->RegisterStride);
> 
> -    if (RETURN_ERROR (Status)) {
> 
> -      return Status;
> 
> -    }
> 
> -    Status = PcdSet32S (PcdSerialBaudRate, SerialPortInfo->BaudRate);
> 
> -    if (RETURN_ERROR (Status)) {
> 
> -      return Status;
> 
> -    }
> 
> -
> 
> -    return RETURN_SUCCESS;
> 
> -  }
> 
> -
> 
> -  return EFI_NOT_FOUND;
> 
> -}
> 
> diff --git a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf
> b/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf
> deleted file mode 100644
> index 7ac6bfa1b1..0000000000
> --- a/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -## @file
> 
> -#  Platform Hook Library instance for UART device for Universal Payload.
> 
> -#
> 
> -#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> -#
> 
> -#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> -#
> 
> -##
> 
> -
> 
> -[Defines]
> 
> -  INF_VERSION                    = 0x00010005
> 
> -  BASE_NAME                      = PlatformHookLib
> 
> -  FILE_GUID                      = 807E05AB-9411-429F-97F0-FE425BF6B094
> 
> -  MODULE_TYPE                    = BASE
> 
> -  VERSION_STRING                 = 1.0
> 
> -  LIBRARY_CLASS                  = PlatformHookLib
> 
> -  CONSTRUCTOR                    = PlatformHookSerialPortConstructor
> 
> -
> 
> -[Sources]
> 
> -  PlatformHookLib.c
> 
> -
> 
> -[LibraryClasses]
> 
> -  PcdLib
> 
> -  BaseLib
> 
> -  HobLib
> 
> -  DxeHobListLib
> 
> -
> 
> -[Packages]
> 
> -  MdePkg/MdePkg.dec
> 
> -  MdeModulePkg/MdeModulePkg.dec
> 
> -  UefiPayloadPkg/UefiPayloadPkg.dec
> 
> -
> 
> -[Guids]
> 
> -  gUniversalPayloadSerialPortInfoGuid
> 
> -
> 
> -[Pcd]
> 
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio         ## PRODUCES
> 
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase    ## PRODUCES
> 
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate        ## PRODUCES
> 
> -  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride  ## PRODUCES
> 
> diff --git a/UefiPayloadPkg/UefiPayloadEntry/Ia32/SecEntry.nasm b/UefiPayloadPkg/UefiPayloadEntry/Ia32/SecEntry.nasm
> deleted file mode 100644
> index fa5ed159c6..0000000000
> --- a/UefiPayloadPkg/UefiPayloadEntry/Ia32/SecEntry.nasm
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -;------------------------------------------------------------------------------
> 
> -;*
> 
> -;*   Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
> 
> -;*   SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> -
> 
> -;------------------------------------------------------------------------------
> 
> -
> 
> -#include <Base.h>
> 
> -
> 
> -SECTION .text
> 
> -
> 
> -extern ASM_PFX(PayloadEntry)
> 
> -extern  ASM_PFX(PcdGet32 (PcdPayloadStackTop))
> 
> -
> 
> -;
> 
> -; SecCore Entry Point
> 
> -;
> 
> -; Processor is in flat protected mode
> 
> -
> 
> -global ASM_PFX(_ModuleEntryPoint)
> 
> -ASM_PFX(_ModuleEntryPoint):
> 
> -
> 
> -  ;
> 
> -  ; Disable all the interrupts
> 
> -  ;
> 
> -  cli
> 
> -
> 
> -  ;
> 
> -  ; Save the bootloader parameter base address
> 
> -  ;
> 
> -  mov   eax, [esp + 4]
> 
> -
> 
> -  mov   esp, FixedPcdGet32 (PcdPayloadStackTop)
> 
> -
> 
> -  ;
> 
> -  ; Push the bootloader parameter address onto new stack
> 
> -  ;
> 
> -  push  0
> 
> -  push  eax
> 
> -
> 
> -  ;
> 
> -  ; Call into C code
> 
> -  ;
> 
> -  call  ASM_PFX(PayloadEntry)
> 
> -  jmp   $
> 
> -
> 
> diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
> index a12d9961f1..f2ac3d2c69 100644
> --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
> +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
> @@ -385,7 +385,7 @@ BuildGenericHob (
>  **/
> 
>  EFI_STATUS
> 
>  EFIAPI
> 
> -PayloadEntry (
> 
> +_ModuleEntryPoint (
> 
>    IN UINTN                     BootloaderParameter
> 
>    )
> 
>  {
> 
> @@ -395,13 +395,10 @@ PayloadEntry (
>    UINTN                         HobMemBase;
> 
>    UINTN                         HobMemTop;
> 
>    EFI_PEI_HOB_POINTERS          Hob;
> 
> +  SERIAL_PORT_INFO              SerialPortInfo;
> 
> +  UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO  *UniversalSerialPort;
> 
> 
> 
> -  // Call constructor for all libraries
> 
> -  ProcessLibraryConstructorList ();
> 
> -
> 
> -  DEBUG ((DEBUG_INFO, "GET_BOOTLOADER_PARAMETER() = 0x%lx\n", GET_BOOTLOADER_PARAMETER()));
> 
> -  DEBUG ((DEBUG_INFO, "sizeof(UINTN) = 0x%x\n", sizeof(UINTN)));
> 
> -
> 
> +  PcdSet64S (PcdBootloaderParameter, BootloaderParameter);
> 
>    // Initialize floating point operating environment to be compliant with UEFI spec.
> 
>    InitializeFloatingPointUnits ();
> 
> 
> 
> @@ -412,6 +409,25 @@ PayloadEntry (
> 
> 
>    HobConstructor ((VOID *)MemBase, (VOID *)HobMemTop, (VOID *)HobMemBase, (VOID *)HobMemTop);
> 
> 
> 
> +  //
> 
> +  // Build serial port info
> 
> +  //
> 
> +  Status = ParseSerialInfo (&SerialPortInfo);
> 
> +  if (!EFI_ERROR (Status)) {
> 
> +    UniversalSerialPort = BuildGuidHob (&gUniversalPayloadSerialPortInfoGuid, sizeof
> (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO));
> 
> +    ASSERT (UniversalSerialPort != NULL);
> 
> +    UniversalSerialPort->Header.Revision = UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO_REVISION;
> 
> +    UniversalSerialPort->Header.Length   = sizeof (UNIVERSAL_PAYLOAD_SERIAL_PORT_INFO);
> 
> +    UniversalSerialPort->UseMmio         = (SerialPortInfo.Type == 1)?FALSE:TRUE;
> 
> +    UniversalSerialPort->RegisterBase    = SerialPortInfo.BaseAddr;
> 
> +    UniversalSerialPort->BaudRate        = SerialPortInfo.Baud;
> 
> +    UniversalSerialPort->RegisterStride  = (UINT8)SerialPortInfo.RegWidth;
> 
> +  }
> 
> +
> 
> +  // The library constructors might depend on serial port, so call it after serial port hob
> 
> +  ProcessLibraryConstructorList ();
> 
> +  DEBUG ((DEBUG_INFO, "sizeof(UINTN) = 0x%x\n", sizeof(UINTN)));
> 
> +
> 
>    // Build HOB based on information from Bootloader
> 
>    Status = BuildHobFromBl ();
> 
>    if (EFI_ERROR (Status)) {
> 
> diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h
> index 9922b56b39..de51c2fba9 100644
> --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h
> +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.h
> @@ -35,6 +35,7 @@
>  #include <UniversalPayload/AcpiTable.h>
> 
>  #include <UniversalPayload/UniversalPayload.h>
> 
>  #include <UniversalPayload/ExtraData.h>
> 
> +#include <UniversalPayload/SerialPortInfo.h>
> 
>  #include <Guid/PcdDataBaseSignatureGuid.h>
> 
> 
> 
>  #define LEGACY_8259_MASK_REGISTER_MASTER  0x21
> 
> diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
> index 4c5170d9cc..96e4bb81f4 100644
> --- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
> +++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
> @@ -32,13 +32,11 @@
>    X64/VirtualMemory.c
> 
>    Ia32/DxeLoadFunc.c
> 
>    Ia32/IdtVectorAsm.nasm
> 
> -  Ia32/SecEntry.nasm
> 
> 
> 
>  [Sources.X64]
> 
>    X64/VirtualMemory.h
> 
>    X64/VirtualMemory.c
> 
>    X64/DxeLoadFunc.c
> 
> -  X64/SecEntry.nasm
> 
> 
> 
>  [Packages]
> 
>    MdePkg/MdePkg.dec
> 
> @@ -67,6 +65,7 @@
>    gUefiAcpiBoardInfoGuid
> 
>    gUniversalPayloadSmbiosTableGuid
> 
>    gUniversalPayloadAcpiTableGuid
> 
> +  gUniversalPayloadSerialPortInfoGuid
> 
> 
> 
>  [FeaturePcd.IA32]
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode      ## CONSUMES
> 
> @@ -87,7 +86,7 @@
> 
> 
>    gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemBase
> 
>    gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize
> 
> -  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop
> 
> +  gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter
> 
>    gUefiPayloadPkgTokenSpaceGuid.PcdSystemMemoryUefiRegionSize
> 
> 
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack               ## SOMETIMES_CONSUMES
> 
> diff --git a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
> b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
> index e7e05b744a..928bd2e42b 100644
> --- a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
> +++ b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
> @@ -92,7 +92,6 @@
> 
> 
>    gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemBase
> 
>    gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize
> 
> -  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop
> 
>    gUefiPayloadPkgTokenSpaceGuid.PcdSystemMemoryUefiRegionSize
> 
> 
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack               ## SOMETIMES_CONSUMES
> 
> diff --git a/UefiPayloadPkg/UefiPayloadEntry/X64/SecEntry.nasm b/UefiPayloadPkg/UefiPayloadEntry/X64/SecEntry.nasm
> deleted file mode 100644
> index 974cf77771..0000000000
> --- a/UefiPayloadPkg/UefiPayloadEntry/X64/SecEntry.nasm
> +++ /dev/null
> @@ -1,47 +0,0 @@
> -;------------------------------------------------------------------------------
> 
> -;*
> 
> -;*   Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
> 
> -;*   SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> -
> 
> -;------------------------------------------------------------------------------
> 
> -
> 
> -#include <Base.h>
> 
> -
> 
> -DEFAULT REL
> 
> -SECTION .text
> 
> -
> 
> -extern ASM_PFX(PayloadEntry)
> 
> -extern  ASM_PFX(PcdGet32 (PcdPayloadStackTop))
> 
> -
> 
> -;
> 
> -; SecCore Entry Point
> 
> -;
> 
> -; Processor is in flat protected mode
> 
> -
> 
> -global ASM_PFX(_ModuleEntryPoint)
> 
> -ASM_PFX(_ModuleEntryPoint):
> 
> -
> 
> -  ;
> 
> -  ; Disable all the interrupts
> 
> -  ;
> 
> -  cli
> 
> -
> 
> -
> 
> -  mov   rsp, FixedPcdGet32 (PcdPayloadStackTop)
> 
> -
> 
> -  ;
> 
> -  ; Push the bootloader parameter address onto new stack
> 
> -  ;
> 
> -  push  rcx
> 
> -  mov   rax, 0
> 
> -  push  rax ; shadow space
> 
> -  push  rax
> 
> -  push  rax
> 
> -  push  rax
> 
> -
> 
> -  ;
> 
> -  ; Call into C code
> 
> -  ;
> 
> -  call  ASM_PFX(PayloadEntry)
> 
> -  jmp   $
> 
> -
> 
> diff --git a/UefiPayloadPkg/UefiPayloadPkg.dec b/UefiPayloadPkg/UefiPayloadPkg.dec
> index 8f0a7e3f95..e5e8db8863 100644
> --- a/UefiPayloadPkg/UefiPayloadPkg.dec
> +++ b/UefiPayloadPkg/UefiPayloadPkg.dec
> @@ -60,8 +60,8 @@
>  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemBase|0|UINT32|0x10000001
> 
>  ## Provides the size of the payload binary in memory
> 
>  gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize|0|UINT32|0x10000002
> 
> -## Payload stack top
> 
> -gUefiPayloadPkgTokenSpaceGuid.PcdPayloadStackTop|0x90000|UINT32|0x10000004
> 
> +## Save bootloader parameter
> 
> +gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter|0|UINT64|0x10000004
> 
> 
> 
>  ## FFS filename to find the shell application.
> 
>  gUefiPayloadPkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, 0x7C, 0x3E, 0x9E, 0x1c, 0x4f, 0xAD, 0x65, 0xE0, 0x52, 0x68,
> 0xD0, 0xB4, 0xD1 }|VOID*|0x10000005
> 
> diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc b/UefiPayloadPkg/UefiPayloadPkg.dsc
> index fb805dc772..57b04f10be 100644
> --- a/UefiPayloadPkg/UefiPayloadPkg.dsc
> +++ b/UefiPayloadPkg/UefiPayloadPkg.dsc
> @@ -169,12 +169,7 @@
>    IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
> 
>    OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
> 
>    RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf
> 
> -
> 
> -!if $(UNIVERSAL_PAYLOAD) == TRUE
> 
>    HobLib|UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.inf
> 
> -!else
> 
> -  HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> 
> -!endif
> 
> 
> 
>    #
> 
>    # UEFI & PI
> 
> @@ -217,11 +212,7 @@
>    TimerLib|UefiPayloadPkg/Library/AcpiTimerLib/AcpiTimerLib.inf
> 
>    ResetSystemLib|UefiPayloadPkg/Library/ResetSystemLib/ResetSystemLib.inf
> 
>    SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
> 
> -!if $(UNIVERSAL_PAYLOAD) == TRUE
> 
> -  PlatformHookLib|UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib.inf
> 
> -!else
> 
>    PlatformHookLib|UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
> 
> -!endif
> 
>    PlatformBootManagerLib|UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> 
>    IoApicLib|PcAtChipsetPkg/Library/BaseIoApicLib/BaseIoApicLib.inf
> 
> 
> 
> @@ -366,6 +357,7 @@
> 
> 
>    gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber|$(MAX_LOGICAL_PROCESSORS)
> 
>    gUefiCpuPkgTokenSpaceGuid.PcdCpuNumberOfReservedVariableMtrrs|0
> 
> +  gUefiPayloadPkgTokenSpaceGuid.PcdBootloaderParameter|0
> 
> 
> 
>  ################################################################################
> 
>  #
> 
> --
> 2.32.0.windows.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#81319): https://edk2.groups.io/g/devel/message/81319
Mute This Topic: https://groups.io/mt/85942633/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-