## @file
# This is the Platform PEIM to initialize whole platform on PEI phase.
#
# This PEIM includes 3 parts, pre memory initialization, MRC
#  wrapper and post memory initialization.
#  On pre memory, following action is performed,
#  1. Initizluize GMCH.
#  2. Detect boot mode.
#  3. Detect video adapter to determine whether we need pre allocated
#  memory.
#
#  After that MRC wrapper calls MRC to initialize memory and install a PPI
#  notify to do post memory
#  initialization. MRC wrapper performance following actions,
#  1. Install EFI Memory.
#  2. Create HOB of system memory.
#
#  On post memory, following action is performed,
#  1. QNC initialization after MRC.
#  2. SIO initialization.
#  3. Install ResetSystem and FinvFv PPI, relocate Stall to memory on
#   recovery boot mode.
#  4. Set MTRR for PEI
#  5. Create FV HOB and Flash HOB
#  6. Install RecoveryModule and AtaController PPI if on recovery boot mode.
#
#  This PEIM does not have any register access directly, it depends on
#  IntelQNCLib, QNCAccess libraries to access Chipset
#  registers.
#
#  Platform.c - Provide main flow and entrypoint of PEIM.
#  MemoryCallback.c - Includes a memory call back function notified when
#     MRC is done.
#  Recovery.c - provides the platform recoveyr functionality.
#  MrcWrapper.c - Contains the logic to call MRC PPI and do Framework
#     memory specific stuff like build memory map, build
#     resource description hob for DXE phase,etc.
#  Bootmode.c - Detect boot mode.
# Copyright (c) 2013 - 2019 Intel Corporation.
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = PlatformEarlyInitPei
  FILE_GUID                      = 9618C0DC-50A4-496c-994F-7241F282ED01
  MODULE_TYPE                    = PEIM
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = PeiInitPlatform

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64
#

[Sources]
  Generic/Recovery.c
  PlatformErratas.c
  MrcWrapper.c
  MrcWrapper.h
  PlatformEarlyInit.c
  PlatformEarlyInit.h
  MemoryCallback.c
  BootMode.c
  CommonHeader.h
  PeiFvSecurity.c
  PeiFvSecurity.h

[Packages]
  MdePkg/MdePkg.dec
  MdeModulePkg/MdeModulePkg.dec
  UefiCpuPkg/UefiCpuPkg.dec
  QuarkPlatformPkg/QuarkPlatformPkg.dec
  QuarkSocPkg/QuarkSocPkg.dec

[LibraryClasses]
  ResetSystemLib
  PrintLib
  TimerLib
  PcdLib
  IntelQNCLib
  ReportStatusCodeLib
  PciLib
  PciExpressLib
  IoLib
  PciCf8Lib
  HobLib
  BaseMemoryLib
  PeiServicesTablePointerLib
  PeiServicesLib
  BaseLib
  PeimEntryPoint
  DebugLib
  MemoryAllocationLib
  PerformanceLib
  CacheMaintenanceLib
  MtrrLib
  QNCAccessLib
  PlatformHelperLib
  PlatformPcieHelperLib
  I2cLib

[Guids]
  gEfiMemoryConfigDataGuid                      # ALWAYS_CONSUMED L"MemoryConfig"
  gEfiAcpiVariableGuid                          # ALWAYS_CONSUMED L"AcpiGlobalVariab"
  gEfiMemoryTypeInformationGuid                 # ALWAYS_CONSUMED L"MemoryTypeInformation"
  gEfiMemoryConfigDataGuid                      # SOMETIMES_PRODUCED  Hob: GUID_EXTENSION
  gEfiSmmSmramMemoryGuid                        # ALWAYS_PRODUCED  Hob: GUID_EXTENSION
  gEfiFirmwareFileSystem2Guid                   # ALWAYS_CONSUMED
  gPeiCapsuleOnDataCDGuid
  gPeiCapsuleOnFatIdeDiskGuid
  gPeiCapsuleOnFatUsbDiskGuid
  gEfiMemoryOverwriteControlDataGuid            # SOMETIMES_CONSUMED
  gEfiQuarkCapsuleGuid

[Ppis]
  gQNCMemoryInitPpiGuid                         # PPI ALWAYS_CONSUMED
  gEfiPeiMemoryDiscoveredPpiGuid                # PPI ALWAYS_PRODUCED
  gPeiAtaControllerPpiGuid                      # PPI SOMETIMES_PRODUCED
  gEfiPeiStallPpiGuid                           # PPI ALWAYS_PRODUCED
  gEfiPeiDeviceRecoveryModulePpiGuid            # PPI SOMETIMES_CONSUMED
  gEfiPeiRecoveryModulePpiGuid                  # PPI SOMETIMES_PRODUCED
  gEfiPeiResetPpiGuid                           # PPI ALWAYS_PRODUCED
  gEfiPeiReadOnlyVariable2PpiGuid               # PPI ALWAYS_CONSUMED
  gEfiPeiBootInRecoveryModePpiGuid              # PPI SOMETIMES_PRODUCED
  gEfiPeiMasterBootModePpiGuid                  # PPI ALWAYS_PRODUCED
  gEfiPeiFirmwareVolumeInfoPpiGuid
  gEfiEndOfPeiSignalPpiGuid
  gEfiPeiVirtualBlockIoPpiGuid
  gPeiCapsulePpiGuid                            # PPI ALWAYS_CONSUMED

[FeaturePcd]
  gEfiMdeModulePkgTokenSpaceGuid.PcdRecoveryOnFatUsbDisk
  gEfiMdeModulePkgTokenSpaceGuid.PcdRecoveryOnDataCD
  gEfiMdeModulePkgTokenSpaceGuid.PcdRecoveryOnFatFloppyDisk
  gEfiMdeModulePkgTokenSpaceGuid.PcdRecoveryOnIdeDisk
  gQuarkPlatformTokenSpaceGuid.WaitIfResetDueToError

[Pcd]
  gQuarkPlatformTokenSpaceGuid.PcdEsramStage1Base
  gQuarkPlatformTokenSpaceGuid.PcdFlashAreaSize
  gQuarkPlatformTokenSpaceGuid.PcdFlashAreaBaseAddress
  gQuarkPlatformTokenSpaceGuid.PcdEccScrubBlkSize
  gQuarkPlatformTokenSpaceGuid.PcdEccScrubInterval
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase
  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
  gQuarkPlatformTokenSpaceGuid.PcdFlashQNCMicrocodeSize
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdPmbaIoBaseAddress
  gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdPciHostBridgeIoBase
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdPciHostBridgeIoSize
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohUartFunctionNumber
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohUartBusNumber
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohUartDevNumber
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohGpioBusNumber
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohGpioDevNumber
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohGpioFunctionNumber
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohGpioBarRegister
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohGpioMmioBase
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohMac0MmioBase
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohMac1MmioBase
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdPeiQNCUsbControllerMemoryBaseAddress
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdRcbaMmioBaseAddress
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdPciHostBridgeMemory32Base
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdPciHostBridgeMemory32Size
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdPciHostBridgeMemory64Base
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdPciHostBridgeMemory64Size
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdPciExpressSize
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdGbaIoBaseAddress
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdQuarkMicrocodeFile
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdTSegSize
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdESramMemorySize
  gQuarkPlatformTokenSpaceGuid.PcdFlashFvRecoverySize
  gQuarkPlatformTokenSpaceGuid.PcdFlashFvRecoveryBase
  gQuarkPlatformTokenSpaceGuid.PcdFlashFvMainSize
  gQuarkPlatformTokenSpaceGuid.PcdFlashFvMainBase
  gQuarkPlatformTokenSpaceGuid.PcdBootState
  gQuarkPlatformTokenSpaceGuid.PcdFlashFvPayloadBase
  gQuarkPlatformTokenSpaceGuid.PcdFlashFvPayloadSize
  gQuarkPlatformTokenSpaceGuid.PcdEnableFastBoot
  gQuarkPlatformTokenSpaceGuid.PcdPlatformType
  gEfiQuarkNcSocIdTokenSpaceGuid.PcdMrcParameters
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohEthernetMac0
  gEfiQuarkSCSocIdTokenSpaceGuid.PcdIohEthernetMac1

[Depex]
  gEfiPeiReadOnlyVariable2PpiGuid AND gQNCMemoryInitPpiGuid
