public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Nate DeSimone" <nathaniel.l.desimone@intel.com>
To: "Luo, Heng" <heng.luo@intel.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Chaganty, Rangasai V" <rangasai.v.chaganty@intel.com>
Subject: Re: [PATCH 07/40] TigerlakeSiliconPkg/SystemAgent: Add include headers
Date: Thu, 4 Feb 2021 03:53:28 +0000	[thread overview]
Message-ID: <BN6PR1101MB2147796FA5D8D26DB116C145CDB39@BN6PR1101MB2147.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20210201013657.1833-7-heng.luo@intel.com>

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>

> -----Original Message-----
> From: Luo, Heng <heng.luo@intel.com>
> Sent: Sunday, January 31, 2021 5:36 PM
> To: devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Desimone,
> Nathaniel L <nathaniel.l.desimone@intel.com>
> Subject: [PATCH 07/40] TigerlakeSiliconPkg/SystemAgent: Add include
> headers
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3171
> 
> Adds the following header files:
>   * SystemAgent/Include
> 
> 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>
> ---
> 
> Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/Memory
> DxeConfig.h       | 123
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/PcieDxe
> Config.h         | 114
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/PramPre
> MemConfig.h      |  34 ++++++++++++++++++++++++++++++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/SaMiscP
> eiConfig.h       |  24 ++++++++++++++++++++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/SaMiscP
> eiPreMemConfig.h | 104
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++
> 
> Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/Library/SaPlatformLib
> .h             |  48 ++++++++++++++++++++++++++++++++++++++++++++++++
>  Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/MemInfoHob.h
> | 264
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++
>  Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/Protocol/SaPolicy.h
> |  61
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++
>  8 files changed, 772 insertions(+)
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/Memo
> ryDxeConfig.h
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/Memo
> ryDxeConfig.h
> new file mode 100644
> index 0000000000..451e295b49
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/Memo
> ryDxeConfig.h
> @@ -0,0 +1,123 @@
> +/** @file
> 
> +  Memory DXE Policy definitions
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#ifndef _MEMORY_DXE_CONFIG_H_
> 
> +#define _MEMORY_DXE_CONFIG_H_
> 
> +
> 
> +#pragma pack(push, 1)
> 
> +
> 
> +#define MEMORY_DXE_CONFIG_REVISION 1
> 
> +
> 
> +typedef struct _MEMORY_DXE_CONFIG  MEMORY_DXE_CONFIG;
> 
> +
> 
> +/**
> 
> +  Retrieves the OEM custom string for the SMBIOS Type 17 Table
> DeviceLocator field.
> 
> +  Implementation of this function is optional, if this function pointer is NULL
> then
> 
> +  the reference implementation of DeviceLocator will be used.
> 
> +
> 
> +  @param[in]  This                          A pointer to this instance of
> MEMORY_DXE_CONFIG.
> 
> +  @param[in]  Controller                    Desired Controller to get a DeviceLocator
> string for.
> 
> +  @param[in]  Dimm                          Desired DIMM to get a DeviceLocator
> string for.
> 
> +  @param[in]  MdSocket                      0 = Memory Down, 1 = Socketed.
> 
> +
> 
> +  @retval                                   The DeviceLocator string
> 
> +  @retval     NULL                          If the return value is NULL, the default value
> will be used.
> 
> +**/
> 
> +typedef
> 
> +CHAR8*
> 
> +(EFIAPI *MEMORY_DXE_CONFIG_GET_DEVICE_LOCATOR_STRING)(
> 
> +  IN CONST    MEMORY_DXE_CONFIG   *This,
> 
> +  IN          UINT8               Controller,
> 
> +  IN          UINT8               Dimm,
> 
> +  IN          UINT8               MdSocket
> 
> +  );
> 
> +
> 
> +/**
> 
> +  Retrieves the OEM custom string for the SMBIOS Type 17 Table
> BankLocator field.
> 
> +  Implementation of this function is optional, if this function pointer is NULL
> then
> 
> +  the reference implementation of DeviceLocator will be used.
> 
> +
> 
> +  @param[in]  This                          A pointer to this instance of
> MEMORY_DXE_CONFIG.
> 
> +  @param[in]  Controller                    Desired Controller to get a BankLocator
> string for.
> 
> +  @param[in]  Dimm                          Desired DIMM to get a BankLocator string
> for.
> 
> +  @param[in]  MdSocket                      0 = Memory Down, 1 = Socketed.
> 
> +
> 
> +  @retval                                   The BankLocator string
> 
> +  @retval     NULL                          If the return value is NULL, the default value
> will be used.
> 
> +**/
> 
> +typedef
> 
> +CHAR8*
> 
> +(EFIAPI *MEMORY_DXE_CONFIG_GET_BANK_LOCATOR_STRING)(
> 
> +  IN CONST    MEMORY_DXE_CONFIG   *This,
> 
> +  IN          UINT8               Controller,
> 
> +  IN          UINT8               Dimm,
> 
> +  IN          UINT8               MdSocket
> 
> +  );
> 
> +
> 
> +/**
> 
> +  The Memory Configuration includes DIMM SPD address Map and DIMM
> Slot Mechanical present bit map.
> 
> +  The data elements should be initialized by a Platform Module.\n
> 
> +  <b>Revision 1</b>:
> 
> +  - Initial version.
> 
> +**/
> 
> +struct _MEMORY_DXE_CONFIG {
> 
> +  CONFIG_BLOCK_HEADER   Header;                   ///< Offset 0-27: Config Block
> Header
> 
> +/**
> 
> +  Offset 28:
> 
> +  Dimm SPD address
> 
> +  Only Server support 2 channels * 3 slots per channel = 6 sockets totally
> 
> +  The Desktop and mobile only support 2 channels * 2 slots per channel = 4
> sockets totally
> 
> +  So there is mapping rule here for Desktop and mobile that there are no
> more 4 DIMMS totally in a system:
> 
> +    Channel A/ Slot 0 --> Dimm 0 --> SpdAddressTable[0]
> 
> +    Channel A/ Slot 1 --> Dimm 1 --> SpdAddressTable[1]
> 
> +    Channel B/ Slot 0 --> Dimm 2 --> SpdAddressTable[2]
> 
> +    Channel B/ Slot 1 --> Dimm 3 --> SpdAddressTable[3]
> 
> +  Refer to SmbiosMemory.c for use
> 
> +  If change the mapping rule, please update the Revision number.
> 
> +**/
> 
> +  UINT8                                           *SpdAddressTable;
> 
> +/**
> 
> +  Offset 36:
> 
> +  Channel A DIMM Slot Mechanical present bit map, bit 0 -> DIMM 0, bit 1 ->
> DIMM1, ...
> 
> +  if the bit is 1, the related DIMM slot is present.
> 
> +  E.g. if channel A has 2 DIMMs,  ChannelASlotMap = 0x03;
> 
> +  E.g. if channel A has only 1 DIMMs,  ChannelASlotMap = 0x01;
> 
> +  Refer to SmbiosMemory.c
> 
> +**/
> 
> +  UINT8                                           ChannelASlotMap;
> 
> +/**
> 
> +  Offset 37:
> 
> +  Channel B DIMM Slot Mechanical present bit map, bit 0 -> DIMM 0, bit 1 ->
> DIMM1, ...
> 
> +  if the bit is 1, the related DIMM slot is present.
> 
> +  E.g. if channel B has 2 DIMMs,  ChannelBSlotMap = 0x03;
> 
> +  E.g. if channel B has only 1 DIMMs,  ChannelBSlotMap = 0x01;
> 
> +  Refer to SmbiosMemory.c
> 
> +**/
> 
> +  UINT8                                           ChannelBSlotMap;
> 
> +/**
> 
> +  Offset 38:
> 
> +  MRC execution time measurement: <b>0=Disable</b>, 1=Enable
> 
> +**/
> 
> +  UINT8                                           MrcTimeMeasure;
> 
> +/**
> 
> +  Offset 39:
> 
> +  Fast boot: 0=Disable, <b>1=Enable</b>
> 
> +**/
> 
> +  UINT8                                           MrcFastBoot;
> 
> +/**
> 
> +  Offset 40:
> 
> +  Retrieves the OEM custom string for the SMBIOS Type 17 Table
> DeviceLocator field.
> 
> +**/
> 
> +  MEMORY_DXE_CONFIG_GET_DEVICE_LOCATOR_STRING
> GetDeviceLocatorString;
> 
> +/**
> 
> +  Offset 48:
> 
> +  Retrieves the OEM custom string for the SMBIOS Type 17 Table
> BankLocator field.
> 
> +**/
> 
> +  MEMORY_DXE_CONFIG_GET_BANK_LOCATOR_STRING
> GetBankLocatorString;
> 
> +};
> 
> +#pragma pack(pop)
> 
> +
> 
> +#endif // _MEMORY_DXE_CONFIG_H_
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/PcieDx
> eConfig.h
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/PcieDx
> eConfig.h
> new file mode 100644
> index 0000000000..799121f1ab
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/PcieDx
> eConfig.h
> @@ -0,0 +1,114 @@
> +/** @file
> 
> +  PCIE DXE policy definitions
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#ifndef _PCIE_DXE_CONFIG_H_
> 
> +#define _PCIE_DXE_CONFIG_H_
> 
> +
> 
> +#include "CpuPcieInfo.h"
> 
> +
> 
> +#pragma pack(push, 1)
> 
> +
> 
> +#define PCIE_DXE_CONFIG_REVISION 2
> 
> +
> 
> +typedef struct {
> 
> +  UINT16  VendorId; ///< Offset 0 PCI Config space offset 0
> 
> +  UINT16  DeviceId; ///< Offset 2 PCI Config space offset 2
> 
> +/**
> 
> +  Offset 4:
> 
> +  SnoopLatency bit definition
> 
> +  Note: All Reserved bits must be set to 0
> 
> +
> 
> +  BIT[15]     - When set to 1b, indicates that the values in bits 9:0 are valid
> 
> +                When clear values in bits 9:0 will be ignored
> 
> +  BIT[14]     - Should be set to 0b
> 
> +  BIT[13]     - Reserved
> 
> +  BITS[12:10] - Value in bits 9:0 will be multiplied with the scale in these bits
> 
> +                000b - 1 ns
> 
> +                001b - 32 ns
> 
> +                010b - 1024 ns
> 
> +                011b - 32,768 ns
> 
> +                100b - 1,048,576 ns
> 
> +                101b - 33,554,432 ns
> 
> +                110b - Reserved
> 
> +                111b - Reserved
> 
> +  BITS[9:0]   - Snoop Latency Value. The value in these bits will be multiplied
> with
> 
> +                the scale in bits 12:10
> 
> +**/
> 
> +  UINT16  SnoopLatency;
> 
> +/**
> 
> +  Offset 6:
> 
> +  NonSnoopLatency bit definition
> 
> +  Note: All Reserved bits must be set to 0
> 
> +
> 
> +  BIT[15]     - When set to 1b, indicates that the values in bits 9:0 are valid
> 
> +                When clear values in bits 9:0 will be ignored
> 
> +  BIT[14]     - Should be set to 0b
> 
> +  BIT[13]     - Reserved
> 
> +  BITS[12:10] - Value in bits 9:0 will be multiplied with the scale in these bits
> 
> +                000b - 1 ns
> 
> +                001b - 32 ns
> 
> +                010b - 1024 ns
> 
> +                011b - 32,768 ns
> 
> +                100b - 1,048,576 ns
> 
> +                101b - 33,554,432 ns
> 
> +                110b - Reserved
> 
> +                111b - Reserved
> 
> +  BITS[9:0]   - Non Snoop Latency Value. The value in these bits will be
> multiplied with
> 
> +                the scale in bits 12:10
> 
> +**/
> 
> +  UINT16  NonSnoopLatency;
> 
> +  UINT8   RevId;    ///<   Offset 8 PCI Config space offset 8; 0xFF means all
> steppings
> 
> +  UINT8   Rsvd0[3]; ///<   Offset 9
> 
> +} PCIE_LTR_DEV_INFO;
> 
> +
> 
> +///
> 
> +/// PCIE Power Optimizer config
> 
> +///
> 
> +typedef struct {
> 
> +  UINT16  LtrMaxSnoopLatency;   ///< Offset 0 LTR Maximum Snoop Latency:
> <b>0x0846=70us</b>
> 
> +  UINT16  LtrMaxNoSnoopLatency; ///< Offset 2 LTR Maximum Non-Snoop
> Latency: <b>0x0846=70us</b>
> 
> +  UINT8   ObffEnable;           ///< Offset 4 LTR enable/disable: 0=Disable,
> <b>1=Enable</b>
> 
> +  UINT8   LtrEnable;            ///< Offset 5 LTR enable/disable: 0=Disable,
> <b>1=Enable</b>
> 
> +  UINT8   Rsvd0[2];             ///< Offset 6 Reserved
> 
> +} CPU_PCIE_PWR_OPT;
> 
> +
> 
> +
> 
> +/**
> 
> +  The PCI Express Configuration info includes PCI Resources Range Base and
> Limits and the control
> 
> +  for PEG ASPM.
> 
> +  The data elements should be initialized by a Platform Module.\n
> 
> +  @note <b>Optional.</b> These policies will be ignored if there is no PEG
> port present on board.
> 
> +  <b>Revision 1</b>:
> 
> +  - Initial version.
> 
> +  <b>Revision 2</b>:
> 
> +  -  Adding PEG RTD3 Support Setup Variable
> 
> +  <b>Revision 3</b>:
> 
> +  -  Adding CPU PCIE RTD3 Support Setup Variable
> 
> +  -  Deprecating PEG RTD3 Support Setup Variable
> 
> +  <b>Revision 4</b>:
> 
> +  -  Deprecating CPU PCIE RTD3 Support Setup Variable
> 
> +**/
> 
> +typedef struct {
> 
> +  CONFIG_BLOCK_HEADER      Header;                         ///< Offset 0-27 Config
> Block Header
> 
> +/**
> 
> +  Offset 28: This field is used to describe the ASPM control for PEG Ports\n
> 
> +  0=ASPM Disabled, 1=ASPM L0s Enabled, 2=ASPM L1 Enabled, 3=ASPM
> L0sL1 Enabled, <b>4=ASPM AUTO</b>
> 
> +**/
> 
> +  UINT8                    PegAspm[SA_PEG_MAX_FUN];
> 
> +/**
> 
> +  Offset 32: PCIe Hot Plug Enable/Disable. It has 2 policies.
> 
> +   - <b>Disabled (0x0)</b>     : No hotplug.
> 
> +   - Enabled (0x1)      : Bios assist hotplug.
> 
> +**/
> 
> +  UINT8                    PegRootPortHPE[SA_PEG_MAX_FUN];
> 
> +  CPU_PCIE_PWR_OPT          PegPwrOpt[SA_PEG_MAX_FUN];     ///< Offset
> 36: This field is used to describe the PCIe LTR/OBFF relevant settings
> 
> +  UINT32                   PegRtd3;                       ///  Deprecated Policy
> 
> +  UINT8                    CpuPcieRtd3;                   ///< Enable/Disable RTD3 Support
> for CPU PCIE. 0=Disable and 1=Enable (default)  // Deprecated Policy
> 
> +  UINT8                    Rsvd3[3];
> 
> +} PCIE_DXE_CONFIG;
> 
> +#pragma pack(pop)
> 
> +
> 
> +#endif // _PCIE_DXE_CONFIG_H_
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/PramP
> reMemConfig.h
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/PramP
> reMemConfig.h
> new file mode 100644
> index 0000000000..8947e80b22
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/PramP
> reMemConfig.h
> @@ -0,0 +1,34 @@
> +/** @file
> 
> +  Policy definition for Persisted Ram (Pram) Config Block
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#ifndef _PRAM_PREMEM_CONFIG__H_
> 
> +#define _PRAM_PREMEM_CONFIG__H_
> 
> +#pragma pack(push, 1)
> 
> +
> 
> +#define PRAM_PREMEM_CONFIG_REVISION 1
> 
> +
> 
> +/**
> 
> + Defines Pram configuration parameters.\n
> 
> +  <b>Revision 1</b>:
> 
> +  - Initial version.
> 
> +**/
> 
> +typedef struct {
> 
> +  CONFIG_BLOCK_HEADER  Header;    ///< Offset 0-27 Config Block Header
> 
> +  /**
> 
> +  Offset 28:
> 
> +  Size of Pram
> 
> +  If disabled, or if PcdSaOcEnable is disabled, all other policies in this config
> block are ignored.
> 
> +  <b>0=Disable</b>,
> 
> +  1=4MB,
> 
> +  2=16MB,
> 
> +  3=64MB
> 
> +  **/
> 
> +  UINT8   Pram;
> 
> +  UINT8   Rsvd[3];                ///< Offset 29 Reserved for DWORD alignment
> 
> +} PRAM_PREMEM_CONFIG;
> 
> +#pragma pack(pop)
> 
> +
> 
> +#endif // _PRAM_CONFIG_H_
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/SaMisc
> PeiConfig.h
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/SaMis
> cPeiConfig.h
> new file mode 100644
> index 0000000000..203d894df9
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/SaMis
> cPeiConfig.h
> @@ -0,0 +1,24 @@
> +/** @file
> 
> +  Policy details for miscellaneous configuration in System Agent
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#ifndef _SA_MISC_PEI_CONFIG_H_
> 
> +#define _SA_MISC_PEI_CONFIG_H_
> 
> +
> 
> +#pragma pack(push, 1)
> 
> +
> 
> +#define SA_MISC_PEI_CONFIG_REVISION 1
> 
> +
> 
> +/**
> 
> +  This configuration block is to configure SA Miscellaneous variables during
> PEI Post-Mem.\n
> 
> +  <b>Revision 1</b>:
> 
> +  - Initial version.
> 
> +**/
> 
> +typedef struct {
> 
> +  CONFIG_BLOCK_HEADER  Header;               ///< Offset 0-27 Config Block
> Header
> 
> +} SA_MISC_PEI_CONFIG;
> 
> +#pragma pack(pop)
> 
> +
> 
> +#endif // _SA_MISC_PEI_CONFIG_H_
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/SaMisc
> PeiPreMemConfig.h
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/SaMis
> cPeiPreMemConfig.h
> new file mode 100644
> index 0000000000..8c660b31a9
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/ConfigBlock/SaMis
> cPeiPreMemConfig.h
> @@ -0,0 +1,104 @@
> +/** @file
> 
> +  Policy details for miscellaneous configuration in System Agent
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#ifndef _SA_MISC_PEI_PREMEM_CONFIG_H_
> 
> +#define _SA_MISC_PEI_PREMEM_CONFIG_H_
> 
> +
> 
> +#pragma pack(push, 1)
> 
> +
> 
> +#ifndef MEM_CFG_MAX_SOCKETS
> 
> +#define MEM_CFG_MAX_SOCKETS 16
> 
> +#endif
> 
> +
> 
> +#define SA_MISC_PEI_PREMEM_CONFIG_REVISION 2
> 
> +
> 
> +/**
> 
> +  This configuration block is to configure SA Miscellaneous variables during
> PEI Pre-Mem phase like programming
> 
> +  different System Agent BARs, TsegSize, MmioSize required etc.
> 
> +  <b>Revision 1</b>:
> 
> +  - Initial version.
> 
> +  <b>Revision 2</b>:
> 
> +  - Deprecate IedSize.
> 
> +**/
> 
> +typedef struct {
> 
> +  CONFIG_BLOCK_HEADER  Header;               ///< Offset 0-27 Config Block
> Header
> 
> +  /**
> 
> +    Offset 28 Memory DIMMs' SPD address for reading SPD data.
> 
> +    TGL Mapping
> 
> +      0 - Controller 0 Channel 0 Dimm 0 - DDR4 - DDR5 - LPDDR4 - LPDDR5
> 
> +      1 - Controller 0 Channel 0 Dimm 1 - DDR4
> 
> +      2 - Controller 0 Channel 1 Dimm 0 -------- DDR5 - LPDDR4 - LPDDR5
> 
> +      3 - Controller 0 Channel 1 Dimm 1 -------- DDR5 2DPC
> 
> +      4 - Controller 0 Channel 2 Dimm 0 --------------- LPDDR4 - LPDDR5
> 
> +      6 - Controller 0 Channel 3 Dimm 0 --------------- LPDDR4 - LPDDR5
> 
> +      8 - Controller 1 Channel 0 Dimm 0 - DDR4 - DDR5 - LPDDR4 - LPDDR5
> 
> +      9 - Controller 1 Channel 0 Dimm 1 - DDR4
> 
> +     10 - Controller 1 Channel 1 Dimm 0 -------- DDR5 - LPDDR4 - LPDDR5
> 
> +     11 - Controller 1 Channel 1 Dimm 1 -------- DDR5 2DPC
> 
> +     12 - Controller 1 Channel 2 Dimm 0 --------------- LPDDR4 - LPDDR5
> 
> +     14 - Controller 1 Channel 3 Dimm 0 --------------- LPDDR4 - LPDDR5
> 
> +  **/
> 
> +  UINT8   SpdAddressTable[MEM_CFG_MAX_SOCKETS];
> 
> +  VOID    *S3DataPtr;                        ///< Offset 44 Memory data save pointer
> for S3 resume. The memory space should be allocated and filled with proper
> S3 resume data on a resume path
> 
> +  UINT32  SmbusBar;                          ///< Offset 48 Address of System Agent
> SMBUS BAR: <b>0xEFA0</b>
> 
> +  /**
> 
> +    Offset 52 Size of TSEG in bytes. (Must be power of 2)
> 
> +    <b>0x400000</b>: 4MB for Release build (When IED enabled, it will be
> 8MB)
> 
> +    0x1000000      : 16MB for Debug build (Regardless IED enabled or disabled)
> 
> +  **/
> 
> +  UINT32  TsegSize;
> 
> +  /**
> 
> +    Offset 56
> 
> +    <b>(Test)</b> Size of IED region in bytes.
> 
> +    <b>0</b> : IED Disabled (no memory occupied)
> 
> +    0x400000 : 4MB SMM memory occupied by IED (Part of TSEG)
> 
> +    <b>Note: Enabling IED may also enlarge TsegSize together.</b>
> 
> +    @deprecated
> 
> +  **/
> 
> +  UINT32  IedSize;
> 
> +  UINT32  SkipExtGfxScan:1;                  ///< <b>(Test)</b> OFfset 60:0 :1=Skip
> External Gfx Device Scan; <b>0=Scan for external graphics devices</b>. Set
> this policy to skip External Graphics card scanning if the platform uses Internal
> Graphics only.
> 
> +  UINT32  BdatEnable:1;                      ///< Offset 60:1 :This field enables the
> generation of the BIOS DATA ACPI Tables: <b>0=FALSE</b>, 1=TRUE.
> 
> +  UINT32  TxtImplemented:1;                  ///< OFfset 60:2 :This field currently is
> used to tell MRC if it should run after TXT initializatoin completed: <b>0=Run
> without waiting for TXT</b>, 1=Run after TXT initialization by callback
> 
> +  /**
> 
> +   Offset 60:3 :
> 
> +   <b>(Test)</b> Scan External Discrete Graphics Devices for Legacy Only
> VGA OpROMs
> 
> +
> 
> +   When enabled, if the primary graphics device is an external discrete
> graphics device, Si will scan the
> 
> +   graphics device for legacy only VGA OpROMs.
> 
> +
> 
> +   This is intended to ease the implementation of a BIOS feature to
> automatically enable CSM if the Primary Gfx device
> 
> +   only supports Legacy VBIOS (No UEFI GOP Present).  Otherwise disabling
> CSM won't result in no video being displayed.
> 
> +   This is useful for platforms that implement PCIe slots that allow the end
> user to install an arbitrary Gfx device.
> 
> +
> 
> +   This setting will only take effect if SkipExtGfxScan == 0.  It is ignored
> otherwise.
> 
> +
> 
> +  - Disabled (0x0)         : Don't Scan for Legacy Only VGA OpROMs (Default)
> 
> +  - <b>Enabled</b>  (0x1)  : Scan External Gfx for Legacy Only VGA OpROM
> 
> +  **/
> 
> +  UINT32  ScanExtGfxForLegacyOpRom:1;
> 
> +  UINT32  RsvdBits0  :28;                    ///< Offset 60:4 :Reserved for future use
> 
> +  UINT8   UserBd;                            ///< Offset 64 <b>0=Mobile/Mobile
> Halo</b>, 1=Desktop/DT Halo, 5=ULT/ULX/Mobile Halo, 7=UP Server
> 
> +  UINT8   LockPTMregs;                       ///< <b>(Test)</b> Offset 65 Lock PCU
> Thermal Management registers: 0=FALSE, <b>1=TRUE</b>
> 
> +  UINT8   BdatTestType;                      ///< Offset 66 When BdatEnable is set to
> TRUE, this option selects the type of data which will be populated in the BIOS
> Data ACPI Tables: <b>0=RMT</b>, 1=RMT Per Bit, 2=Margin 2D.
> 
> +  UINT8   CridEnable;                        ///< Offset 67 For Platforms supporting
> Intel(R) SIPP, this policy is use control enable/disable Compatibility Revision
> ID (CRID) feature: <b>0=FALSE</b>, 1=TRUE
> 
> +  UINT32  AcpiReservedMemorySize;            ///< Offset 68 The Size of a
> Reserved memory buffer allocated in previous boot for S3 resume used.
> Originally it is retrieved from AcpiVariableCompatibility variable.
> 
> +  UINT32  OpRomScanTempMmioBar;              ///< <b>(Test)</b> Offset 72
> Temporary address to MMIO map OpROMs during VGA scanning.  Used for
> ScanExtGfxForLegacyOpRom feature.  MUST BE 16MB ALIGNED!
> 
> +  UINT32  OpRomScanTempMmioLimit;            ///< <b>(Test)</b> Offset 76
> Limit address for OpROM MMIO range.  Used for
> ScanExtGfxForLegacyOpRom feature. (OpROMScanTempMmioLimit -
> OpRomScanTempMmioBar) MUST BE >= 16MB!
> 
> +  UINT64  AcpiReservedMemoryBase;            ///< Offset 80 The Base address
> of a Reserved memory buffer allocated in previous boot for S3 resume used.
> Originally it is retrieved from AcpiVariableCompatibility variable.
> 
> +  UINT64  SystemMemoryLength;                ///< Offset 88 Total system
> memory length from previous boot, this is required for S3 resume. Originally
> it is retrieved from AcpiVariableCompatibility variable.
> 
> +
> 
> +  UINT8   WrcFeatureEnable;                   ///< Offset 96: Enable/Disable WRC
> (Write Cache) feature of IOP. When enabled, supports IO devices allocating
> onto the ring and into LLC.
> 
> +  UINT8   Reserved1[3];                       ///< Reserved for config block alignment.
> 
> +
> 
> +
> 
> +  // Since the biggest element is UINT64, this structure should be aligned
> with 64 bits.
> 
> +  UINT8   Rsvd[4];                           ///< Reserved for config block alignment.
> 
> +
> 
> +
> 
> +} SA_MISC_PEI_PREMEM_CONFIG;
> 
> +#pragma pack(pop)
> 
> +
> 
> +#endif // _SA_MISC_PEI_PREMEM_CONFIG_H_
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/Library/SaPlatform
> Lib.h
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/Library/SaPlatform
> Lib.h
> new file mode 100644
> index 0000000000..daf3746605
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/Library/SaPlatform
> Lib.h
> @@ -0,0 +1,48 @@
> +/** @file
> 
> +  Header file for SaPlatformLib.
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +
> 
> +#ifndef _SA_PLATFORM_LIB_H_
> 
> +#define _SA_PLATFORM_LIB_H_
> 
> +
> 
> +
> 
> +/**
> 
> +  Checks if SKU is Mobile
> 
> +
> 
> +  @retval FALSE  SKU is not Mobile
> 
> +  @retval TRUE   SKU is Mobile
> 
> +**/
> 
> +BOOLEAN
> 
> +EFIAPI
> 
> +IsMobileSku (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +/**
> 
> +  Checks if SKU is Desktop
> 
> +
> 
> +  @retval FALSE  SKU is not Desktop
> 
> +  @retval TRUE   SKU is Desktop
> 
> +**/
> 
> +BOOLEAN
> 
> +EFIAPI
> 
> +IsDesktopSku (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +/**
> 
> +  Checks if SKU is Server
> 
> +
> 
> +  @retval FALSE  SKU is not Server
> 
> +  @retval TRUE   SKU is Server
> 
> +**/
> 
> +BOOLEAN
> 
> +EFIAPI
> 
> +IsServerSku (
> 
> +  VOID
> 
> +  );
> 
> +
> 
> +#endif
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/MemInfoHob.h
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/MemInfoHob.h
> new file mode 100644
> index 0000000000..b50d7e5188
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/MemInfoHob.h
> @@ -0,0 +1,264 @@
> +/** @file
> 
> +  This file contains definitions required for creation of
> 
> +  Memory S3 Save data, Memory Info data and Memory Platform
> 
> +  data hobs.
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#ifndef _MEM_INFO_HOB_H_
> 
> +#define _MEM_INFO_HOB_H_
> 
> +
> 
> +#pragma pack (push, 1)
> 
> +
> 
> +extern EFI_GUID gSiMemoryS3DataGuid;
> 
> +extern EFI_GUID gSiMemoryInfoDataGuid;
> 
> +extern EFI_GUID gSiMemoryPlatformDataGuid;
> 
> +
> 
> +#define MAX_TRACE_CACHE_TYPE  3
> 
> +
> 
> +#define MAX_NODE        2
> 
> +#define MAX_CH          4
> 
> +#define MAX_DIMM        2
> 
> +
> 
> +///
> 
> +/// Host reset states from MRC.
> 
> +///
> 
> +#define  WARM_BOOT        2
> 
> +
> 
> +#define R_MC_CHNL_RANK_PRESENT  0x7C
> 
> +#define   B_RANK0_PRS           BIT0
> 
> +#define   B_RANK1_PRS           BIT1
> 
> +#define   B_RANK2_PRS           BIT4
> 
> +#define   B_RANK3_PRS           BIT5
> 
> +
> 
> +// @todo remove and use the MdePkg\Include\Pi\PiHob.h
> 
> +#if !defined(_PEI_HOB_H_) && !defined(__PI_HOB_H__)
> 
> +#ifndef __HOB__H__
> 
> +typedef struct _EFI_HOB_GENERIC_HEADER {
> 
> +  UINT16  HobType;
> 
> +  UINT16  HobLength;
> 
> +  UINT32  Reserved;
> 
> +} EFI_HOB_GENERIC_HEADER;
> 
> +
> 
> +typedef struct _EFI_HOB_GUID_TYPE {
> 
> +  EFI_HOB_GENERIC_HEADER  Header;
> 
> +  EFI_GUID                Name;
> 
> +  ///
> 
> +  /// Guid specific data goes here
> 
> +  ///
> 
> +} EFI_HOB_GUID_TYPE;
> 
> +#endif
> 
> +#endif
> 
> +
> 
> +///
> 
> +/// Defines taken from MRC so avoid having to include MrcInterface.h
> 
> +///
> 
> +
> 
> +//
> 
> +// Matches MAX_SPD_SAVE define in MRC
> 
> +//
> 
> +#ifndef MAX_SPD_SAVE
> 
> +#define MAX_SPD_SAVE 29
> 
> +#endif
> 
> +
> 
> +//
> 
> +// MRC version description.
> 
> +//
> 
> +typedef struct {
> 
> +  UINT8  Major;     ///< Major version number
> 
> +  UINT8  Minor;     ///< Minor version number
> 
> +  UINT8  Rev;       ///< Revision number
> 
> +  UINT8  Build;     ///< Build number
> 
> +} SiMrcVersion;
> 
> +
> 
> +//
> 
> +// Matches MrcDimmSts enum in MRC
> 
> +//
> 
> +#ifndef DIMM_ENABLED
> 
> +#define DIMM_ENABLED     0  // DIMM/rank Pair is enabled, presence will
> be detected.
> 
> +#endif
> 
> +#ifndef DIMM_DISABLED
> 
> +#define DIMM_DISABLED    1  // DIMM/rank Pair is disabled, regardless of
> presence.
> 
> +#endif
> 
> +#ifndef DIMM_PRESENT
> 
> +#define DIMM_PRESENT     2  // There is a DIMM present in the slot/rank
> pair and it will be used.
> 
> +#endif
> 
> +#ifndef DIMM_NOT_PRESENT
> 
> +#define DIMM_NOT_PRESENT 3  // There is no DIMM present in the
> slot/rank pair.
> 
> +#endif
> 
> +
> 
> +//
> 
> +// Matches MrcBootMode enum in MRC
> 
> +//
> 
> +#ifndef __MRC_BOOT_MODE__
> 
> +#define __MRC_BOOT_MODE__                 //The below values are originated
> from MrcCommonTypes.h
> 
> +  #ifndef INT32_MAX
> 
> +  #define INT32_MAX                       (0x7FFFFFFF)
> 
> +  #endif  //INT32_MAX
> 
> +typedef enum {
> 
> +  bmCold,                                 ///< Cold boot
> 
> +  bmWarm,                                 ///< Warm boot
> 
> +  bmS3,                                   ///< S3 resume
> 
> +  bmFast,                                 ///< Fast boot
> 
> +  MrcBootModeMax,                         ///< MRC_BOOT_MODE enumeration
> maximum value.
> 
> +  MrcBootModeDelim = INT32_MAX            ///< This value ensures the enum
> size is consistent on both sides of the PPI.
> 
> +} MRC_BOOT_MODE;
> 
> +#endif  //__MRC_BOOT_MODE__
> 
> +
> 
> +//
> 
> +// Matches MrcDdrType enum in MRC
> 
> +//
> 
> +#ifndef MRC_DDR_TYPE_DDR4
> 
> +#define MRC_DDR_TYPE_DDR4     0
> 
> +#endif
> 
> +#ifndef MRC_DDR_TYPE_DDR3
> 
> +#define MRC_DDR_TYPE_DDR3     1
> 
> +#endif
> 
> +#ifndef MRC_DDR_TYPE_LPDDR3
> 
> +#define MRC_DDR_TYPE_LPDDR3   2
> 
> +#endif
> 
> +#ifndef MRC_DDR_TYPE_LPDDR4
> 
> +#define MRC_DDR_TYPE_LPDDR4   3
> 
> +#endif
> 
> +#ifndef MRC_DDR_TYPE_WIO2
> 
> +#define MRC_DDR_TYPE_WIO2     4
> 
> +#endif
> 
> +#ifndef MRC_DDR_TYPE_UNKNOWN
> 
> +#define MRC_DDR_TYPE_UNKNOWN  5
> 
> +#endif
> 
> +
> 
> +#define MAX_PROFILE_NUM     4 // number of memory profiles supported
> 
> +#define MAX_XMP_PROFILE_NUM 2 // number of XMP profiles supported
> 
> +
> 
> +//
> 
> +// DIMM timings
> 
> +//
> 
> +typedef struct {
> 
> +  UINT32 tCK;       ///< Memory cycle time, in femtoseconds.
> 
> +  UINT16 NMode;     ///< Number of tCK cycles for the channel DIMM's
> command rate mode.
> 
> +  UINT16 tCL;       ///< Number of tCK cycles for the channel DIMM's CAS
> latency.
> 
> +  UINT16 tCWL;      ///< Number of tCK cycles for the channel DIMM's
> minimum CAS write latency time.
> 
> +  UINT16 tFAW;      ///< Number of tCK cycles for the channel DIMM's
> minimum four activate window delay time.
> 
> +  UINT16 tRAS;      ///< Number of tCK cycles for the channel DIMM's
> minimum active to precharge delay time.
> 
> +  UINT16 tRCDtRP;   ///< Number of tCK cycles for the channel DIMM's
> minimum RAS# to CAS# delay time and Row Precharge delay time.
> 
> +  UINT16 tREFI;     ///< Number of tCK cycles for the channel DIMM's
> minimum Average Periodic Refresh Interval.
> 
> +  UINT16 tRFC;      ///< Number of tCK cycles for the channel DIMM's
> minimum refresh recovery delay time.
> 
> +  UINT16 tRFCpb;    ///< Number of tCK cycles for the channel DIMM's
> minimum per bank refresh recovery delay time.
> 
> +  UINT16 tRFC2;     ///< Number of tCK cycles for the channel DIMM's
> minimum refresh recovery delay time.
> 
> +  UINT16 tRFC4;     ///< Number of tCK cycles for the channel DIMM's
> minimum refresh recovery delay time.
> 
> +  UINT16 tRPab;     ///< Number of tCK cycles for the channel DIMM's
> minimum row precharge delay time for all banks.
> 
> +  UINT16 tRRD;      ///< Number of tCK cycles for the channel DIMM's
> minimum row active to row active delay time.
> 
> +  UINT16 tRRD_L;    ///< Number of tCK cycles for the channel DIMM's
> minimum row active to row active delay time for same bank groups.
> 
> +  UINT16 tRRD_S;    ///< Number of tCK cycles for the channel DIMM's
> minimum row active to row active delay time for different bank groups.
> 
> +  UINT16 tRTP;      ///< Number of tCK cycles for the channel DIMM's
> minimum internal read to precharge command delay time.
> 
> +  UINT16 tWR;       ///< Number of tCK cycles for the channel DIMM's
> minimum write recovery time.
> 
> +  UINT16 tWTR;      ///< Number of tCK cycles for the channel DIMM's
> minimum internal write to read command delay time.
> 
> +  UINT16 tWTR_L;    ///< Number of tCK cycles for the channel DIMM's
> minimum internal write to read command delay time for same bank groups.
> 
> +  UINT16 tWTR_S;    ///< Number of tCK cycles for the channel DIMM's
> minimum internal write to read command delay time for different bank
> groups.
> 
> +  UINT16 tCCD_L;  ///< Number of tCK cycles for the channel DIMM's
> minimum CAS-to-CAS delay for same bank group.
> 
> +} MRC_CH_TIMING;
> 
> +
> 
> +///
> 
> +/// Memory SMBIOS & OC Memory Data Hob
> 
> +///
> 
> +typedef struct {
> 
> +  UINT8            Status;                  ///< See MrcDimmStatus for the definition of
> this field.
> 
> +  UINT8            DimmId;
> 
> +  UINT32           DimmCapacity;            ///< DIMM size in MBytes.
> 
> +  UINT16           MfgId;
> 
> +  UINT8            ModulePartNum[20];       ///< Module part number for DDR3 is
> 18 bytes however for DRR4 20 bytes as per JEDEC Spec, so reserving 20 bytes
> 
> +  UINT8            RankInDimm;              ///< The number of ranks in this DIMM.
> 
> +  UINT8            SpdDramDeviceType;       ///< Save SPD DramDeviceType
> information needed for SMBIOS structure creation.
> 
> +  UINT8            SpdModuleType;           ///< Save SPD ModuleType information
> needed for SMBIOS structure creation.
> 
> +  UINT8            SpdModuleMemoryBusWidth; ///< Save SPD
> ModuleMemoryBusWidth information needed for SMBIOS structure
> creation.
> 
> +  UINT8            SpdSave[MAX_SPD_SAVE];   ///< Save SPD Manufacturing
> information needed for SMBIOS structure creation.
> 
> +  UINT16           Speed;                   ///< The maximum capable speed of the
> device, in MHz
> 
> +  UINT8            MdSocket;                ///< MdSocket: 0 = Memory Down, 1 =
> Socketed. Needed for SMBIOS structure creation.
> 
> +} DIMM_INFO;
> 
> +
> 
> +typedef struct {
> 
> +  UINT8            Status;                  ///< Indicates whether this channel should be
> used.
> 
> +  UINT8            ChannelId;
> 
> +  UINT8            DimmCount;               ///< Number of valid DIMMs that exist in
> the channel.
> 
> +  MRC_CH_TIMING    Timing[MAX_PROFILE_NUM]; ///< The channel timing
> values.
> 
> +  DIMM_INFO        DimmInfo[MAX_DIMM];      ///< Save the DIMM output
> characteristics.
> 
> +} CHANNEL_INFO;
> 
> +
> 
> +typedef struct {
> 
> +  UINT8            Status;                  ///< Indicates whether this controller should
> be used.
> 
> +  UINT16           DeviceId;                ///< The PCI device id of this memory
> controller.
> 
> +  UINT8            RevisionId;              ///< The PCI revision id of this memory
> controller.
> 
> +  UINT8            ChannelCount;            ///< Number of valid channels that exist
> on the controller.
> 
> +  CHANNEL_INFO     ChannelInfo[MAX_CH];     ///< The following are
> channel level definitions.
> 
> +} CONTROLLER_INFO;
> 
> +
> 
> +typedef struct {
> 
> +  UINT64   BaseAddress;   ///< Trace Base Address
> 
> +  UINT64   TotalSize;     ///< Total Trace Region of Same Cache type
> 
> +  UINT8    CacheType;     ///< Trace Cache Type
> 
> +  UINT8    ErrorCode;     ///< Trace Region Allocation Fail Error code
> 
> +  UINT8    Rsvd[2];
> 
> +} PSMI_MEM_INFO;
> 
> +
> 
> +typedef struct {
> 
> +  UINT8             Revision;
> 
> +  UINT16            DataWidth;              ///< Data width, in bits, of this memory
> device
> 
> +  /** As defined in SMBIOS 3.0 spec
> 
> +    Section 7.18.2 and Table 75
> 
> +  **/
> 
> +  UINT8             MemoryType;             ///< DDR type: DDR3, DDR4, or LPDDR3
> 
> +  UINT16            MaximumMemoryClockSpeed;///< The maximum capable
> speed of the device, in megahertz (MHz)
> 
> +  UINT16            ConfiguredMemoryClockSpeed; ///< The configured clock
> speed to the memory device, in megahertz (MHz)
> 
> +  /** As defined in SMBIOS 3.0 spec
> 
> +    Section 7.17.3 and Table 72
> 
> +  **/
> 
> +  UINT8             ErrorCorrectionType;
> 
> +
> 
> +  SiMrcVersion      Version;
> 
> +  BOOLEAN           EccSupport;
> 
> +  UINT8             MemoryProfile;
> 
> +  UINT32            TotalPhysicalMemorySize;
> 
> +  UINT32            DefaultXmptCK[MAX_XMP_PROFILE_NUM];///< Stores the
> tCK value read from SPD XMP profiles if they exist.
> 
> +  UINT8             XmpProfileEnable;                  ///< If XMP capable DIMMs are
> detected, this will indicate which XMP Profiles are common among all
> DIMMs.
> 
> +  UINT8             Ratio;
> 
> +  UINT8             RefClk;
> 
> +  UINT32            VddVoltage[MAX_PROFILE_NUM];
> 
> +  CONTROLLER_INFO   Controller[MAX_NODE];
> 
> +} MEMORY_INFO_DATA_HOB;
> 
> +
> 
> +/**
> 
> +  Memory Platform Data Hob
> 
> +
> 
> +  <b>Revision 1:</b>
> 
> +  - Initial version.
> 
> +  <b>Revision 2:</b>
> 
> +  - Added TsegBase, PrmrrSize, PrmrrBase, Gttbase, MmioSize,
> PciEBaseAddress fields
> 
> +**/
> 
> +typedef struct {
> 
> +  UINT8             Revision;
> 
> +  UINT8             Reserved[3];
> 
> +  UINT32            BootMode;
> 
> +  UINT32            TsegSize;
> 
> +  UINT32            TsegBase;
> 
> +  UINT32            PrmrrSize;
> 
> +  UINT64            PrmrrBase;
> 
> +  UINT32            PramSize;
> 
> +  UINT64            PramBase;
> 
> +  UINT64            DismLimit;
> 
> +  UINT64            DismBase;
> 
> +  UINT32            GttBase;
> 
> +  UINT32            MmioSize;
> 
> +  UINT32            PciEBaseAddress;
> 
> +  PSMI_MEM_INFO     PsmiInfo[MAX_TRACE_CACHE_TYPE];
> 
> +} MEMORY_PLATFORM_DATA;
> 
> +
> 
> +typedef struct {
> 
> +  EFI_HOB_GUID_TYPE    EfiHobGuidType;
> 
> +  MEMORY_PLATFORM_DATA Data;
> 
> +  UINT8                *Buffer;
> 
> +} MEMORY_PLATFORM_DATA_HOB;
> 
> +
> 
> +#pragma pack (pop)
> 
> +
> 
> +#endif // _MEM_INFO_HOB_H_
> 
> diff --git
> a/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/Protocol/SaPolicy.h
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/Protocol/SaPolicy.h
> new file mode 100644
> index 0000000000..4ff2578038
> --- /dev/null
> +++
> b/Silicon/Intel/TigerlakeSiliconPkg/SystemAgent/Include/Protocol/SaPolicy.h
> @@ -0,0 +1,61 @@
> +/** @file
> 
> +  Interface definition details between System Agent and platform drivers
> during DXE phase.
> 
> +
> 
> +  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
> 
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> +**/
> 
> +#ifndef _SA_POLICY_H_
> 
> +#define _SA_POLICY_H_
> 
> +
> 
> +#include <ConfigBlock.h>
> 
> +#include <Library/ConfigBlockLib.h>
> 
> +#include <GraphicsConfig.h>
> 
> +#include <ConfigBlock/MemoryDxeConfig.h>
> 
> +#include <ConfigBlock/PcieDxeConfig.h>
> 
> +#include <VtdConfig.h>
> 
> +
> 
> +///
> 
> +/// Extern the GUID for protocol users.
> 
> +///
> 
> +extern EFI_GUID gSaPolicyProtocolGuid;
> 
> +extern EFI_GUID gGraphicsDxeConfigGuid;
> 
> +extern EFI_GUID gPcieDxeConfigGuid;
> 
> +extern EFI_GUID gMemoryDxeConfigGuid;
> 
> +extern EFI_GUID gVtdDxeConfigGuid;
> 
> +
> 
> +/**
> 
> +  Don't change the original SA_POLICY_PROTOCOL_REVISION macro,
> external
> 
> +  modules maybe have consumed this macro in their source code.  Directly
> 
> +  update the SA_POLICY_PROTOCOL_REVISION version number may cause
> those
> 
> +  external modules to auto mark themselves wrong version info.
> 
> +  Always create new version macro for new Policy protocol interface.
> 
> +**/
> 
> +#define SA_POLICY_PROTOCOL_REVISION  1
> 
> +
> 
> +#define CPU_PCIE_DEV_END_OF_TABLE                0xFFFF
> 
> +
> 
> +#define LTR_MAX_SNOOP_LATENCY_VALUE             0x0846    ///< Intel
> recommended maximum value for Snoop Latency
> 
> +#define LTR_MAX_NON_SNOOP_LATENCY_VALUE         0x0846    ///< Intel
> recommended maximum value for Non-Snoop Latency
> 
> +
> 
> +
> 
> +/**
> 
> +  SA DXE Policy
> 
> +
> 
> + The SA_POLICY_PROTOCOL producer drvier is recommended to
> 
> + set all the SA_POLICY_PROTOCOL size buffer zero before init any member
> parameter,
> 
> + this clear step can make sure no random value for those unknow new
> version parameters.
> 
> +
> 
> + Make sure to update the Revision if any change to the protocol, including
> the existing
> 
> + internal structure definations.\n
> 
> +  Note: Here revision will be bumped up when adding/removing any config
> block under this structure.\n
> 
> +  <b>Revision 1</b>:
> 
> +  - Initial version.
> 
> +**/
> 
> +typedef struct {
> 
> +  CONFIG_BLOCK_TABLE_HEADER      TableHeader;    ///< Offset 0-31
> 
> +/*
> 
> +  Individual Config Block Structures are added here in memory as part of
> AddConfigBlock()
> 
> +*/
> 
> +} SA_POLICY_PROTOCOL;
> 
> +
> 
> +#endif
> 
> --
> 2.24.0.windows.2


  reply	other threads:[~2021-02-04  3:54 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-01  1:36 [PATCH 01/40] TigerlakeSiliconPkg: Add package and Include/ConfigBlock headers Heng Luo
2021-02-01  1:36 ` [PATCH 02/40] TigerlakeSiliconPkg/Include: Add Library, PPI and Protocol include headers Heng Luo
2021-02-04  3:51   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 03/40] TigerlakeSiliconPkg/Include: Add Pins, Register and other " Heng Luo
2021-02-04  3:52   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 04/40] TigerlakeSiliconPkg/Cpu: Add Include headers Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 05/40] TigerlakeSiliconPkg/Pch: Add include headers Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 06/40] TigerlakeSiliconPkg/Pch: Add IncludePrivate headers Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 07/40] TigerlakeSiliconPkg/SystemAgent: Add include headers Heng Luo
2021-02-04  3:53   ` Nate DeSimone [this message]
2021-02-01  1:36 ` [PATCH 08/40] TigerlakeSiliconPkg/SystemAgent: Add IncludePrivate headers Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 09/40] TigerlakeSiliconPkg/Fru: Add TglCpu/Include headers Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 10/40] TigerlakeSiliconPkg/Fru: Add TglCpu/IncludePrivate headers Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 11/40] TigerlakeSiliconPkg/Fru: Add TglPch/Include headers Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 12/40] TigerlakeSiliconPkg/Fru: Add TglPch/IncludePrivate headers Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 13/40] TigerlakeSiliconPkg/IpBlock: Add Cnvi component Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 14/40] TigerlakeSiliconPkg/IpBlock: Add CpuPcieRp component Heng Luo
2021-02-04  3:53   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 15/40] TigerlakeSiliconPkg/IpBlock: Add Espi component Heng Luo
2021-02-04  3:54   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 16/40] TigerlakeSiliconPkg/IpBlock: Add Gbe component Heng Luo
2021-02-04  3:54   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 17/40] TigerlakeSiliconPkg/IpBlock: Add Gpio component Heng Luo
2021-02-04  3:54   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 18/40] TigerlakeSiliconPkg/IpBlock: Add Graphics component Heng Luo
2021-02-04  3:54   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 19/40] TigerlakeSiliconPkg/IpBlock: Add Hda component Heng Luo
2021-02-04  3:54   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 20/40] TigerlakeSiliconPkg/IpBlock: Add HostBridge component Heng Luo
2021-02-04  3:54   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 21/40] TigerlakeSiliconPkg/IpBlock: Add P2sb component Heng Luo
2021-02-04  3:54   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 22/40] TigerlakeSiliconPkg/IpBlock: Add PchDmi component Heng Luo
2021-02-04  3:54   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 23/40] TigerlakeSiliconPkg/IpBlock: Add PcieRp component Heng Luo
2021-02-04  3:55   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 24/40] TigerlakeSiliconPkg/IpBlock: Add Pmc component Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 25/40] TigerlakeSiliconPkg/IpBlock: Add Psf component Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 26/40] TigerlakeSiliconPkg/IpBlock: Add Sata component Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 27/40] TigerlakeSiliconPkg/IpBlock: Add SerialIo component Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 28/40] TigerlakeSiliconPkg/IpBlock: Add Smbus component Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 29/40] TigerlakeSiliconPkg/IpBlock: Add Spi component Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 30/40] TigerlakeSiliconPkg/IpBlock: Add Vtd component Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 31/40] TigerlakeSiliconPkg/Library: Add package common library instances Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 32/40] TigerlakeSiliconPkg/Pch: Add Pch " Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 33/40] TigerlakeSiliconPkg/Pch: Add Pch private " Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 34/40] TigerlakeSiliconPkg/SystemAgent: Add Acpi Tables and " Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 35/40] TigerlakeSiliconPkg/Fru/TglCpu: Add CpuPcieRp and Vtd " Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 36/40] TigerlakeSiliconPkg/Pch: Add Pch modules Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 37/40] TigerlakeSiliconPkg/SystemAgent: Add SystemAgent modules Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 38/40] TigerlakeSiliconPkg/Fru: Add Fru DSC files Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 39/40] TigerlakeSiliconPkg: Add package " Heng Luo
2021-02-04  3:56   ` Nate DeSimone
2021-02-01  1:36 ` [PATCH 40/40] Maintainers.txt: Add TigerlakeSiliconPkg maintainers Heng Luo
2021-02-04  3:51   ` Nate DeSimone
2021-02-04  8:24     ` Heng Luo
2021-02-04  3:51 ` [PATCH 01/40] TigerlakeSiliconPkg: Add package and Include/ConfigBlock headers Nate DeSimone

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=BN6PR1101MB2147796FA5D8D26DB116C145CDB39@BN6PR1101MB2147.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