alder_lake_bios/Intel/AlderLake/ClientOneSiliconPkg/SystemAgent/Include/ConfigBlock/SaMiscPeiPreMemConfig.h

147 lines
9.3 KiB
C

/** @file
Policy details for miscellaneous configuration in System Agent
@copyright
INTEL CONFIDENTIAL
Copyright 2015 - 2020 Intel Corporation.
The source code contained or described herein and all documents related to the
source code ("Material") are owned by Intel Corporation or its suppliers or
licensors. Title to the Material remains with Intel Corporation or its suppliers
and licensors. The Material may contain trade secrets and proprietary and
confidential information of Intel Corporation and its suppliers and licensors,
and is protected by worldwide copyright and trade secret laws and treaty
provisions. No part of the Material may be used, copied, reproduced, modified,
published, uploaded, posted, transmitted, distributed, or disclosed in any way
without Intel's prior express written permission.
No license under any patent, copyright, trade secret or other intellectual
property right is granted to or conferred upon you by disclosure or delivery
of the Materials, either expressly, by implication, inducement, estoppel or
otherwise. Any license under such intellectual property rights must be
express and approved by Intel in writing.
Unless otherwise agreed by Intel in writing, you may not remove or alter
this notice or any other notice embedded in Materials by Intel or
Intel's suppliers or licensors in any way.
This file contains an 'Intel Peripheral Driver' and is uniquely identified as
"Intel Reference Module" and is licensed for Intel CPUs and chipsets under
the terms of your license agreement with Intel or your vendor. This file may
be modified by the user, subject to additional terms of the license agreement.
@par Specification Reference:
**/
#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 5
/**
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.
<b>Revision 3</b>:
- Adding ResizableBarSupport.
**/
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, 2=Desktop 2DPC DDR5, 5=ULT/ULX/Mobile Halo Type3, 6=ULT/ULX/Mobile Halo Type4, 8=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 FirstDimmBitMask; ///< Offset 97: Defines which DIMM should be populated first on a 2DPC board.
///< 4 bit mask: Bit[0]: MC0 DIMM0, Bit[1]: MC0 DIMM1, Bit[2]: MC1 DIMM0, Bit[3]: MC1 DIMM1.
///< For each MC, the first DIMM to be populated should be set to '1'.
///< Note: this mask is only for non-ECC DIMM.
UINT8 FirstDimmBitMaskEcc; ///< Offset 98: Defines which ECC DIMM should be populated first on a 2DPC board.
///< 4 bit mask: Bit[0]: MC0 DIMM0, Bit[1]: MC0 DIMM1, Bit[2]: MC1 DIMM0, Bit[3]: MC1 DIMM1.
///< For each MC, the first DIMM to be populated should be set to '1'.
///< For example, if one MC is T-topology, there is no special population rule, can put it as 11 for this MC and it means either D0 or D1 can be
///< be populated firstly.
///< Note: this mask is only for ECC DIMM, not for non-ECC DIMM.
UINT8 Reserved1[1]; ///< 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.
UINT8 ResizableBarSupport;
UINT8 Rsrvd1[7];
} SA_MISC_PEI_PREMEM_CONFIG;
#pragma pack(pop)
#endif // _SA_MISC_PEI_PREMEM_CONFIG_H_