public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Heng Luo" <heng.luo@intel.com>
To: "Chaganty, Rangasai V" <rangasai.v.chaganty@intel.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Desimone, Nathaniel L" <nathaniel.l.desimone@intel.com>
Subject: Re: [Patch V2 4/8] TigerlakeOpenBoardPkg/TigerlakeURvp: Add library instances
Date: Wed, 10 Feb 2021 03:58:27 +0000	[thread overview]
Message-ID: <MWHPR11MB18058C32FBB6E89874EC1F1A938D9@MWHPR11MB1805.namprd11.prod.outlook.com> (raw)
In-Reply-To: <DM6PR11MB44765E7A1EA01F4D33FE7B27B68D9@DM6PR11MB4476.namprd11.prod.outlook.com>

I will send Patch V3 to remove commented code in SiliconEnableAcpi() and associated comments.

> -----Original Message-----
> From: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>
> Sent: Wednesday, February 10, 2021 8:39 AM
> To: Luo, Heng <heng.luo@intel.com>; devel@edk2.groups.io
> Cc: Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>
> Subject: RE: [Patch V2 4/8] TigerlakeOpenBoardPkg/TigerlakeURvp: Add library
> instances
> 
> Please remove commented code in SiliconEnableAcpi() and associated
> comments.
> 
> Thanks,
> Sai
> 
> -----Original Message-----
> From: Luo, Heng <heng.luo@intel.com>
> Sent: Tuesday, February 09, 2021 12:46 AM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Desimone,
> Nathaniel L <nathaniel.l.desimone@intel.com>
> Subject: [Patch V2 4/8] TigerlakeOpenBoardPkg/TigerlakeURvp: Add library
> instances
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3175
> 
> Adds the following library instances:
>   * TigerlakeURvp/Library/BoardAcpiLib
>   * TigerlakeURvp/Library/BoardInitLib
>   * TigerlakeURvp/Library/PeiPlatformHookLib
> 
> Cc: Sai Chaganty <rangasai.v.chaganty@intel.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> Signed-off-by: Heng Luo <heng.luo@intel.com>
> ---
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/S
> mmMultiBoardAcpiSupportLib.c      |  88
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/S
> mmMultiBoardAcpiSupportLib.inf    |  43
> +++++++++++++++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/S
> mmSiliconAcpiEnableLib.c          | 160
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/S
> mmTigerlakeURvpAcpiEnableLib.c    |  51
> +++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Bo
> ardPchInitPreMemLib.c            | 160
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Bo
> ardSaInitPreMemLib.c             |  96
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Gpi
> oTableTigerlakeUDdr4Rvp.h       |  93
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Gpi
> oTableTigerlakeUDdr4RvpPreMem.h |  33
> +++++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Pei
> MultiBoardInitPostMemLib.c      |  41
> +++++++++++++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Pei
> MultiBoardInitPostMemLib.inf    |  49
> +++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Pei
> MultiBoardInitPreMemLib.c       |  88
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Pei
> MultiBoardInitPreMemLib.inf     | 115
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Pei
> TigerlakeURvpDetect.c           |  39
> +++++++++++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Pei
> TigerlakeURvpInitPostMemLib.c   | 153
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Pei
> TigerlakeURvpInitPreMemLib.c    | 445
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/Tig
> erlakeURvpInit.h                |  23 +++++++++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/PeiPlatformHoo
> kLib/PeiPlatformHooklib.c         | 212
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> 
> Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/PeiPlatformHoo
> kLib/PeiPlatformHooklib.inf       |  58
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  18 files changed, 1947 insertions(+)
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmMultiBoardAcpiSupportLib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmMultiBoardAcpiSupportLib.c
> new file mode 100644
> index 0000000000..1436d9b79a
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmMultiBoardAcpiSupportLib.c
> @@ -0,0 +1,88 @@
> +/** @file
> 
> +  Tiger Lake U RVP SMM Multi-Board ACPI Support library
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <Base.h>
> 
> +#include <Uefi.h>
> 
> +#include <PiDxe.h>
> 
> +#include <Library/BaseLib.h>
> 
> +#include <Library/IoLib.h>
> 
> +#include <Library/BoardAcpiEnableLib.h>
> 
> +#include <Library/MultiBoardAcpiSupportLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +
> 
> +#include <PlatformBoardId.h>
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TglBoardEnableAcpi (
> 
> +  IN BOOLEAN  EnableSci
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TglBoardDisableAcpi (
> 
> +  IN BOOLEAN  DisableSci
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +SiliconEnableAcpi (
> 
> +  IN BOOLEAN  EnableSci
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +SiliconDisableAcpi (
> 
> +  IN BOOLEAN  DisableSci
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +MultiBoardEnableAcpi (
> 
> +  IN BOOLEAN  EnableSci
> 
> +  )
> 
> +{
> 
> +  SiliconEnableAcpi (EnableSci);
> 
> +  return TglBoardEnableAcpi (EnableSci);
> 
> +}
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +MultiBoardDisableAcpi (
> 
> +  IN BOOLEAN  DisableSci
> 
> +  )
> 
> +{
> 
> +  SiliconDisableAcpi (DisableSci);
> 
> +  return TglBoardDisableAcpi (DisableSci);
> 
> +}
> 
> +
> 
> +BOARD_ACPI_ENABLE_FUNC  mBoardAcpiEnableFunc = {
> 
> +  MultiBoardEnableAcpi,
> 
> +  MultiBoardDisableAcpi,
> 
> +};
> 
> +
> 
> +/**
> 
> +  The constructor function to register mBoardAcpiEnableFunc function.
> 
> +
> 
> +  @param[in]  ImageHandle  The firmware allocated handle for the EFI image.
> 
> +  @param[in]  SystemTable  A pointer to the EFI System Table.
> 
> +
> 
> +  @retval     EFI_SUCCESS  This constructor always return EFI_SUCCESS.
> 
> +                           It will ASSERT on errors.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +SmmMultiBoardAcpiSupportLibConstructor (
> 
> +  IN EFI_HANDLE        ImageHandle,
> 
> +  IN EFI_SYSTEM_TABLE  *SystemTable
> 
> +  )
> 
> +{
> 
> +  DEBUG ((DEBUG_INFO, "SKU_ID: 0x%x\n", LibPcdGetSku()));
> 
> +  return RegisterBoardAcpiEnableFunc (&mBoardAcpiEnableFunc);
> 
> +}
> 
> +
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmMultiBoardAcpiSupportLib.inf
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmMultiBoardAcpiSupportLib.inf
> new file mode 100644
> index 0000000000..6f6a9272f9
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmMultiBoardAcpiSupportLib.inf
> @@ -0,0 +1,43 @@
> +## @file
> 
> +#  Tiger Lake U RVP SMM Multi-Board ACPI Support library
> 
> +#
> 
> +#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010017
> 
> +  BASE_NAME                      = SmmMultiBoardAcpiSupportLib
> 
> +  FILE_GUID                      = 8929A54E-7ED8-4AB3-BEBB-C0367BDBBFF5
> 
> +  VERSION_STRING                 = 1.0
> 
> +  MODULE_TYPE                    = DXE_SMM_DRIVER
> 
> +  LIBRARY_CLASS                  = NULL
> 
> +  CONSTRUCTOR                    = SmmMultiBoardAcpiSupportLibConstructor
> 
> +
> 
> +#
> 
> +# The following information is for reference only and not required by the build
> tools.
> 
> +#
> 
> +# VALID_ARCHITECTURES = IA32 X64 IPF EBC
> 
> +#
> 
> +
> 
> +[LibraryClasses]
> 
> +  BaseLib
> 
> +  IoLib
> 
> +  PciLib
> 
> +  MmPciLib
> 
> +  PchCycleDecodingLib
> 
> +  PchPciBdfLib
> 
> +  PmcLib
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +  MinPlatformPkg/MinPlatformPkg.dec
> 
> +  TigerlakeOpenBoardPkg/OpenBoardPkg.dec
> 
> +  TigerlakeSiliconPkg/SiPkg.dec
> 
> +
> 
> +[Sources]
> 
> +  SmmTigerlakeURvpAcpiEnableLib.c
> 
> +  SmmSiliconAcpiEnableLib.c
> 
> +  SmmMultiBoardAcpiSupportLib.c
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmSiliconAcpiEnableLib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmSiliconAcpiEnableLib.c
> new file mode 100644
> index 0000000000..32afeb405e
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmSiliconAcpiEnableLib.c
> @@ -0,0 +1,160 @@
> +/** @file
> 
> +  Tiger Lake U RVP SMM Silicon ACPI Enable library
> 
> +
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <Base.h>
> 
> +#include <Uefi.h>
> 
> +#include <PiDxe.h>
> 
> +#include <Library/BaseLib.h>
> 
> +#include <Library/IoLib.h>
> 
> +#include <Library/PciSegmentLib.h>
> 
> +#include <Library/BoardAcpiEnableLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/MmPciLib.h>
> 
> +#include <Library/PmcLib.h>
> 
> +#include <Library/PchPciBdfLib.h>
> 
> +#include <Register/PchRegs.h>
> 
> +#include <Register/PchRegsLpc.h>
> 
> +#include <Register/PmcRegs.h>
> 
> +#include <Register/RtcRegs.h>
> 
> +
> 
> +/**
> 
> +  Clear Port 80h
> 
> +
> 
> +  SMI handler to enable ACPI mode
> 
> +
> 
> +  Dispatched on reads from APM port with value EFI_ACPI_ENABLE_SW_SMI
> 
> +
> 
> +  Disables the SW SMI Timer.
> 
> +  ACPI events are disabled and ACPI event status is cleared.
> 
> +  SCI mode is then enabled.
> 
> +
> 
> +  Clear SLP SMI status
> 
> +  Enable SLP SMI
> 
> +
> 
> +  Disable SW SMI Timer
> 
> +
> 
> +  Clear all ACPI event status and disable all ACPI events
> 
> +
> 
> +  Disable PM sources except power button
> 
> +  Clear status bits
> 
> +
> 
> +  Disable GPE0 sources
> 
> +  Clear status bits
> 
> +
> 
> +  Disable GPE1 sources
> 
> +  Clear status bits
> 
> +
> 
> +  Guarantee day-of-month alarm is invalid (ACPI 1.0 section 4.7.2.4)
> 
> +
> 
> +  Enable SCI
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +SiliconEnableAcpi (
> 
> +  IN BOOLEAN  EnableSci
> 
> +  )
> 
> +{
> 
> +
> 
> +  UINT32                              SmiEn;
> 
> +  UINT32                              SmiSts;
> 
> +  UINT32                              ULKMC;
> 
> +  UINTN                               LpcBaseAddress;
> 
> +  UINT16                              AcpiBaseAddr;
> 
> +  UINT32                              Pm1Cnt;
> 
> +
> 
> +  LpcBaseAddress = LpcPciCfgBase ();
> 
> +
> 
> +  //
> 
> +  // Get the ACPI Base Address
> 
> +  //
> 
> +  AcpiBaseAddr = PmcGetAcpiBase();
> 
> +  //
> 
> +  // BIOS must also ensure that CF9GR is cleared and locked before handing
> control to the
> 
> +  // OS in order to prevent the host from issuing global resets and resetting ME
> 
> +  //
> 
> +  // EDK2: To match PCCG current BIOS behavior, do not lock CF9 Global Reset
> 
> +  // MmioWrite32 (
> 
> +  //     PmcBaseAddress + R_PCH_PMC_ETR3),
> 
> +  //     PmInit);
> 
> +
> 
> +  //
> 
> +  // Clear Port 80h
> 
> +  //
> 
> +  IoWrite8 (0x80, 0);
> 
> +
> 
> +  //
> 
> +  // Disable SW SMI Timer and clean the status
> 
> +  //
> 
> +  SmiEn = IoRead32 (AcpiBaseAddr + R_ACPI_IO_SMI_EN);
> 
> +  SmiEn &= ~(B_ACPI_IO_SMI_EN_LEGACY_USB2 |
> B_ACPI_IO_SMI_EN_SWSMI_TMR | B_ACPI_IO_SMI_EN_LEGACY_USB);
> 
> +  IoWrite32 (AcpiBaseAddr + R_ACPI_IO_SMI_EN, SmiEn);
> 
> +
> 
> +  SmiSts = IoRead32 (AcpiBaseAddr + R_ACPI_IO_SMI_STS);
> 
> +  SmiSts |= B_ACPI_IO_SMI_EN_LEGACY_USB2 |
> B_ACPI_IO_SMI_EN_SWSMI_TMR | B_ACPI_IO_SMI_EN_LEGACY_USB;
> 
> +  IoWrite32 (AcpiBaseAddr + R_ACPI_IO_SMI_STS, SmiSts);
> 
> +
> 
> +  //
> 
> +  // Disable port 60/64 SMI trap if they are enabled
> 
> +  //
> 
> +  ULKMC = MmioRead32 (LpcBaseAddress + R_LPC_CFG_ULKMC) &
> ~(B_LPC_CFG_ULKMC_60REN | B_LPC_CFG_ULKMC_60WEN |
> B_LPC_CFG_ULKMC_64REN | B_LPC_CFG_ULKMC_64WEN |
> B_LPC_CFG_ULKMC_A20PASSEN);
> 
> +  MmioWrite32 (LpcBaseAddress + R_LPC_CFG_ULKMC, ULKMC);
> 
> +
> 
> +  //
> 
> +  // Disable PM sources except power button
> 
> +  //
> 
> +  IoWrite16 (AcpiBaseAddr + R_ACPI_IO_PM1_EN,
> B_ACPI_IO_PM1_EN_PWRBTN);
> 
> +
> 
> +  //
> 
> +  // Clear PM status except Power Button status for RapidStart Resume
> 
> +  //
> 
> +  IoWrite16 (AcpiBaseAddr + R_ACPI_IO_PM1_STS, 0xFEFF);
> 
> +
> 
> +  //
> 
> +  // Guarantee day-of-month alarm is invalid (ACPI 1.0 section 4.7.2.4)
> 
> +  //
> 
> +  IoWrite8 (R_RTC_IO_INDEX_ALT, R_RTC_IO_REGD);
> 
> +  IoWrite8 (R_RTC_IO_TARGET_ALT, 0x0);
> 
> +
> 
> +  //
> 
> +  // Enable SCI
> 
> +  //
> 
> +  if (EnableSci) {
> 
> +    Pm1Cnt = IoRead32 (AcpiBaseAddr + R_ACPI_IO_PM1_CNT);
> 
> +    Pm1Cnt |= B_ACPI_IO_PM1_CNT_SCI_EN;
> 
> +    IoWrite32 (AcpiBaseAddr + R_ACPI_IO_PM1_CNT, Pm1Cnt);
> 
> +  }
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +SiliconDisableAcpi (
> 
> +  IN BOOLEAN  DisableSci
> 
> +  )
> 
> +{
> 
> +
> 
> +  UINT16                              AcpiBaseAddr;
> 
> +  UINT32                              Pm1Cnt;
> 
> +
> 
> +  //
> 
> +  // Get the ACPI Base Address
> 
> +  //
> 
> +  AcpiBaseAddr = PmcGetAcpiBase();
> 
> +  //
> 
> +  // Disable SCI
> 
> +  //
> 
> +  if (DisableSci) {
> 
> +    Pm1Cnt = IoRead32 (AcpiBaseAddr + R_ACPI_IO_PM1_CNT);
> 
> +    Pm1Cnt &= ~B_ACPI_IO_PM1_CNT_SCI_EN;
> 
> +    IoWrite32 (AcpiBaseAddr + R_ACPI_IO_PM1_CNT, Pm1Cnt);
> 
> +  }
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmTigerlakeURvpAcpiEnableLib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmTigerlakeURvpAcpiEnableLib.c
> new file mode 100644
> index 0000000000..3eb302c30d
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardAcpiLib/
> SmmTigerlakeURvpAcpiEnableLib.c
> @@ -0,0 +1,51 @@
> +/** @file
> 
> +  Tiger Lake U RVP SMM Board ACPI Enable library
> 
> +
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <Base.h>
> 
> +#include <Uefi.h>
> 
> +#include <PiDxe.h>
> 
> +#include <Library/BaseLib.h>
> 
> +#include <Library/IoLib.h>
> 
> +#include <Library/BoardAcpiTableLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <PlatformBoardId.h>
> 
> +
> 
> +/**
> 
> +  Enable Board Acpi
> 
> +
> 
> +  @param[in]  EnableSci     Enable SCI if EnableSci parameters is True.
> 
> +
> 
> +  @retval     EFI_SUCCESS   The function always return successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TglBoardEnableAcpi (
> 
> +  IN BOOLEAN  EnableSci
> 
> +  )
> 
> +{
> 
> +  // enable additional board register
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Disable Board Acpi
> 
> +
> 
> +  @param[in]  DisableSci    Disable SCI if DisableSci parameters is True.
> 
> +
> 
> +  @retval     EFI_SUCCESS   The function always return successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TglBoardDisableAcpi (
> 
> +  IN BOOLEAN  DisableSci
> 
> +  )
> 
> +{
> 
> +  // enable additional board register
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/B
> oardPchInitPreMemLib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/B
> oardPchInitPreMemLib.c
> new file mode 100644
> index 0000000000..1c7e574f7d
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/B
> oardPchInitPreMemLib.c
> @@ -0,0 +1,160 @@
> +/** @file
> 
> +  Source code for the board PCH configuration Pcd init functions for Pre-
> Memory Init phase.
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include "TigerlakeURvpInit.h"
> 
> +#include "GpioTableTigerlakeUDdr4RvpPreMem.h"
> 
> +
> 
> +#include <PlatformBoardConfig.h>
> 
> +#include <Include/PlatformBoardId.h>
> 
> +
> 
> +#include <Library/GpioLib.h>
> 
> +
> 
> +/**
> 
> +  Board Root Port Clock Info configuration init function for PEI pre-memory
> phase.
> 
> +
> 
> +  @retval EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +RootPortClkInfoInit (
> 
> +  IN UINT16    BoardId
> 
> +  )
> 
> +{
> 
> +  PCD64_BLOB Clock[PCH_MAX_PCIE_CLOCKS];
> 
> +  UINT32 Index;
> 
> +
> 
> +  //
> 
> +  // The default clock assignment will be FREE_RUNNING, which corresponds to
> PchClockUsageUnspecified
> 
> +  // This is safe but power-consuming setting. If Platform code doesn't contain
> port-clock map for a given board,
> 
> +  // the clocks will keep on running anyway, allowing PCIe devices to operate.
> Downside is that clocks will
> 
> +  // continue to draw power. To prevent this, remember to provide port-clock
> map for every board.
> 
> +  //
> 
> +  for (Index = 0; Index < PCH_MAX_PCIE_CLOCKS; Index++) {
> 
> +    Clock[Index].PcieClock.ClkReqSupported = TRUE;
> 
> +    Clock[Index].PcieClock.ClockUsage = FREE_RUNNING;
> 
> +  }
> 
> +
> 
> +  ///
> 
> +  /// Assign ClkReq signal to root port. (Base 0)
> 
> +  /// For LP, Set 0 - 6
> 
> +  /// For H,  Set 0 - 15
> 
> +  /// Note that if GbE is enabled, ClkReq assigned to GbE will not be available
> for Root Port.
> 
> +  ///
> 
> +
> 
> +  switch (BoardId) {
> 
> +    // CLKREQ
> 
> +    case BoardIdTglUDdr4:
> 
> +      Clock[0].PcieClock.ClockUsage = PCIE_PEG;
> 
> +      Clock[1].PcieClock.ClockUsage = PCIE_PCH + 2;
> 
> +      Clock[2].PcieClock.ClockUsage = PCIE_PCH + 3;
> 
> +      Clock[3].PcieClock.ClockUsage = PCIE_PCH + 8;
> 
> +      Clock[4].PcieClock.ClockUsage = LAN_CLOCK;
> 
> +      Clock[5].PcieClock.ClockUsage = PCIE_PCH + 7;
> 
> +      Clock[6].PcieClock.ClockUsage = PCIE_PCH + 4;
> 
> +      break;
> 
> +    default:
> 
> +
> 
> +      break;
> 
> +  }
> 
> +
> 
> +  PcdSet64S (PcdPcieClock0,  Clock[ 0].Blob);
> 
> +  PcdSet64S (PcdPcieClock1,  Clock[ 1].Blob);
> 
> +  PcdSet64S (PcdPcieClock2,  Clock[ 2].Blob);
> 
> +  PcdSet64S (PcdPcieClock3,  Clock[ 3].Blob);
> 
> +  PcdSet64S (PcdPcieClock4,  Clock[ 4].Blob);
> 
> +  PcdSet64S (PcdPcieClock5,  Clock[ 5].Blob);
> 
> +  PcdSet64S (PcdPcieClock6,  Clock[ 6].Blob);
> 
> +  PcdSet64S (PcdPcieClock7,  Clock[ 7].Blob);
> 
> +  PcdSet64S (PcdPcieClock8,  Clock[ 8].Blob);
> 
> +  PcdSet64S (PcdPcieClock9,  Clock[ 9].Blob);
> 
> +  PcdSet64S (PcdPcieClock10, Clock[10].Blob);
> 
> +  PcdSet64S (PcdPcieClock11, Clock[11].Blob);
> 
> +  PcdSet64S (PcdPcieClock12, Clock[12].Blob);
> 
> +  PcdSet64S (PcdPcieClock13, Clock[13].Blob);
> 
> +  PcdSet64S (PcdPcieClock14, Clock[14].Blob);
> 
> +  PcdSet64S (PcdPcieClock15, Clock[15].Blob);
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Board USB related configuration init function for PEI pre-memory phase.
> 
> +
> 
> +  @param[in]  BoardId   An unsigned integrer represent the board id.
> 
> +
> 
> +  @retval EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +UsbConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +
> 
> +/**
> 
> +  Board GPIO Group Tier configuration init function for PEI pre-memory phase.
> 
> +
> 
> +  @param[in]  BoardId   An unsigned integrer represent the board id.
> 
> +
> 
> +  @retval EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +GpioGroupTierInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +
> 
> +/**
> 
> +  GPIO init function for PEI pre-memory phase.
> 
> +
> 
> +  @param[in]  BoardId   An unsigned integrer represent the board id.
> 
> +
> 
> +  @retval EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +GpioTablePreMemInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +
> 
> +  //
> 
> +  // GPIO Table Init.
> 
> +  //
> 
> +  switch (BoardId) {
> 
> +    case BoardIdTglUDdr4:
> 
> +      PcdSet32S (PcdBoardGpioTablePreMem, (UINTN)
> mGpioTablePreMemTglUDdr4);
> 
> +      PcdSet16S (PcdBoardGpioTablePreMemSize,
> mGpioTablePreMemTglUDdr4Size);
> 
> +      break;
> 
> +
> 
> +    default:
> 
> +      break;
> 
> +  }
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  PmConfig init function for PEI pre-memory phase.
> 
> +
> 
> +  @param[in]  BoardId   An unsigned integrer represent the board id.
> 
> +
> 
> +  @retval EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +PchPmConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/B
> oardSaInitPreMemLib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/B
> oardSaInitPreMemLib.c
> new file mode 100644
> index 0000000000..b468e21ec9
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/B
> oardSaInitPreMemLib.c
> @@ -0,0 +1,96 @@
> +/** @file
> 
> + Source code for the board SA configuration Pcd init functions in Pre-Memory
> init phase.
> 
> +
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include "TigerlakeURvpInit.h"
> 
> +#include <Pins/GpioPinsVer2Lp.h>
> 
> +#include <PlatformBoardId.h>
> 
> +#include <PlatformBoardConfig.h>
> 
> +
> 
> +/**
> 
> +  MRC configuration init function for PEI pre-memory phase.
> 
> +
> 
> +  @param[in]  BoardId           An unsigned integer represent the board id.
> 
> +
> 
> +  @retval EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +SaMiscConfigInit (
> 
> +  IN UINT16         BoardId
> 
> +  )
> 
> +{
> 
> +  //
> 
> +  // UserBd
> 
> +  //
> 
> +  switch (BoardId) {
> 
> +    case BoardIdTglUDdr4:
> 
> +      //
> 
> +      // Assign UserBd to 5 which is assigned to MrcInputs->BoardType btUser4
> for ULT platforms.
> 
> +      // This is required to skip Memory voltage programming based on GPIO's in
> MRC
> 
> +      //
> 
> +      PcdSet8S (PcdSaMiscUserBd, 5); // MrcBoardType btUser4 for ULT platform
> 
> +      break;
> 
> +
> 
> +    default:
> 
> +      // MiscPeiPreMemConfig.UserBd = 0 by default.
> 
> +      break;
> 
> +  }
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Board Memory Init related configuration init function for PEI pre-memory
> phase.
> 
> +
> 
> +  @param[in]  BoardId   An unsigned integrer represent the board id.
> 
> +
> 
> +  @retval EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +MrcConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +
> 
> +  PcdSet8S (PcdMrcSpdAddressTable0, 0xA0);
> 
> +  PcdSet8S (PcdMrcSpdAddressTable1, 0xA2);
> 
> +  PcdSet8S (PcdMrcSpdAddressTable2, 0xA4);
> 
> +  PcdSet8S (PcdMrcSpdAddressTable3, 0xA6);
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Board SA related GPIO configuration init function for PEI pre-memory phase.
> 
> +
> 
> +  @param[in]  BoardId   An unsigned integer represent the board id.
> 
> +
> 
> +  @retval EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +SaGpioConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  SA Display DDI configuration init function for PEI pre-memory phase.
> 
> +
> 
> +  @param[in]  BoardId       An unsigned integer represent the board id.
> 
> +
> 
> +  @retval     EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +SaDisplayConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/G
> pioTableTigerlakeUDdr4Rvp.h
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/G
> pioTableTigerlakeUDdr4Rvp.h
> new file mode 100644
> index 0000000000..0b605698c0
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/G
> pioTableTigerlakeUDdr4Rvp.h
> @@ -0,0 +1,93 @@
> +/** @file
> 
> +  GPIO definition table for Tiger Lake U RVP
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#ifndef _GPIO_TABLE_TIGER_LAKE_U_DDR4_RVP_H_
> 
> +#define _GPIO_TABLE_TIGER_LAKE_U_DDR4_RVP_H_
> 
> +
> 
> +#include <Pins/GpioPinsVer2Lp.h>
> 
> +#include <Library/GpioLib.h>
> 
> +#include <Library/GpioConfig.h>
> 
> +
> 
> +GPIO_INIT_CONFIG mGpioTableTglUDdr4[] =
> 
> +{
> 
> +  // M.2 Key-E - WLAN/BT
> 
> +  {GPIO_VER2_LP_GPP_A13, {GpioPadModeGpio, GpioHostOwnDefault,
> GpioDirOut,   GpioOutHigh,    GpioIntDis,              GpioHostDeepReset,
> GpioTermNone, GpioPadConfigUnlock }}, // BT_RF_KILL_N
> 
> +  {GPIO_VER2_LP_GPP_B15, {GpioPadModeGpio, GpioHostOwnDefault,
> GpioDirOut,   GpioOutHigh,    GpioIntDis,              GpioHostDeepReset,
> GpioTermNone, GpioPadConfigUnlock }}, // WIFI_RF_KILL_N
> 
> +  {GPIO_VER2_LP_GPP_C22, {GpioPadModeGpio, GpioHostOwnDefault,
> GpioDirOut,   GpioOutHigh,    GpioIntDis,              GpioHostDeepReset,
> GpioTermNone, GpioPadConfigUnlock }}, // WLAN_RST_N
> 
> +  {GPIO_VER2_LP_GPP_C23, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirInInv, GpioOutDefault, GpioIntLevel|GpioIntSci, GpioHostDeepReset,
> GpioTermNone, GpioPadConfigUnlock }}, // WIFI_WAKE_N
> 
> +  {GPIO_VER2_LP_GPP_H19, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirInInv, GpioOutDefault, GpioIntLevel|GpioIntSci, GpioHostDeepReset,
> GpioTermNone, GpioPadConfigUnlock }}, // UART_BT_WAKE_N : Not default
> POR
> 
> +  {GPIO_VER2_LP_GPP_A10, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirIn,    GpioOutDefault, GpioIntDis,              GpioPlatformReset,
> GpioTermNone}},                       // M.2 BT
> 
> +
> 
> +  // X4 Pcie Slot for Gen3 and Gen 4
> 
> +  {GPIO_VER2_LP_GPP_A14, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutLow,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //ONBOARD_X4_PCIE_SLOT1_PWREN_N
> 
> +  {GPIO_VER2_LP_GPP_C13, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //ONBOARD_X4_PCIE_SLOT1_RESET_N
> 
> +  {GPIO_VER2_LP_GPP_F5,  {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirInInv,  GpioOutDefault,GpioIntLevel|GpioIntSci,GpioHostDeepReset,
> GpioTermNone,  GpioPadConfigUnlock  }},
> //ONBOARD_X4_PCIE_SLOT1_WAKE_N
> 
> +  {GPIO_VER2_LP_GPP_F20, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //ONBOARD_X4_PCIE_SLOT1_DGPU_SEL
> 
> +  {GPIO_VER2_LP_GPP_F21, {GpioPadModeGpio, GpioHostOwnAcpi, GpioDirIn,
> GpioOutDefault,GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //ONBOARD_X4_PCIE_SLOT1_DGPU_PWROK
> 
> +
> 
> +  // TBT Re-Timers
> 
> +  {GPIO_VER2_LP_GPD7,    {GpioPadModeGpio, GpioHostOwnAcpi, GpioDirOut,
> GpioOutHigh,  GpioIntDis,GpioDswReset,  GpioTermNone}},
> //TCP_RETIMER_PERST_N
> 
> +
> 
> +  // Battery Charger Vmin to PCH PROCHOT, derived from ICL
> 
> +  {GPIO_VER2_LP_GPP_B2,  {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirInInv,  GpioOutDefault,GpioIntEdge|GpioIntSci,GpioPlatformReset,
> GpioTermNone,  GpioPadConfigUnlock  }},  //BC_PROCHOT_N
> 
> +
> 
> +  // SATA Direct Connect
> 
> +  {GPIO_VER2_LP_GPP_B4,  {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //SATA_DIRECT_PWREN
> 
> +
> 
> +  // FPS
> 
> +  {GPIO_VER2_LP_GPP_B14, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //FPS_RST_N
> 
> +  {GPIO_VER2_LP_GPP_E3,  {GpioPadModeGpio, GpioHostOwnGpio, GpioDirIn,
> GpioOutDefault,GpioIntLevel|GpioIntApic,GpioPlatformReset,  GpioTermNone,
> GpioPadConfigUnlock  }},  //FPS_INT
> 
> +
> 
> +  // PCH M.2 SSD
> 
> +  {GPIO_VER2_LP_GPP_B16, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //M2_PCH_SSD_PWREN
> 
> +  {GPIO_VER2_LP_GPP_H0,  {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //M2_SSD_RST_N
> 
> +
> 
> +
> 
> +  // Camera
> 
> +  {GPIO_VER2_LP_GPP_B23, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //CRD_CAM_PWREN - CAM1
> 
> +  {GPIO_VER2_LP_GPP_C15, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //WF_CAM_RST_N  - CAM1
> 
> +
> 
> +  {GPIO_VER2_LP_GPP_H12, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //CAM2_RST_N
> 
> +
> 
> +  {GPIO_VER2_LP_GPP_H15, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //CAM3_PWREN
> 
> +  {GPIO_VER2_LP_GPP_H13, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //CAM3_RST_N
> 
> +
> 
> +  // Camera Common GPIO's for all Camera, Rework Options
> 
> +  {GPIO_VER2_LP_GPP_B18, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutLow,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //CRD_CAM_STROBE_1
> 
> +  {GPIO_VER2_LP_GPP_C2,  {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //WF_CAM_CLK_EN
> 
> +
> 
> +  // Audio
> 
> +  {GPIO_VER2_LP_GPP_C5,  {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //SPKR_PD_N
> 
> +  {GPIO_VER2_LP_GPP_C12, {GpioPadModeGpio, GpioHostOwnGpio,
> GpioDirInInv,  GpioOutDefault,GpioIntLevel|GpioIntApic,GpioPlatformReset,
> GpioTermNone,  GpioPadConfigUnlock  }},  // CODEC_INT_N
> 
> +
> 
> +  // Touch Pad
> 
> +  // Touch Pad and Touch Panel 2 share the same Power Enable, default is
> Touch pad
> 
> +  {GPIO_VER2_LP_GPP_H1,  {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //TCH_PAD_LS_EN - PWR_En
> 
> +  {GPIO_VER2_LP_GPP_C8,  {GpioPadModeGpio, GpioHostOwnGpio,
> GpioDirInInv,  GpioOutDefault,GpioIntEdge|GpioIntApic,GpioPlatformReset,
> GpioTermNone,  GpioPadConfigUnlock  }},  //TCH_PAD_INT_N
> 
> +
> 
> +  // EC
> 
> +  {GPIO_VER2_LP_GPP_E7,  {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirInInv,  GpioOutDefault,GpioIntLevel|GpioIntSmi,GpioPlatformReset,
> GpioTermNone,  GpioPadConfigUnlock  }},  //EC_SMI_N
> 
> +  {GPIO_VER2_LP_GPP_E8,  {GpioPadModeGpio, GpioHostOwnAcpi, GpioDirOut,
> GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //EC_SLP_S0_CS_N
> 
> +
> 
> +  // SPI TPM, derived from ICL
> 
> +  {GPIO_VER2_LP_GPP_C14, {GpioPadModeGpio, GpioHostOwnGpio, GpioDirIn,
> GpioOutDefault,GpioIntLevel | GpioIntApic, GpioHostDeepReset,
> GpioTermWpu20K,  GpioPadConfigUnlock  }},  //SPI_TPM_INT_N
> 
> +
> 
> +  // TypeC BIAS : Not used by default in RVP, derived from ICL
> 
> +  {GPIO_VER2_LP_GPP_E22, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutLow,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //DISP_AUX_P_BIAS_GPIO
> 
> +  {GPIO_VER2_LP_GPP_E23, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //DISP_AUX_N_BIAS_GPIO
> 
> +
> 
> +  // LAN : Not used by Default in RVP
> 
> +
> 
> +  // X1 Pcie Slot
> 
> +  {GPIO_VER2_LP_GPP_F4,  {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirInInv,  GpioOutDefault,GpioIntLevel|GpioIntSci,GpioHostDeepReset,
> GpioTermNone,  GpioPadConfigUnlock  }},  //X1 Slot WAKE
> 
> +  {GPIO_VER2_LP_GPP_F10, {GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut,  GpioOutHigh,   GpioIntDis,GpioPlatformReset,  GpioTermNone}},
> //X1 Slot RESET
> 
> +};
> 
> +
> 
> +
> 
> +UINT16 mGpioTableTglUDdr4Size = sizeof (mGpioTableTglUDdr4) / sizeof
> (GPIO_INIT_CONFIG);
> 
> +
> 
> +#endif // _GPIO_TABLE_TIGER_LAKE_U_DDR4_RVP_H_
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/G
> pioTableTigerlakeUDdr4RvpPreMem.h
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/G
> pioTableTigerlakeUDdr4RvpPreMem.h
> new file mode 100644
> index 0000000000..7b08676037
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/G
> pioTableTigerlakeUDdr4RvpPreMem.h
> @@ -0,0 +1,33 @@
> +/** @file
> 
> +  GPIO definition table for Tiger Lake U DDR4 RVP Pre-Memory
> 
> +
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#ifndef _GPIO_TABLE_TIGER_LAKE_U_DDR4_RVP_PREMEM_H_
> 
> +#define _GPIO_TABLE_TIGER_LAKE_U_DDR4_RVP_PREMEM_H_
> 
> +
> 
> +#include <Pins/GpioPinsVer2Lp.h>
> 
> +#include <Library/GpioLib.h>
> 
> +#include <Library/GpioConfig.h>
> 
> +
> 
> +GPIO_INIT_CONFIG mGpioTablePreMemTglUDdr4[] =
> 
> +{
> 
> +  { GPIO_VER2_LP_GPP_A14, { GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut, GpioOutLow,  GpioIntDis, GpioPlatformReset, GpioTermNone } },
> //ONBOARD_X4_PCIE_SLOT1_PWREN_N
> 
> +  { GPIO_VER2_LP_GPP_C13, { GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut, GpioOutHigh, GpioIntDis, GpioPlatformReset, GpioTermNone } },
> //ONBOARD_X4_PCIE_SLOT1_RESET_N
> 
> +  // CPU M.2 SSD
> 
> +  { GPIO_VER2_LP_GPP_D16, { GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut, GpioOutHigh, GpioIntDis, GpioPlatformReset, GpioTermNone } },
> //CPU SSD PWREN
> 
> +  { GPIO_VER2_LP_GPP_A11, { GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut, GpioOutHigh, GpioIntDis, GpioPlatformReset, GpioTermNone } },
> //CPU SSD RESET
> 
> +  // X1 Pcie Slot
> 
> +  { GPIO_VER2_LP_GPP_F9,  { GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut, GpioOutHigh, GpioIntDis, GpioPlatformReset, GpioTermNone } },
> //X1 Slot PWREN
> 
> +  { GPIO_VER2_LP_GPP_A23, { GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut, GpioOutLow,  GpioIntDis, GpioPlatformReset, GpioTermNone } },
> //TC_RETIMER_FORCE_PWR
> 
> +  // Camera
> 
> +  { GPIO_VER2_LP_GPP_R6,  { GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut, GpioOutHigh, GpioIntDis, GpioPlatformReset, GpioTermNone } },
> //CAM2_PWREN/BIOS_REC
> 
> +  { GPIO_VER2_LP_GPP_R5,  { GpioPadModeGpio, GpioHostOwnAcpi,
> GpioDirOut, GpioOutLow,  GpioIntDis, GpioPlatformReset, GpioTermNone } },
> //CRD_CAM_PRIVACY_LED_1
> 
> +};
> 
> +
> 
> +UINT16 mGpioTablePreMemTglUDdr4Size = sizeof
> (mGpioTablePreMemTglUDdr4) / sizeof (GPIO_INIT_CONFIG);
> 
> +
> 
> +#endif  //_GPIO_TABLE_TIGER_LAKE_U_DDR4_RVP_PREMEM_H_
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPostMemLib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPostMemLib.c
> new file mode 100644
> index 0000000000..f652dcf8e6
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPostMemLib.c
> @@ -0,0 +1,41 @@
> +/** @file
> 
> +  Tiger Lake U RVP Multi-Board Initialization Post-Memory library
> 
> +
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <PiPei.h>
> 
> +#include <Library/BaseLib.h>
> 
> +#include <Library/IoLib.h>
> 
> +#include <Library/BoardInitLib.h>
> 
> +#include <Library/MultiBoardInitSupportLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +
> 
> +#include <PlatformBoardId.h>
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardInitBeforeSiliconInit(
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +BOARD_POST_MEM_INIT_FUNC  mTigerlakeURvpBoardInitFunc = {
> 
> +  TigerlakeURvpBoardInitBeforeSiliconInit,
> 
> +  NULL, // BoardInitAfterSiliconInit
> 
> +};
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +PeiTigerlakeURvpMultiBoardInitLibConstructor (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  if (LibPcdGetSku () == SkuIdTglU) {
> 
> +    DEBUG ((DEBUG_INFO, "SKU_ID: 0x%x\n", LibPcdGetSku()));
> 
> +    return RegisterBoardPostMemInit (&mTigerlakeURvpBoardInitFunc);
> 
> +  }
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPostMemLib.inf
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPostMemLib.inf
> new file mode 100644
> index 0000000000..d00f350dfe
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPostMemLib.inf
> @@ -0,0 +1,49 @@
> +## @file
> 
> +#  Component information file for TigerlakeURvpInitLib in PEI post memory
> phase.
> 
> +#
> 
> +#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010005
> 
> +  BASE_NAME                      = PeiTigerlakeURvpMultiBoardInitLib
> 
> +  FILE_GUID                      = C7D39F17-E5BA-41D9-8DFE-FF9017499280
> 
> +  MODULE_TYPE                    = BASE
> 
> +  VERSION_STRING                 = 1.0
> 
> +  LIBRARY_CLASS                  = NULL
> 
> +  CONSTRUCTOR                    = PeiTigerlakeURvpMultiBoardInitLibConstructor
> 
> +
> 
> +[LibraryClasses]
> 
> +  BaseLib
> 
> +  DebugLib
> 
> +  BaseMemoryLib
> 
> +  MemoryAllocationLib
> 
> +  PcdLib
> 
> +  MultiBoardInitSupportLib
> 
> +  PeiPlatformHookLib
> 
> +  PciSegmentLib
> 
> +
> 
> +[Packages]
> 
> +  MinPlatformPkg/MinPlatformPkg.dec
> 
> +  TigerlakeOpenBoardPkg/OpenBoardPkg.dec
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +  TigerlakeSiliconPkg/SiPkg.dec
> 
> +
> 
> +[Sources]
> 
> +  PeiTigerlakeURvpInitPostMemLib.c
> 
> +  PeiMultiBoardInitPostMemLib.c
> 
> +
> 
> +  GpioTableTigerlakeUDdr4Rvp.h
> 
> +
> 
> +[FixedPcd]
> 
> +
> 
> +[Pcd]
> 
> +  gBoardModuleTokenSpaceGuid.PcdBoardGpioTable
> 
> +  gBoardModuleTokenSpaceGuid.PcdBoardGpioTableSize
> 
> +
> 
> +  gMinPlatformPkgTokenSpaceGuid.PcdFlashFvPostMemoryBase
> 
> +  gBoardModuleTokenSpaceGuid.PcdCpuUsb30PortEnable
> 
> +
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPreMemLib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPreMemLib.c
> new file mode 100644
> index 0000000000..6200f3b86e
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPreMemLib.c
> @@ -0,0 +1,88 @@
> +/** @file
> 
> +  Tiger Lake U RVP Multi-Board Initialization Pre-Memory library
> 
> +
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <PiPei.h>
> 
> +#include <Library/BaseLib.h>
> 
> +#include <Library/IoLib.h>
> 
> +#include <Library/BoardInitLib.h>
> 
> +#include <Library/MultiBoardInitSupportLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +
> 
> +#include <PlatformBoardId.h>
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardDetect (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpMultiBoardDetect (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +EFI_BOOT_MODE
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardBootModeDetect (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardDebugInit (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardInitBeforeMemoryInit (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +
> 
> +BOARD_DETECT_FUNC  mTigerlakeURvpBoardDetectFunc = {
> 
> +  TigerlakeURvpMultiBoardDetect
> 
> +};
> 
> +
> 
> +BOARD_PRE_MEM_INIT_FUNC  mTigerlakeURvpBoardPreMemInitFunc = {
> 
> +  TigerlakeURvpBoardDebugInit,
> 
> +  TigerlakeURvpBoardBootModeDetect,
> 
> +  TigerlakeURvpBoardInitBeforeMemoryInit,
> 
> +  NULL, // BoardInitAfterMemoryInit
> 
> +  NULL, // BoardInitBeforeTempRamExit
> 
> +  NULL, // BoardInitAfterTempRamExit
> 
> +};
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpMultiBoardDetect (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  DEBUG ((DEBUG_INFO, " In TglUMultiBoardDetect \n"));
> 
> +
> 
> +  TigerlakeURvpBoardDetect ();
> 
> +
> 
> +  if (LibPcdGetSku () == SkuIdTglU) {
> 
> +    RegisterBoardPreMemInit (&mTigerlakeURvpBoardPreMemInitFunc);
> 
> +  } else {
> 
> +    DEBUG ((DEBUG_WARN,"Not a Valid TigerLake U Board\n"));
> 
> +  }
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +PeiTigerlakeURvpMultiBoardInitPreMemLibConstructor (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  return RegisterBoardDetect (&mTigerlakeURvpBoardDetectFunc);
> 
> +}
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPreMemLib.inf
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPreMemLib.inf
> new file mode 100644
> index 0000000000..b8f1cf8aee
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiMultiBoardInitPreMemLib.inf
> @@ -0,0 +1,115 @@
> +## @file
> 
> +#  Component information file for PEI TigerlakeURvp Board Init Pre-Mem
> Library
> 
> +#
> 
> +#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010005
> 
> +  BASE_NAME                      = PeiTigerlakeURvpMultiBoardInitPreMemLib
> 
> +  FILE_GUID                      = EA05BD43-136F-45EE-BBBA-27D75817574F
> 
> +  MODULE_TYPE                    = BASE
> 
> +  VERSION_STRING                 = 1.0
> 
> +  LIBRARY_CLASS                  = NULL
> 
> +  CONSTRUCTOR                    =
> PeiTigerlakeURvpMultiBoardInitPreMemLibConstructor
> 
> +
> 
> +[LibraryClasses]
> 
> +  BaseLib
> 
> +  DebugLib
> 
> +  BaseMemoryLib
> 
> +  MemoryAllocationLib
> 
> +  PcdLib
> 
> +  PeiPlatformHookLib
> 
> +  MultiBoardInitSupportLib
> 
> +  PeiLib
> 
> +
> 
> +[Packages]
> 
> +  MinPlatformPkg/MinPlatformPkg.dec
> 
> +  TigerlakeOpenBoardPkg/OpenBoardPkg.dec
> 
> +  MdePkg/MdePkg.dec
> 
> +  MdeModulePkg/MdeModulePkg.dec
> 
> +  IntelFsp2Pkg/IntelFsp2Pkg.dec
> 
> +  TigerlakeSiliconPkg/SiPkg.dec
> 
> +
> 
> +[Sources]
> 
> +  PeiTigerlakeURvpInitPreMemLib.c
> 
> +  PeiMultiBoardInitPreMemLib.c
> 
> +  PeiTigerlakeURvpDetect.c
> 
> +  BoardSaInitPreMemLib.c
> 
> +  BoardPchInitPreMemLib.c
> 
> +  GpioTableTigerlakeUDdr4RvpPreMem.h
> 
> +
> 
> +[Ppis]
> 
> +  gEfiPeiReadOnlyVariable2PpiGuid
> 
> +  gEfiPeiMemoryDiscoveredPpiGuid                ## CONSUMES
> 
> +  gEfiPeiResetPpiGuid                           ## PRODUCES
> 
> +[Pcd]
> 
> +  gBoardModuleTokenSpaceGuid.PcdLpcSioConfigDefaultPort
> 
> +
> 
> +  # SA Misc Config
> 
> +  gBoardModuleTokenSpaceGuid.PcdSaMiscUserBd
> 
> +  gBoardModuleTokenSpaceGuid.PcdMrcSpdData
> 
> +  gBoardModuleTokenSpaceGuid.PcdMrcSpdDataSize
> 
> +
> 
> +  # SPD Address Table
> 
> +  gBoardModuleTokenSpaceGuid.PcdMrcSpdAddressTable0
> 
> +  gBoardModuleTokenSpaceGuid.PcdMrcSpdAddressTable1
> 
> +  gBoardModuleTokenSpaceGuid.PcdMrcSpdAddressTable2
> 
> +  gBoardModuleTokenSpaceGuid.PcdMrcSpdAddressTable3
> 
> +
> 
> +  #===========================================================
> 
> +  # Board Init Table List
> 
> +  gBoardModuleTokenSpaceGuid.PcdBoardGpioTablePreMem
> 
> +  gBoardModuleTokenSpaceGuid.PcdBoardGpioTablePreMemSize
> 
> +
> 
> +  # Board Information
> 
> +  gBoardModuleTokenSpaceGuid.PcdCpuRatio
> 
> +  gBoardModuleTokenSpaceGuid.PcdBiosGuard
> 
> +
> 
> +  gIntelFsp2PkgTokenSpaceGuid.PcdTemporaryRamBase              ## CONSUMES
> 
> +  gIntelFsp2PkgTokenSpaceGuid.PcdTemporaryRamSize              ## CONSUMES
> 
> +  gIntelFsp2PkgTokenSpaceGuid.PcdFspTemporaryRamSize           ## CONSUMES
> 
> +  gIntelFsp2PkgTokenSpaceGuid.PcdFspReservedBufferSize         ## CONSUMES
> 
> +
> 
> +  # SA USB Config
> 
> +  gBoardModuleTokenSpaceGuid.PcdCpuUsb30PortEnable
> 
> +
> 
> +  # PCIe Clock Info
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock0
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock1
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock2
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock3
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock4
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock5
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock6
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock7
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock8
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock9
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock10
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock11
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock12
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock13
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock14
> 
> +  gBoardModuleTokenSpaceGuid.PcdPcieClock15
> 
> +
> 
> +  gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
> 
> +
> 
> +  gMinPlatformPkgTokenSpaceGuid.PcdPciExpressRegionLength
> 
> +  gMinPlatformPkgTokenSpaceGuid.PcdLocalApicAddress
> 
> +  gMinPlatformPkgTokenSpaceGuid.PcdLocalApicMmioSize
> 
> +  gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaBaseAddress
> 
> +  gMinPlatformPkgTokenSpaceGuid.PcdFlashAreaSize
> 
> +
> 
> +  gSiPkgTokenSpaceGuid.PcdMchBaseAddress
> 
> +  gSiPkgTokenSpaceGuid.PcdMchMmioSize
> 
> +
> 
> +  gBoardModuleTokenSpaceGuid.PcdDmiBaseAddress
> 
> +  gBoardModuleTokenSpaceGuid.PcdDmiMmioSize
> 
> +  gBoardModuleTokenSpaceGuid.PcdEpBaseAddress
> 
> +  gBoardModuleTokenSpaceGuid.PcdEpMmioSize
> 
> +
> 
> +[Guids]
> 
> +  gFspNonVolatileStorageHobGuid
> 
> +  gEfiMemoryOverwriteControlDataGuid
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiTigerlakeURvpDetect.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiTigerlakeURvpDetect.c
> new file mode 100644
> index 0000000000..a11724072f
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiTigerlakeURvpDetect.c
> @@ -0,0 +1,39 @@
> +/** @file
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <PiPei.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +
> 
> +#include <PlatformBoardId.h>
> 
> +
> 
> +BOOLEAN
> 
> +TigerlakeURvp(
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  return TRUE;
> 
> +}
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardDetect (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  if (LibPcdGetSku () != 0) {
> 
> +    return EFI_SUCCESS;
> 
> +  }
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "TigerLakeU Board Detection Callback\n"));
> 
> +
> 
> +  if (TigerlakeURvp ()) {
> 
> +    LibPcdSetSku (SkuIdTglU);
> 
> +    DEBUG ((DEBUG_INFO, "SKU_ID: 0x%x\n", LibPcdGetSku()));
> 
> +    ASSERT (LibPcdGetSku() == SkuIdTglU);
> 
> +  }
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiTigerlakeURvpInitPostMemLib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiTigerlakeURvpInitPostMemLib.c
> new file mode 100644
> index 0000000000..e775f83cce
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiTigerlakeURvpInitPostMemLib.c
> @@ -0,0 +1,153 @@
> +/** @file
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <PiPei.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/BaseMemoryLib.h>
> 
> +#include <Library/IoLib.h>
> 
> +#include <Library/HobLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/PchCycleDecodingLib.h>
> 
> +#include <Library/PciLib.h>
> 
> +#include <Library/BoardInitLib.h>
> 
> +#include <PeiPlatformHookLib.h>
> 
> +#include "TigerlakeURvpInit.h"
> 
> +#include "GpioTableTigerlakeUDdr4Rvp.h"
> 
> +#include <Library/ConfigBlockLib.h>
> 
> +
> 
> +/**
> 
> +  GPIO init function for PEI post memory phase.
> 
> +
> 
> +  @param[in]  BoardId       An unsigned integrer represent the board id.
> 
> +
> 
> +  @retval     EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +BoardGpioInit(
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +  //
> 
> +  // GPIO Table Init.
> 
> +  //
> 
> +  switch (BoardId) {
> 
> +
> 
> +    case BoardIdTglUDdr4:
> 
> +      PcdSet32S (PcdBoardGpioTable, (UINTN) mGpioTableTglUDdr4);
> 
> +      PcdSet16S (PcdBoardGpioTableSize, mGpioTableTglUDdr4Size);
> 
> +      break;
> 
> +
> 
> +    default:
> 
> +      break;
> 
> +  }
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Touch panel GPIO init function for PEI post memory phase.
> 
> +
> 
> +  @param[in]  BoardId       An unsigned integrer represent the board id.
> 
> +
> 
> +  @retval     EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +TouchPanelGpioInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Misc. init function for PEI post memory phase.
> 
> +
> 
> +  @param[in]  BoardId       An unsigned integrer represent the board id.
> 
> +
> 
> +  @retval     EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +BoardMiscInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Security GPIO init function for PEI post memory phase.
> 
> +
> 
> +  @param[in]  BoardId       An unsigned integrer represent the board id.
> 
> +
> 
> +  @retval     EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +BoardSecurityInit (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Board configuration initialization in the post-memory boot phase.
> 
> +**/
> 
> +VOID
> 
> +BoardConfigInit (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS  Status;
> 
> +  UINT16      BoardId;
> 
> +
> 
> +  BoardId = BoardIdTglUDdr4;
> 
> +
> 
> +  Status = BoardGpioInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = TouchPanelGpioInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = BoardMiscInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = BoardSecurityInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +}
> 
> +
> 
> +
> 
> +/**
> 
> +  Configure GPIO and SIO
> 
> +
> 
> +  @retval  EFI_SUCCESS   Operation success.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardInitBeforeSiliconInit(
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS      Status;
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "Board Init before Silicon Init\n"));
> 
> +
> 
> +  BoardConfigInit ();
> 
> +  //
> 
> +  // Configure GPIO and SIO
> 
> +  //
> 
> +  Status = BoardInit ();
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  //
> 
> +  // Initializing Platform Specific Programming
> 
> +  //
> 
> +  Status = PlatformSpecificInit ();
> 
> +  ASSERT_EFI_ERROR(Status);
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiTigerlakeURvpInitPreMemLib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiTigerlakeURvpInitPreMemLib.c
> new file mode 100644
> index 0000000000..2ad229c1cd
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/P
> eiTigerlakeURvpInitPreMemLib.c
> @@ -0,0 +1,445 @@
> +/** @file
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <PiPei.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/BaseMemoryLib.h>
> 
> +#include <Library/IoLib.h>
> 
> +#include <Library/HobLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/PchCycleDecodingLib.h>
> 
> +#include <Library/PciLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/BaseMemoryLib.h>
> 
> +#include <Library/BoardInitLib.h>
> 
> +#include <Library/GpioNativeLib.h>
> 
> +#include <Library/GpioLib.h>
> 
> +#include <Library/PchPcrLib.h>
> 
> +#include <ConfigBlock.h>
> 
> +#include <Library/PeiServicesLib.h>
> 
> +#include <Library/PchPcrLib.h>
> 
> +#include <Register/PchRegsLpc.h>
> 
> +#include <Ppi/Reset.h>
> 
> +#include <PlatformBoardConfig.h>
> 
> +#include <Library/PmcLib.h>
> 
> +#include <Library/PciSegmentLib.h>
> 
> +#include <PeiPlatformHookLib.h>
> 
> +#include <PlatformBoardId.h>
> 
> +
> 
> +///
> 
> +/// Reset Generator I/O Port
> 
> +///
> 
> +#define RESET_GENERATOR_PORT           0xCF9
> 
> +
> 
> +typedef struct {
> 
> +  EFI_PHYSICAL_ADDRESS    BaseAddress;
> 
> +  UINT64                  Length;
> 
> +} MEMORY_MAP;
> 
> +
> 
> +GLOBAL_REMOVE_IF_UNREFERENCED MEMORY_MAP MmioMap[] = {
> 
> +  { FixedPcdGet64 (PcdLocalApicAddress),  FixedPcdGet32
> (PcdLocalApicMmioSize) },
> 
> +  { FixedPcdGet64 (PcdMchBaseAddress),    FixedPcdGet32 (PcdMchMmioSize) },
> 
> +  { FixedPcdGet64 (PcdDmiBaseAddress),    FixedPcdGet32 (PcdDmiMmioSize) },
> 
> +  { FixedPcdGet64 (PcdEpBaseAddress),     FixedPcdGet32 (PcdEpMmioSize) }
> 
> +};
> 
> +
> 
> +EFI_STATUS
> 
> +MrcConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +SaGpioConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +SaMiscConfigInit (
> 
> +  IN UINT16         BoardId
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +RootPortClkInfoInit (
> 
> +  IN UINT16 BoardId
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +UsbConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +GpioGroupTierInit (
> 
> +  IN UINT16 BoardId
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +GpioTablePreMemInit (
> 
> +  IN UINT16 BoardId
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +PchPmConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +SaDisplayConfigInit (
> 
> +  IN UINT16 BoardId
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +PlatformInitPreMemCallBack (
> 
> +  IN CONST EFI_PEI_SERVICES      **PeiServices,
> 
> +  IN EFI_PEI_NOTIFY_DESCRIPTOR   *NotifyDescriptor,
> 
> +  IN VOID                        *Ppi
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +MemoryDiscoveredPpiNotify (
> 
> +  IN CONST EFI_PEI_SERVICES      **PeiServices,
> 
> +  IN EFI_PEI_NOTIFY_DESCRIPTOR   *NotifyDescriptor,
> 
> +  IN VOID                        *Ppi
> 
> +  );
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +PchReset (
> 
> +  IN CONST EFI_PEI_SERVICES    **PeiServices
> 
> +  );
> 
> +
> 
> +static EFI_PEI_RESET_PPI mResetPpi = {
> 
> +  PchReset
> 
> +};
> 
> +
> 
> +static EFI_PEI_PPI_DESCRIPTOR mPreMemPpiList[] = {
> 
> +  {
> 
> +    (EFI_PEI_PPI_DESCRIPTOR_PPI |
> EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> 
> +    &gEfiPeiResetPpiGuid,
> 
> +    &mResetPpi
> 
> +  }
> 
> +};
> 
> +
> 
> +static EFI_PEI_NOTIFY_DESCRIPTOR mPreMemNotifyList = {
> 
> +  (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK |
> EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> 
> +  &gEfiPeiReadOnlyVariable2PpiGuid,
> 
> +  (EFI_PEIM_NOTIFY_ENTRY_POINT)PlatformInitPreMemCallBack
> 
> +};
> 
> +
> 
> +static EFI_PEI_NOTIFY_DESCRIPTOR mMemDiscoveredNotifyList = {
> 
> +  (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK |
> EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> 
> +  &gEfiPeiMemoryDiscoveredPpiGuid,
> 
> +  (EFI_PEIM_NOTIFY_ENTRY_POINT)MemoryDiscoveredPpiNotify
> 
> +};
> 
> +
> 
> +/**
> 
> +  Board misc init function for PEI pre-memory phase.
> 
> +
> 
> +  @param[in]  BoardId       An unsigned integer represent the board id.
> 
> +
> 
> +  @retval     EFI_SUCCESS   The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +BoardMiscInitPreMem (
> 
> +  IN UINT16 BoardId
> 
> +  )
> 
> +{
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Board configuration initialization in the pre-memory boot phase.
> 
> +**/
> 
> +VOID
> 
> +BoardConfigInitPreMem (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS Status;
> 
> +  UINT16 BoardId;
> 
> +
> 
> +  BoardId = BoardIdTglUDdr4;
> 
> +
> 
> +  Status = MrcConfigInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = SaGpioConfigInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = SaMiscConfigInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = RootPortClkInfoInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = UsbConfigInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = GpioGroupTierInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = GpioTablePreMemInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = PchPmConfigInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = BoardMiscInitPreMem (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  Status = SaDisplayConfigInit (BoardId);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +}
> 
> +
> 
> +/**
> 
> +  This function handles PlatformInit task after PeiReadOnlyVariable2 PPI
> produced
> 
> +
> 
> +  @param[in]  PeiServices   Pointer to PEI Services Table.
> 
> +  @param[in]  NotifyDesc    Pointer to the descriptor for the Notification event
> that
> 
> +                            caused this function to execute.
> 
> +  @param[in]  Ppi           Pointer to the PPI data associated with this function.
> 
> +
> 
> +  @retval     EFI_SUCCESS  The function completes successfully
> 
> +  @retval     others       Failure
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +PlatformInitPreMemCallBack (
> 
> +  IN CONST EFI_PEI_SERVICES     **PeiServices,
> 
> +  IN EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyDescriptor,
> 
> +  IN VOID                       *Ppi
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                        Status;
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "PlatformInitPreMemCallBack Start...\n"));
> 
> +  //
> 
> +  // Init Board Config Pcd.
> 
> +  //
> 
> +  BoardConfigInitPreMem ();
> 
> +
> 
> +  ///
> 
> +  /// Configure GPIO and SIO
> 
> +  ///
> 
> +  Status = BoardInitPreMem ();
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  ///
> 
> +  /// Install Pre Memory PPIs
> 
> +  ///
> 
> +  Status = PeiServicesInstallPpi (&mPreMemPpiList[0]);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "PlatformInitPreMemCallBack End...\n"));
> 
> +
> 
> +  return Status;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Provide hard reset PPI service.
> 
> +  To generate full hard reset, write 0x0E to PCH RESET_GENERATOR_PORT
> (0xCF9).
> 
> +
> 
> +  @param[in]  PeiServices       General purpose services available to every PEIM.
> 
> +
> 
> +  @retval     Not return        System reset occured.
> 
> +  @retval     EFI_DEVICE_ERROR  Device error, could not reset the system.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +PchReset (
> 
> +  IN CONST EFI_PEI_SERVICES    **PeiServices
> 
> +  )
> 
> +{
> 
> +  DEBUG ((DEBUG_INFO, "Perform Cold Reset\n"));
> 
> +  IoWrite8 (RESET_GENERATOR_PORT, 0x0E);
> 
> +
> 
> +  CpuDeadLoop ();
> 
> +
> 
> +  ///
> 
> +  /// System reset occured, should never reach at this line.
> 
> +  ///
> 
> +  ASSERT_EFI_ERROR (EFI_DEVICE_ERROR);
> 
> +  return EFI_DEVICE_ERROR;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Install Firmware Volume Hob's once there is main memory
> 
> +
> 
> +  @param[in]  PeiServices       General purpose services available to every PEIM.
> 
> +  @param[in]  NotifyDescriptor  Notify that this module published.
> 
> +  @param[in]  Ppi               PPI that was installed.
> 
> +
> 
> +  @retval     EFI_SUCCESS       The function completed successfully.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +MemoryDiscoveredPpiNotify (
> 
> +  IN CONST EFI_PEI_SERVICES     **PeiServices,
> 
> +  IN EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyDescriptor,
> 
> +  IN VOID                       *Ppi
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                    Status;
> 
> +  EFI_BOOT_MODE                 BootMode;
> 
> +  UINTN                         Index;
> 
> +  UINT8                         PhysicalAddressBits;
> 
> +  UINT32                        RegEax;
> 
> +  MEMORY_MAP                    PcieMmioMap;
> 
> +
> 
> + DEBUG ((DEBUG_INFO, "MemoryDiscoveredPpiNotify Start!\n"));
> 
> +
> 
> +  Index = 0;
> 
> +
> 
> +  Status = PeiServicesGetBootMode (&BootMode);
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  AsmCpuid (0x80000000, &RegEax, NULL, NULL, NULL);
> 
> +  if (RegEax >= 0x80000008) {
> 
> +    AsmCpuid (0x80000008, &RegEax, NULL, NULL, NULL);
> 
> +    PhysicalAddressBits = (UINT8)RegEax;
> 
> +  }
> 
> +  else {
> 
> +    PhysicalAddressBits = 36;
> 
> +  }
> 
> +
> 
> +  ///
> 
> +  /// Create a CPU hand-off information
> 
> +  ///
> 
> +  BuildCpuHob (PhysicalAddressBits, 16);
> 
> +
> 
> +  ///
> 
> +  /// Build Memory Mapped IO Resource which is used to build E820 Table in
> LegacyBios.
> 
> +  ///
> 
> +  PcieMmioMap.BaseAddress = FixedPcdGet64 (PcdPciExpressBaseAddress);
> 
> +  PcieMmioMap.Length = PcdGet32 (PcdPciExpressRegionLength);
> 
> +
> 
> +  BuildResourceDescriptorHob (
> 
> +    EFI_RESOURCE_MEMORY_MAPPED_IO,
> 
> +     (EFI_RESOURCE_ATTRIBUTE_PRESENT      |
> 
> +      EFI_RESOURCE_ATTRIBUTE_INITIALIZED  |
> 
> +      EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE),
> 
> +    PcieMmioMap.BaseAddress,
> 
> +    PcieMmioMap.Length
> 
> +    );
> 
> +  BuildMemoryAllocationHob (
> 
> +    PcieMmioMap.BaseAddress,
> 
> +    PcieMmioMap.Length,
> 
> +    EfiMemoryMappedIO
> 
> +    );
> 
> +  for (Index = 0; Index < sizeof(MmioMap) / (sizeof(MEMORY_MAP)); Index++) {
> 
> +    BuildResourceDescriptorHob (
> 
> +      EFI_RESOURCE_MEMORY_MAPPED_IO,
> 
> +       (EFI_RESOURCE_ATTRIBUTE_PRESENT      |
> 
> +        EFI_RESOURCE_ATTRIBUTE_INITIALIZED  |
> 
> +        EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE),
> 
> +      MmioMap[Index].BaseAddress,
> 
> +      MmioMap[Index].Length
> 
> +      );
> 
> +    BuildMemoryAllocationHob (
> 
> +      MmioMap[Index].BaseAddress,
> 
> +      MmioMap[Index].Length,
> 
> +      EfiMemoryMappedIO
> 
> +      );
> 
> +  }
> 
> +
> 
> +  //
> 
> +  // Report resource HOB for flash FV
> 
> +  //
> 
> +  BuildResourceDescriptorHob (
> 
> +    EFI_RESOURCE_MEMORY_MAPPED_IO,
> 
> +     (EFI_RESOURCE_ATTRIBUTE_PRESENT      |
> 
> +      EFI_RESOURCE_ATTRIBUTE_INITIALIZED  |
> 
> +      EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE),
> 
> +    (UINTN) FixedPcdGet32 (PcdFlashAreaBaseAddress),
> 
> +    (UINTN) FixedPcdGet32 (PcdFlashAreaSize)
> 
> +    );
> 
> +
> 
> +  BuildMemoryAllocationHob (
> 
> +    (UINTN) FixedPcdGet32 (PcdFlashAreaBaseAddress),
> 
> +    (UINTN) FixedPcdGet32 (PcdFlashAreaSize),
> 
> +    EfiMemoryMappedIO
> 
> +    );
> 
> +
> 
> +  BuildFvHob (
> 
> +    (UINTN)FixedPcdGet32 (PcdFlashAreaBaseAddress),
> 
> +    (UINTN)FixedPcdGet32 (PcdFlashAreaSize)
> 
> +    );
> 
> +
> 
> + DEBUG ((DEBUG_INFO, "MemoryDiscoveredPpiNotify End!\n"));
> 
> +
> 
> +  return Status;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Board configuration init function for PEI pre-memory phase.
> 
> +
> 
> +  @retval EFI_SUCCESS             The function completed successfully.
> 
> +  @retval EFI_INVALID_PARAMETER   The parameter is NULL.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpInitPreMem (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS Status;
> 
> +  DEBUG ((DEBUG_INFO, "TigerlakeURvpInitPreMem Start!\n"));
> 
> +  ///
> 
> +  /// Performing PlatformInitPreMemCallBack after PeiReadOnlyVariable2 PPI
> produced
> 
> +  ///
> 
> +  Status = PeiServicesNotifyPpi (&mPreMemNotifyList);
> 
> +
> 
> +  ///
> 
> +  /// After code reorangized, memorycallback will run because the PPI is already
> 
> +  /// installed when code run to here, it is supposed that the InstallEfiMemory is
> 
> +  /// done before.
> 
> +  ///
> 
> +  Status = PeiServicesNotifyPpi (&mMemDiscoveredNotifyList);
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "TigerlakeURvpInitPreMem End!\n"));
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Configure GPIO and SIO before memory ready
> 
> +
> 
> +  @retval  EFI_SUCCESS   Operation success.
> 
> +**/
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardInitBeforeMemoryInit(
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +
> 
> +  TigerlakeURvpInitPreMem();
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardDebugInit(
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  ///
> 
> +  /// Do Early PCH init
> 
> +  ///
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +EFI_BOOT_MODE
> 
> +EFIAPI
> 
> +TigerlakeURvpBoardBootModeDetect(
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  return BOOT_WITH_FULL_CONFIGURATION;
> 
> +}
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/T
> igerlakeURvpInit.h
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/T
> igerlakeURvpInit.h
> new file mode 100644
> index 0000000000..ccffcc6761
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/BoardInitLib/T
> igerlakeURvpInit.h
> @@ -0,0 +1,23 @@
> +/** @file
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#ifndef _TIGER_LAKE_U_RVP_INIT_H_
> 
> +#define _TIGER_LAKE_U_RVP_INIT_H_
> 
> +
> 
> +#include <Uefi.h>
> 
> +#include <PlatformBoardId.h>
> 
> +#include <Library/BaseLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/MemoryAllocationLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Ppi/SiPolicy.h>
> 
> +
> 
> +extern GPIO_INIT_CONFIG mGpioTableTglUDdr4[];
> 
> +extern UINT16 mGpioTableTglUDdr4Size;
> 
> +
> 
> +
> 
> +#endif // _TIGER_LAKE_U_RVP_INIT_H_
> 
> +
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/PeiPlatformHo
> okLib/PeiPlatformHooklib.c
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/PeiPlatformHo
> okLib/PeiPlatformHooklib.c
> new file mode 100644
> index 0000000000..6c2587391d
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/PeiPlatformHo
> okLib/PeiPlatformHooklib.c
> @@ -0,0 +1,212 @@
> +/** @file
> 
> +  PEI Library Functions. Initialize GPIOs
> 
> +
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#include <PiPei.h>
> 
> +#include <PeiPlatformHookLib.h>
> 
> +#include <Library/DebugLib.h>
> 
> +#include <Library/BaseMemoryLib.h>
> 
> +#include <Library/IoLib.h>
> 
> +#include <Library/HobLib.h>
> 
> +#include <Library/PcdLib.h>
> 
> +#include <Library/TimerLib.h>
> 
> +#include <Library/PchCycleDecodingLib.h>
> 
> +#include <Library/PciSegmentLib.h>
> 
> +#include <Library/PeiServicesLib.h>
> 
> +#include <Library/PmcLib.h>
> 
> +#include <Library/GpioNativeLib.h>
> 
> +#include <Library/GpioLib.h>
> 
> +#include <PlatformBoardConfig.h>
> 
> +#include <Library/PchPcrLib.h>
> 
> +#include <Library/GpioCheckConflictLib.h>
> 
> +
> 
> +#define SIO_RUNTIME_REG_BASE_ADDRESS                          0x0680
> 
> +
> 
> +#define RECOVERY_MODE_GPIO_PIN                    0                    // Platform
> specific @todo use PCD
> 
> +
> 
> +#define MANUFACTURE_MODE_GPIO_PIN                 0                    // Platform
> specific @todo use PCD
> 
> +
> 
> +/**
> 
> +  Configures GPIO
> 
> +
> 
> +  @param[in]  GpioTable       Point to Platform Gpio table
> 
> +  @param[in]  GpioTableCount  Number of Gpio table entries
> 
> +
> 
> +**/
> 
> +VOID
> 
> +ConfigureGpio (
> 
> +  IN GPIO_INIT_CONFIG                 *GpioDefinition,
> 
> +  IN UINT16                           GpioTableCount
> 
> +  )
> 
> +{
> 
> +  DEBUG ((DEBUG_INFO, "ConfigureGpio() Start\n"));
> 
> +
> 
> +
> 
> +  CreateGpioCheckConflictHob (GpioDefinition, GpioTableCount);
> 
> +
> 
> +
> 
> +  GpioConfigurePads (GpioTableCount, GpioDefinition);
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "ConfigureGpio() End\n"));
> 
> +}
> 
> +
> 
> +/**
> 
> +  Configure GPIO group GPE tier.
> 
> +
> 
> +  @retval     none.
> 
> +**/
> 
> +VOID
> 
> +GpioGroupTierInitHook(
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  DEBUG ((DEBUG_INFO, "GpioGroupTierInitHook Start\n"));
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "GpioGroupTierInitHook End\n"));
> 
> +}
> 
> +
> 
> +/**
> 
> +  Configure single GPIO pad for touchpanel interrupt
> 
> +**/
> 
> +VOID
> 
> +TouchpanelGpioInit (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +
> 
> +}
> 
> +
> 
> +/**
> 
> +  Configure GPIO Before Memory is not ready.
> 
> +
> 
> +**/
> 
> +VOID
> 
> +GpioInitPreMem (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  if (PcdGet32 (PcdBoardGpioTablePreMem) != 0 && PcdGet16
> (PcdBoardGpioTablePreMemSize) != 0) {
> 
> +    DEBUG ((DEBUG_INFO, "Pre-mem Gpio Config\n"));
> 
> +    ConfigureGpio ((VOID *) (UINTN) PcdGet32 (PcdBoardGpioTablePreMem),
> (UINTN) PcdGet16 (PcdBoardGpioTablePreMemSize));
> 
> +  }
> 
> +}
> 
> +
> 
> +/**
> 
> +  Basic GPIO configuration before memory is ready
> 
> +
> 
> +**/
> 
> +VOID
> 
> +GpioInitEarlyPreMem (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +
> 
> +}
> 
> +
> 
> +/**
> 
> +  Configure GPIO
> 
> +
> 
> +**/
> 
> +
> 
> +VOID
> 
> +GpioInit (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  DEBUG ((DEBUG_INFO, "Post-mem Gpio Config\n"));
> 
> +  ConfigureGpio ((VOID *) (UINTN) PcdGet32 (PcdBoardGpioTable), (UINTN)
> PcdGet16 (PcdBoardGpioTableSize));
> 
> +
> 
> +  TouchpanelGpioInit();
> 
> +
> 
> +  return;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Configure Super IO
> 
> +
> 
> +**/
> 
> +VOID
> 
> +SioInit (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  //
> 
> +  // Program and Enable Default Super IO Configuration Port Addresses and
> range
> 
> +  //
> 
> +  PchLpcGenIoRangeSet (PcdGet16 (PcdLpcSioConfigDefaultPort) & (~0xF),
> 0x10);
> 
> +
> 
> +  PchLpcGenIoRangeSet (SIO_RUNTIME_REG_BASE_ADDRESS  & (~0x7F), 0x10);
> 
> +  return;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Configure GPIO and SIO before memory ready
> 
> +
> 
> +  @retval  EFI_SUCCESS   Operation success.
> 
> +**/
> 
> +EFI_STATUS
> 
> +BoardInitPreMem (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  //
> 
> +  // Obtain Platform Info from HOB.
> 
> +  //
> 
> +  GpioInitPreMem ();
> 
> +  GpioGroupTierInitHook ();
> 
> +  SioInit ();
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "BoardInitPreMem Done\n"));
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Configure GPIO and SIO
> 
> +
> 
> +  @retval  EFI_SUCCESS   Operation success.
> 
> +**/
> 
> +EFI_STATUS
> 
> +BoardInit (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +
> 
> +  GpioInit ();
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Do platform specific programming post-memory.
> 
> +
> 
> +  @retval  EFI_SUCCESS       The function completed successfully.
> 
> +**/
> 
> +
> 
> +EFI_STATUS
> 
> +PlatformSpecificInit (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +/**
> 
> +  Early Board Configuration before memory is ready
> 
> +
> 
> +  @retval  EFI_SUCCESS  Operation success.
> 
> +**/
> 
> +EFI_STATUS
> 
> +BoardInitEarlyPreMem (
> 
> +  VOID
> 
> +  )
> 
> +{
> 
> +  GpioInitEarlyPreMem ();
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git
> a/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/PeiPlatformHo
> okLib/PeiPlatformHooklib.inf
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/PeiPlatformHo
> okLib/PeiPlatformHooklib.inf
> new file mode 100644
> index 0000000000..8e4ce47d5a
> --- /dev/null
> +++
> b/Platform/Intel/TigerlakeOpenBoardPkg/TigerlakeURvp/Library/PeiPlatformHo
> okLib/PeiPlatformHooklib.inf
> @@ -0,0 +1,58 @@
> +## @file
> 
> +#
> 
> +#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +#
> 
> +##
> 
> +
> 
> +[Defines]
> 
> +  INF_VERSION                    = 0x00010017
> 
> +  BASE_NAME                      = PeiPlatformHookLib
> 
> +  FILE_GUID                      = AD901798-B0DA-4B20-B90C-283F886E76D0
> 
> +  VERSION_STRING                 = 1.0
> 
> +  MODULE_TYPE                    = PEIM
> 
> +  LIBRARY_CLASS                  = PeiPlatformHookLib|PEIM PEI_CORE SEC
> 
> +
> 
> +[LibraryClasses]
> 
> +  DebugLib
> 
> +  BaseMemoryLib
> 
> +  IoLib
> 
> +  HobLib
> 
> +  PcdLib
> 
> +  TimerLib
> 
> +  PchCycleDecodingLib
> 
> +  GpioLib
> 
> +  PeiServicesLib
> 
> +  ConfigBlockLib
> 
> +  PmcLib
> 
> +  PchPcrLib
> 
> +  PciSegmentLib
> 
> +  GpioCheckConflictLib
> 
> +
> 
> +[Packages]
> 
> +  MdePkg/MdePkg.dec
> 
> +  TigerlakeOpenBoardPkg/OpenBoardPkg.dec
> 
> +  TigerlakeSiliconPkg/SiPkg.dec
> 
> +  IntelSiliconPkg/IntelSiliconPkg.dec
> 
> +
> 
> +[Pcd]
> 
> +  gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress                        ##
> CONSUMES
> 
> +  gBoardModuleTokenSpaceGuid.PcdLpcSioConfigDefaultPort        ##
> CONSUMES
> 
> +  gBoardModuleTokenSpaceGuid.PcdSioBaseAddress                 ## CONSUMES
> 
> +  gBoardModuleTokenSpaceGuid.PcdBoardGpioTable                 ## CONSUMES
> 
> +  gBoardModuleTokenSpaceGuid.PcdBoardGpioTableSize             ## CONSUMES
> 
> +  gBoardModuleTokenSpaceGuid.PcdBoardGpioTablePreMem           ##
> CONSUMES
> 
> +  gBoardModuleTokenSpaceGuid.PcdBoardGpioTablePreMemSize       ##
> CONSUMES
> 
> +
> 
> +[Sources]
> 
> +  PeiPlatformHooklib.c
> 
> +
> 
> +[Ppis]
> 
> +  gEfiPeiReadOnlyVariable2PpiGuid               ## CONSUMES
> 
> +  gSiPolicyPpiGuid                              ## CONSUMES
> 
> +
> 
> +[Guids]
> 
> +  gSaDataHobGuid                                ## CONSUMES
> 
> +  gEfiGlobalVariableGuid                        ## CONSUMES
> 
> +  gGpioCheckConflictHobGuid                     ## CONSUMES
> 
> +
> 
> --
> 2.24.0.windows.2


  reply	other threads:[~2021-02-10  3:58 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-09  8:45 [Patch V2 1/8] TigerlakeOpenBoardPkg: Add package and headers Heng Luo
2021-02-09  8:45 ` [Patch V2 2/8] TigerlakeOpenBoardPkg/TigerlakeURvp: Add fdf and header file Heng Luo
2021-02-09 23:42   ` Chaganty, Rangasai V
2021-02-09  8:45 ` [Patch V2 3/8] TigerlakeOpenBoardPkg: Add library instances Heng Luo
2021-02-09 23:45   ` Chaganty, Rangasai V
2021-02-09  8:45 ` [Patch V2 4/8] TigerlakeOpenBoardPkg/TigerlakeURvp: " Heng Luo
2021-02-10  0:38   ` Chaganty, Rangasai V
2021-02-10  3:58     ` Heng Luo [this message]
2021-02-09  8:45 ` [Patch V2 5/8] TigerlakeOpenBoardPkg: Add modules Heng Luo
2021-02-10  0:22   ` Chaganty, Rangasai V
2021-02-10  0:27   ` Chaganty, Rangasai V
2021-02-09  8:45 ` [Patch V2 6/8] TigerlakeOpenBoardPkg/TigerlakeURvp: Add DSC and build files Heng Luo
2021-02-10  0:29   ` Chaganty, Rangasai V
2021-02-09  8:45 ` [Patch V2 7/8] Enable build for TigerlakeOpenBoardPkg Heng Luo
2021-02-10  0:30   ` Chaganty, Rangasai V
2021-02-09  8:45 ` [Patch V2 8/8] Update Maintainers.txt " Heng Luo
2021-02-10  0:31   ` Chaganty, Rangasai V
2021-02-09 23:41 ` [Patch V2 1/8] TigerlakeOpenBoardPkg: Add package and headers Chaganty, Rangasai V

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=MWHPR11MB18058C32FBB6E89874EC1F1A938D9@MWHPR11MB1805.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