From: "Ni, Ray" <ray.ni@intel.com>
To: "Dong, Guo" <guo.dong@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Ma, Maurice" <maurice.ma@intel.com>,
"You, Benjamin" <benjamin.you@intel.com>
Subject: Re: [`edk2-devel][PATCH] UefiPayloadPkg: Remove asm code and sharing libraries
Date: Thu, 30 Sep 2021 07:29:29 +0000 [thread overview]
Message-ID: <CY4PR1101MB2072D56CA32B02E1FD31BF678CAA9@CY4PR1101MB2072.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20210929054903.1188-1-guo.dong@intel.com>
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
prev parent reply other threads:[~2021-09-30 7:29 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-29 5:49 [`edk2-devel][PATCH] UefiPayloadPkg: Remove asm code and sharing libraries Guo Dong
2021-09-30 7:29 ` Ni, Ray [this message]
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=CY4PR1101MB2072D56CA32B02E1FD31BF678CAA9@CY4PR1101MB2072.namprd11.prod.outlook.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