vendorcode/intel/fsp/fsp2_0: add SPR-SP FSP header files

Intel Sapphire Rapids Scalable Processor was product launched
on Jan. 10, 2023.

Add the FSP/HOB header files corresponding to 2022 ww43 git tag
EGLSTRM.0.RPB.0090.D.03.

Change-Id: I818da37c10f40045d98a9f73e82034c3fe6459e2
Signed-off-by: Jonathan Zhang <jonzhang@meta.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/71948
Reviewed-by: Jonathan Zhang <jonzhang@fb.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: David Hendricks <david.hendricks@gmail.com>
This commit is contained in:
Jonathan Zhang
2023-01-04 12:23:11 -08:00
committed by David Hendricks
parent 55bc2d3e14
commit 9355bc0919
22 changed files with 3918 additions and 0 deletions

View File

@ -0,0 +1,92 @@
/** @file
CXL GUID HOB definitions
@copyright
INTEL CONFIDENTIAL
Copyright 2019 - 2021 Intel Corporation. <BR>
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.
**/
#ifndef _CXL_NODE_HOB_
#define _CXL_NODE_HOB_
#define CXL_NODE_HOB_GUID { 0xdd8ae009, 0xda5a, 0x44a3, { 0xbe, 0x18, 0xda, 0x0c, 0x16, 0xc5, 0xaf, 0x5c } }
#ifndef MAX_CXL_HDM_RANGES
#define MAX_CXL_HDM_RANGES 0x2 // Maximum number of CXL HDM ranges per CXL end device.
#endif
#ifndef MAX_CXL_PER_SOCKET
#define MAX_CXL_PER_SOCKET 8
#endif
#define CXL_NODE_ATTR_MEM BIT0
#define CXL_NODE_ATTR_PERSISTENT BIT1
#define CXL_NODE_ATTR_MEM_HW_INIT BIT2
#define CXL_NODE_ATTR_ACCELERATOR BIT3
typedef UINT32 CXL_NODE_ATTR;
#pragma pack(1)
//
// CDAT DSEMTS EFI Memory Type and Attribute
//
typedef enum {
CxlEfiConventionalMemory = 0x0,
CxlEfiConventionalMemorySp = 0x1,
CxlEfiReservedMemoryType = 0x2,
MaxCxlEfiMemType
} CXL_EFI_MEM_TYPE;
typedef struct {
UINT32 RdLatency;
UINT32 WrLatency;
UINT32 RdBandwidth;
UINT32 WrBandwidth;
} CXL_PERF_DATA;
typedef struct {
UINT64 SerialNumber;
UINT16 VendorId;
CXL_NODE_ATTR Attr;
UINT32 Address;
UINT32 Size;
UINT8 Ways;
UINT8 SocketBitmap;
CXL_EFI_MEM_TYPE EfiMemType;
CXL_PERF_DATA InitiatorPerfData; // Performance data between device egress and initiator.
CXL_PERF_DATA TargetPerfData; // Performance data of entire target memory region.
CXL_PERF_DATA InitiatorTargetPerfData; // performance data between initiator and the device memory.
} CXL_NODE_INFO;
typedef struct {
UINT8 CxlNodeCount;
//
// CXL node info for UEFI memory map and ACPI tables construction
//
CXL_NODE_INFO CxlNodeInfo[MAX_CXL_PER_SOCKET * MAX_CXL_HDM_RANGES];
} CXL_NODE_SOCKET;
#pragma pack()
#endif //#ifndef _CXL_NODE_HOB_

View File

@ -0,0 +1,167 @@
/** @file
Interface header file for the Enhanced warning log library class.
@copyright
INTEL CONFIDENTIAL
Copyright 2018 - 2021 Intel Corporation. <BR>
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.
**/
#ifndef _ENHANCED_WARNING_LOG_LIB_
#define _ENHANCED_WARNING_LOG_LIB_
#define FSP_RESERVED_LEN 12
#pragma pack(1)
///
/// Enhanced Warning Log Header
///
typedef struct {
EFI_GUID EwlGuid; /// GUID that uniquely identifies the EWL revision
UINT32 Size; /// Total size in bytes including the header and buffer
UINT32 FreeOffset; /// Offset of the beginning of the free space from byte 0
/// of the buffer immediately following this structure
/// Can be used to determine if buffer has sufficient space for next entry
UINT32 Crc; /// 32-bit CRC generated over the whole size minus this crc field
/// Note: UEFI 32-bit CRC implementation (CalculateCrc32) (References [7])
/// Consumers can ignore CRC check if not needed.
UINT32 Reserved; /// Reserved for future use, must be initialized to 0
} EWL_HEADER;
///
/// List of all entry types supported by this revision of EWL
///
typedef enum {
EwlType0 = 0,
EwlType1 = 1,
EwlType2 = 2,
EwlType3 = 3,
EwlType4 = 4,
EwlType5 = 5,
EwlType6 = 6,
EwlType7 = 7,
EwlType8 = 8,
EwlType9 = 9,
EwlType10 = 10,
EwlType11 = 11,
EwlType12 = 12,
EwlType13 = 13,
EwlType14 = 14,
EwlType15 = 15,
EwlType16 = 16,
EwlType17 = 17,
EwlType18 = 18,
EwlType19 = 19,
EwlType20 = 20,
EwlType21 = 21,
EwlType22 = 22,
EwlType23 = 23,
EwlType24 = 24,
EwlType25 = 25,
EwlType26 = 26,
EwlType27 = 27,
EwlType28 = 28,
EwlType29 = 29,
EwlType30 = 30,
EwlType31 = 31,
EwlType32 = 32,
EwlTypeMax,
EwlTypeOem = 0x8000,
EwlTypeDelim = MAX_INT32
} EWL_TYPE;
///
/// EWL severities
///
typedef enum {
EwlSeverityInfo,
EwlSeverityWarning,
EwlSeverityFatal,
EwlSeverityMax,
EwlSeverityDelim = MAX_INT32
} EWL_SEVERITY;
///
/// Generic entry header for parsing the log
///
typedef struct {
EWL_TYPE Type;
UINT16 Size; /// Entries will be packed by byte in contiguous space
EWL_SEVERITY Severity; /// Warning, error, informational, this may be extended in the future
} EWL_ENTRY_HEADER;
///
/// Legacy content provides context of the warning
///
typedef struct {
UINT8 MajorCheckpoint; // EWL Spec - Appendix B
UINT8 MinorCheckpoint;
UINT8 MajorWarningCode; // EWL Spec - Appendix A
UINT8 MinorWarningCode;
} EWL_ENTRY_CONTEXT;
///
/// Legacy content to specify memory location
///
typedef struct {
UINT8 Socket; /// 0xFF = n/a
UINT8 Channel; /// 0xFF = n/a
UINT8 PseudoChannel; /// 0xFF = n/a
UINT8 Dimm; /// 0xFF = n/a
UINT8 Rank; /// 0xFF = n/a
} EWL_ENTRY_MEMORY_LOCATION;
///
/// Type 3 = Enhanced type for command, control IO errors
///
typedef struct {
EWL_ENTRY_HEADER Header;
EWL_ENTRY_CONTEXT Context;
EWL_ENTRY_MEMORY_LOCATION MemoryLocation;
UINT8 reserved1[FSP_RESERVED_LEN]; // MRC_LT Level; MRC_GT Group; GSM_CSN Signal;
UINT8 EyeSize; // 0xFF = n/a
} EWL_ENTRY_TYPE3;
#pragma pack()
///
/// Enhanced Warning Log Spec defined data log structure
///
typedef struct {
EWL_HEADER Header; /// The size will vary by implementation and should not be assumed
UINT8 Buffer[4 * 1024]; /// The spec requirement is that the buffer follow the header
} EWL_PUBLIC_DATA;
///
/// EWL private data structure. This is going to be implementation dependent
/// When we separate OEM hooks via a PPI, we can remove this
///
typedef struct {
UINT32 bufSizeOverflow; // Number of bytes that could not be added to buffer
UINT32 numEntries; // Number of entries currently logged
EWL_PUBLIC_DATA status; // Spec defined EWL
} EWL_PRIVATE_DATA;
#endif // #ifndef _ENHANCED_WARNING_LOG_LIB_

View File

@ -0,0 +1,59 @@
/** @file
Header file for Firmware Version Information
@copyright
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _FIRMWARE_VERSION_INFO_HOB_H_
#define _FIRMWARE_VERSION_INFO_HOB_H_
#include <Uefi/UefiMultiPhase.h>
#include <Pi/PiBootMode.h>
#include <Pi/PiHob.h>
#pragma pack(1)
///
/// Firmware Version Structure
///
typedef struct {
UINT8 MajorVersion;
UINT8 MinorVersion;
UINT8 Revision;
UINT16 BuildNumber;
} FIRMWARE_VERSION;
///
/// Firmware Version Information Structure
///
typedef struct {
UINT8 ComponentNameIndex; ///< Offset 0 Index of Component Name
UINT8 VersionStringIndex; ///< Offset 1 Index of Version String
FIRMWARE_VERSION Version; ///< Offset 2-6 Firmware version
} FIRMWARE_VERSION_INFO;
#ifndef __SMBIOS_STANDARD_H__
///
/// The Smbios structure header.
///
typedef struct {
UINT8 Type;
UINT8 Length;
UINT16 Handle;
} SMBIOS_STRUCTURE;
#endif
///
/// Firmware Version Information HOB Structure
///
typedef struct {
EFI_HOB_GUID_TYPE Header; ///< Offset 0-23 The header of FVI HOB
SMBIOS_STRUCTURE SmbiosData; ///< Offset 24-27 The SMBIOS header of FVI HOB
UINT8 Count; ///< Offset 28 Number of FVI elements included.
///
/// FIRMWARE_VERSION_INFO structures followed by the null terminated string buffer
///
} FIRMWARE_VERSION_INFO_HOB;
#pragma pack()
#endif // _FIRMWARE_VERSION_INFO_HOB_H_

View File

@ -0,0 +1,17 @@
/** @file
Intel FSP definition from Intel Firmware Support Package External
Architecture Specification v2.2.
@copyright
Copyright (c) 2015 - 2021, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _FSP_EAS_H_
#define _FSP_EAS_H_
#include <Uefi.h>
#include <Guid/GuidHobFspEas.h>
#include <Guid/FspHeaderFile.h>
#include <FspEas/FspApi.h>
#endif // _FSP_EAS_H_

View File

@ -0,0 +1,83 @@
/** @file
FSP Error Information HOB to describe errors inside FSP that bootloader may
take some actions to handle those error scenarios.
@copyright
INTEL CONFIDENTIAL
Copyright 2022 Intel Corporation. <BR>
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.
**/
#ifndef _FSP_ERROR_INFO_HOB_H_
#define _FSP_ERROR_INFO_HOB_H_
#include <Uefi/UefiMultiPhase.h>
#include <Pi/PiBootMode.h>
#include <Pi/PiHob.h>
#include <Pi/PiStatusCode.h>
#define FSP_ERROR_INFO_HOB_GUID { 0x611e6a88, 0xadb7, 0x4301, { 0x93, 0xff, 0xe4, 0x73, 0x04, 0xb4, 0x3d, 0xa6 }}
#pragma pack(1)
typedef struct {
///
/// GUID HOB header.
///
EFI_HOB_GUID_TYPE GuidHob;
///
/// ReportStatusCode () type identifier.
///
EFI_STATUS_CODE_TYPE Type;
///
/// ReportStatusCode () value.
///
EFI_STATUS_CODE_VALUE Value;
///
/// ReportStatusCode () Instance number.
///
UINT32 Instance;
///
/// Optional GUID which may be used to identify
/// which internal component of the FSP was
/// executing at the time of the error.
///
EFI_GUID CallerId;
///
/// GUID identifying the nature of the fatal error.
///
EFI_GUID ErrorType;
///
/// EFI_STATUS code describing the error encountered.
///
UINT32 Status;
} FSP_ERROR_INFO_HOB;
#pragma pack()
#endif //#ifndef _FSP_ERROR_INFO_HOB_H_

View File

@ -0,0 +1,48 @@
/** @file
Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* Neither the name of Intel Corporation nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
This file is automatically generated. Please do NOT modify !!!
**/
#ifndef __FSPUPD_H__
#define __FSPUPD_H__
#include <FspEas.h>
#pragma pack(1)
#define FSPT_UPD_SIGNATURE 0x545F445055525053 /* 'SPRUPD_T' */
#define FSPM_UPD_SIGNATURE 0x4D5F445055525053 /* 'SPRUPD_M' */
#define FSPS_UPD_SIGNATURE 0x535F445055525053 /* 'SPRUPD_S' */
#pragma pack()
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,286 @@
/** @file
Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* Neither the name of Intel Corporation nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
This file is automatically generated. Please do NOT modify !!!
**/
#ifndef __FSPSUPD_H__
#define __FSPSUPD_H__
#include <FspUpd.h>
#pragma pack(1)
/** FSP-S Configuration
**/
typedef struct {
/** Offset 0x0020 - Processor VmxEnable Function
Processor VmxEnable Function - <b>1: Enable(Default)</b>, 0: Disable Processor VmxEnable Function.
0: Disable, 1: Enable
**/
UINT8 VmxEnable;
/** Offset 0x0021 - Processor TurboMode Function
Processor TurboMode Function - <b>1: Enable(Default)</b>, 0: Disable Processor TurboMode Function.
0: Disable, 1: Enable
**/
UINT8 TurboMode;
/** Offset 0x0022 - Processor Safer Mode Extensions Function
Processor Safer Mode Extensions Function - <b>0: Disable(Default)</b>, 1: Enable
Processor Safer Mode Extensions Function.
0: Disable, 1: Enable
**/
UINT8 ProcessorSmxEnable;
/** Offset 0x0023 - SstCp
SstCp - 1: Enable, <b>0: Disable SstCp(Default)</b>.
0: Disable, 1: Enable
**/
UINT8 SstCpSetting;
/** Offset 0x0024 - SstCp Capable Status
SST-CP Capable Status in system - <b>0: Disable(Default)</b>, 1: Enable.
0: Disable, 1: Enable
**/
UINT8 SstCpCapableSystem;
/** Offset 0x0025
**/
UINT8 UnusedUpdSpace0[1];
/** Offset 0x0026 - PCH Protect Range Limit
Left shifted address by 12 bits with address bits 11:0 are assumed to be FFFh for
limit comparison.
**/
UINT16 PchProtectedRangeLimit[5];
/** Offset 0x0030 - PCH Protect Range Base
Left shifted address by 12 bits with address bits 11:0 are assumed to be 0.
**/
UINT16 PchProtectedRangeBase[5];
/** Offset 0x003A - PchAdrEn
PchAdr - <b>0: PLATFORM POR(Default)</b>, 1: FORCE ENABLE, 2:FORCE DISABLE.
0: PLATFORM POR, 1: FORCE ENABLE, 2: FORCE DISABLE
**/
UINT8 PchAdrEn;
/** Offset 0x003B - EnableTme
EnableTme - <b>0: Disabled(Default)</b>, 1: Enabled, 2:Software Controlled.
0: Disabled, 1: Enabled, 2:Software Controlled
**/
UINT8 EnableTme;
/** Offset 0x003C - EnableTmeBypass
EnableTmeBypass - <b>0: Disabled(Default)</b>, 1: Enabled.
0: Disabled, 1: Enabled
**/
UINT8 EnableTmeBypass;
/** Offset 0x003D - SgxFactoryReset
SgxFactoryReset - <b>0: Disabled(Default)</b>, 1: Enabled.
0: Disabled, 1: Enabled
**/
UINT8 SgxFactoryReset;
/** Offset 0x003E - EnableSgx
EnableSgx - <b>0: Disabled(Default)</b>, 1: Enabled.
0: Disabled, 1: Enabled
**/
UINT8 EnableSgx;
/** Offset 0x003F - SgxPackageInfoInBandAccess
SgxPackageInfoInBandAccess - <b>0: Disabled(Default)</b>, 1: Enabled.
0: Disabled, 1: Enabled
**/
UINT8 SgxPackageInfoInBandAccess;
/** Offset 0x0040 - SgxQoS
SgxQoS - 0: Disabled, <b>1: Enabled(Default)</b>.
0: Disabled, 1: Enabled
**/
UINT8 SgxQoS;
/** Offset 0x0041 - EpochUpdate
EpochUpdate - 1: Change to New Random Owner EPOCHs, <b>2: Manual User Defined Owner
EPOCHs(Default)</b>.
1: Change to New Random Owner EPOCHs, 2: Manual User Defined Owner EPOCHs
**/
UINT8 EpochUpdate;
/** Offset 0x0042 - SgxLeWr
SgxLeWr - <b>0: Disabled(Default)</b>, 1: Enabled.
0: Disabled, 1: Enabled
**/
UINT8 SgxLeWr;
/** Offset 0x0043 - SgxDebugMode
SgxDebugMode - <b>0: Disabled(Default)</b>, 1: Enabled.
0: Disabled, 1: Enabled
**/
UINT8 SgxDebugMode;
/** Offset 0x0044 - SgxAutoRegistrationAgent
SgxAutoRegistrationAgent - <b>0: Disabled(Default)</b>, 1: Enabled.
0: Disabled, 1: Enabled
**/
UINT8 SgxAutoRegistrationAgent;
/** Offset 0x0045 - DfxSgxRegistrationServerSelect
DfxSgxRegistrationServerSelect - <b>0: SBX(Default)</b>, 1: PRX, 2:AUTO, 3:LIV,
4:SW Defined Server.
0: SBX, 1: PRX, 2:AUTO, 3:LIV, 4:SW Defined Server
**/
UINT8 DfxSgxRegistrationServerSelect;
/** Offset 0x0046 - Processor Enable Monitor MWAIT
Processor Enable Monitor MWAIT - <b>1: Enable(Default)</b>, 0: Disable Processor
Monitor MWAIT.
0: Disabled, 1: Enabled
**/
UINT8 CpuPmMonitorMWait;
/** Offset 0x0047 - Processor C6
Processor C6 - <b>1: Enable(Default)</b>, 0: Disable Processor C6 (ACPI C3) report to OS.
0: Disabled, 1: Enabled
**/
UINT8 CpuPmC6Enable;
/** Offset 0x0048 - Hardware P-States
Hardware P-States - 0: Disable: Hardware chooses a P-state based on OS Request
(Legacy P-States), <b>1:Native Mode:Hardware chooses a P-state based on OS guidance(Default)</b>,
2:Out of Band Mode:Hardware autonomously chooses a P-state (no OS guidance), 3:Native
Mode with No Legacy Support.
0: Disable, 1: Native Mode, 2: Out of Band Mode, 3: Native Mode with No Legacy Support
**/
UINT8 CpuPmProcessorHWPMEnable;
/** Offset 0x0049 - Power Performance Tuning
Power Performance Tuning - <b>0: OS Controls EPB (Default)</b>, 1: BIOS Controls
EPB, 2: PECI Controls EPB.
0: OS Controls EPB, 1: BIOS Controls EPB, 2: PECI Controls EPB
**/
UINT8 CpuPmPwrPerfTuning;
/** Offset 0x004A - Configure SST-BF
Allow (Default)/Disallow BIOS to configure SST-BF High Priority Cores so that SW
does not have to configure - 0:Disable, <b>1:Enable(Default)</b>.
0:Disable, 1:Enable
**/
UINT8 CpuPmProcessorConfigurePbf;
/** Offset 0x004B - CF9 Global Reset Promotion
CF9 Global Reset Promotion - 1: Enable promoting CF9 reset to global, <b>0: Disable
promoting CF9 reset to global(Default)</b>.
0: Disabled, 1: Enabled
**/
UINT8 MeGrPromotionEnabled;
/** Offset 0x004C - Global Reset Lock
Global Reset Lock - <b>1: Enable locking the joint ME and host reset capability(Default)</b>,
0: Disable locking the joint ME and host reset capability.
0: Disabled, 1: Enabled
**/
UINT8 MeGrLockEnabled;
/** Offset 0x004D - Delayed Authentication Mode
Enable or disable Delayed Authentication Mode - <b>0: Disable(Default)</b>, 1: Enable.
0:Disable, 1:Enable
**/
UINT8 DelayedAuthenticationMode;
/** Offset 0x004E - Delayed Authentication Mode Override
Enable or disable Delayed Authentication Mode Override - <b>0: Disable(Default)</b>,
1: Enable.
0:Disable, 1:Enable
**/
UINT8 DelayedAuthenticationModeOverride;
/** Offset 0x004F - Core Bios Done Message
Enable or disable Core Bios Done message sent to ME - 0: Disable, <b>1: Enable(Default)</b>.
0:Disable, 1:Enable
**/
UINT8 CoreBiosDoneEnabled;
/** Offset 0x0050 - End Of Post Message
Enable or disable sending END_OF_POST message to ME - 0: Disable, 1: Send in PEI,
<b>2: Send in DXE(Default)</b>.
0:Disable, 1:Send in PEI, 2:Send in DXE
**/
UINT8 EndOfPostMessage;
/** Offset 0x0051 - HMRFPO_LOCK Message
Enable or disable sending HMRFPO_LOCK message to ME - 0: Disable, <b>1: Enable(Default)</b>.
0:Disable, 1:Enable
**/
UINT8 MeHmrfpoLockEnabled;
/** Offset 0x0052 - HMRFPO_ENABLE Message
Enable or disable sending HMRFPO_ENABLE message to ME - <b>0: Disable(Default)</b>,
1: Enable.
0:Disable, 1:Enable
**/
UINT8 MeHmrfpoEnableEnabled;
/** Offset 0x0053
**/
UINT8 UnusedUpdSpace1[1];
/** Offset 0x0054
**/
UINT8 ReservedSiliconInitUpd[16];
} FSPS_CONFIG;
/** Fsp S UPD Configuration
**/
typedef struct {
/** Offset 0x0000
**/
FSP_UPD_HEADER FspUpdHeader;
/** Offset 0x0020
**/
FSPS_CONFIG FspsConfig;
/** Offset 0x0064
**/
UINT8 UnusedUpdSpace2[2];
/** Offset 0x0066
**/
UINT16 UpdTerminator;
} FSPS_UPD;
#pragma pack()
#endif

View File

@ -0,0 +1,109 @@
/** @file
Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* Neither the name of Intel Corporation nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
This file is automatically generated. Please do NOT modify !!!
**/
#ifndef __FSPTUPD_H__
#define __FSPTUPD_H__
#include <FspUpd.h>
#pragma pack(1)
/** FSP-T Core UPD
**/
typedef struct {
/** Offset 0x0020
**/
UINT32 MicrocodeRegionBase;
/** Offset 0x0024
**/
UINT32 MicrocodeRegionLength;
/** Offset 0x0028
**/
UINT32 CodeRegionBase;
/** Offset 0x002C
**/
UINT32 CodeRegionLength;
/** Offset 0x0030
**/
UINT8 Reserved1[16];
} FSPT_CORE_UPD;
/** FSP-T Configuration
**/
typedef struct {
/** Offset 0x0040 - Disable Port80 output in FSP-T
Select Port80 Control in FSP-T - 0:VPD-Style, <b>1:Enable Port80 Output (Default)</b>,
2:Disable Port80 Output, refer to FSP Integration Guide for details.
0:VPD-Style, 1:Enable Port80 Output[Default], 2:Disable Port80 Output
**/
UINT8 FsptPort80RouteDisable;
/** Offset 0x0041
**/
UINT8 ReservedTempRamInitUpd[31];
} FSPT_CONFIG;
/** Fsp T UPD Configuration
**/
typedef struct {
/** Offset 0x0000
**/
FSP_UPD_HEADER FspUpdHeader;
/** Offset 0x0020
**/
FSPT_CORE_UPD FsptCoreUpd;
/** Offset 0x0040
**/
FSPT_CONFIG FsptConfig;
/** Offset 0x0060
**/
UINT8 UnusedUpdSpace0[6];
/** Offset 0x0066
**/
UINT16 UpdTerminator;
} FSPT_UPD;
#pragma pack()
#endif

View File

@ -0,0 +1,143 @@
/** @file
Header file to define the structures used for FSPM dynamic configuration.
@copyright
INTEL CONFIDENTIAL
Copyright 2021 Intel Corporation. <BR>
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.
**/
#ifndef _IIO_PCIE_CONFIG_UPD_H_
#define _IIO_PCIE_CONFIG_UPD_H_
#ifndef MAX_SOCKET
#define MAX_SOCKET 4
#endif
#ifndef MAX_LOGIC_IIO_STACK
#define MAX_LOGIC_IIO_STACK 14
#endif
#ifndef MAX_IIO_PORTS_PER_SOCKET
#define MAX_IIO_PORTS_PER_SOCKET 57
#endif
#ifndef MAX_IOU_PER_SOCKET
#define MAX_IOU_PER_SOCKET 7
#endif
#define MAX_VMD_STACKS_PER_SOCKET 8 // Max number of stacks per socket supported by VMD
#pragma pack(1)
typedef struct {
UINT8 SLOTEIP[MAX_IIO_PORTS_PER_SOCKET]; // Electromechanical Interlock Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B17)
UINT8 SLOTHPCAP[MAX_IIO_PORTS_PER_SOCKET]; // Slot Hot Plug capable - Slot Capabilities (D0-10 / F0 / R0xA4 / B6)
UINT8 SLOTHPSUP[MAX_IIO_PORTS_PER_SOCKET]; // Hot Plug surprise supported - Slot Capabilities (D0-10 / F0 / R0xA4 / B5)
UINT8 SLOTPIP[MAX_IIO_PORTS_PER_SOCKET]; // Power Indicator Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B4)
UINT8 SLOTAIP[MAX_IIO_PORTS_PER_SOCKET]; // Attention Inductor Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B3)
UINT8 SLOTMRLSP[MAX_IIO_PORTS_PER_SOCKET]; // MRL Sensor Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B2)
UINT8 SLOTPCP[MAX_IIO_PORTS_PER_SOCKET]; // Power Controller Present - Slot Capabilities (D0-10 / F0 / R0xA4 /B1)
UINT8 SLOTABP[MAX_IIO_PORTS_PER_SOCKET]; // Attention Button Present - Slot Capabilities (D0-10 / F0 / R0xA4 / B0)
UINT8 SLOTIMP[MAX_IIO_PORTS_PER_SOCKET];
UINT8 SLOTSPLS[MAX_IIO_PORTS_PER_SOCKET];
UINT8 SLOTSPLV[MAX_IIO_PORTS_PER_SOCKET];
UINT16 SLOTPSP[MAX_IIO_PORTS_PER_SOCKET];
BOOLEAN VppEnabled[MAX_IIO_PORTS_PER_SOCKET]; // 00 -- Disable, 01 -- Enable //no setup option defined- aj
UINT8 VppPort[MAX_IIO_PORTS_PER_SOCKET]; // 00 -- Port 0, 01 -- Port 1 //no setup option defined- aj
UINT8 VppAddress[MAX_IIO_PORTS_PER_SOCKET]; // 01-07 for SMBUS address of Vpp //no setup option defined- aj
UINT8 MuxAddress[MAX_IIO_PORTS_PER_SOCKET]; // SMBUS address of MUX //no setup option defined
UINT8 ChannelID[MAX_IIO_PORTS_PER_SOCKET]; // 00 -- channel 0, 01 -- channel 1 //no setup option defined
UINT8 PciePortEnable[MAX_IIO_PORTS_PER_SOCKET];
UINT8 PEXPHIDE[MAX_IIO_PORTS_PER_SOCKET]; // Hide any of the DMI or PCIE devices - SKT 0,1,2,3; Device 0-10 PRD
UINT8 HidePEXPMenu[MAX_IIO_PORTS_PER_SOCKET]; // to suppress /display the PCIe port menu
UINT8 PciePortOwnership[MAX_IIO_PORTS_PER_SOCKET];
UINT8 RetimerConnectCount[MAX_IIO_PORTS_PER_SOCKET];
UINT8 ConfigIOU[MAX_IOU_PER_SOCKET]; // 00-x4x4x4x4, 01-x4x4x8NA, 02-x8NAx4x4, 03-x8NAx8NA, 04-x16 (P1p2p3p4)
UINT8 PcieHotPlugOnPort[MAX_IIO_PORTS_PER_SOCKET]; // Manual override of hotplug for port
UINT8 VMDEnabled[MAX_VMD_STACKS_PER_SOCKET];
UINT8 VMDPortEnable[MAX_IIO_PORTS_PER_SOCKET];
UINT8 VMDHotPlugEnable[MAX_VMD_STACKS_PER_SOCKET];
UINT8 PcieMaxPayload[MAX_IIO_PORTS_PER_SOCKET];
UINT8 PciePortLinkSpeed[MAX_IIO_PORTS_PER_SOCKET]; // auto - 0(default); gen1 -1; gen2 -2; ... gen5 -5.
UINT8 DfxDnTxPresetGen3[MAX_IIO_PORTS_PER_SOCKET]; //auto - 0xFF(default); p0 - 0; p1 -1; ... p9 - 9.
UINT8 PcieGlobalAspm;
UINT8 PcieMaxReadRequestSize;
} UPD_IIO_PCIE_PORT_CONFIG;
typedef struct {
struct {
UINT8 Segment; ///< Remember segment, if it changes reset everything
UINT8 StackPciBusPoolSize[MAX_LOGIC_IIO_STACK]; ///< Number of bus numbers needed for IIO stack
} Socket[MAX_SOCKET];
} SYSTEM_PCI_BUS_CONFIGURATION;
typedef struct {
UINT64 Base; ///< Base (starting) address of a range (I/O, 32 and 64-bit mmio regions)
UINT64 Limit; ///< Limit (last valid) address of a range
} PCIE_BASE_LIMIT;
typedef struct {
UINT32 MmioLSize;
UINT64 MmioHSize;
} CXL11_LIMITS;
typedef struct {
PCIE_BASE_LIMIT Io; ///< Base and limit of I/O range assigned to entity
PCIE_BASE_LIMIT LowMmio; ///< Base and limit of low MMIO region for entity
PCIE_BASE_LIMIT HighMmio; ///< Base and limit of high (64-bit) MMIO region for entity
} PCI_BASE_LIMITS;
typedef struct {
PCI_BASE_LIMITS SocketLimits; ///< Base and Limit of all PCIe resources for the socket
PCI_BASE_LIMITS StackLimits[MAX_LOGIC_IIO_STACK]; ///< Base and Limit of all PCIe resources for each stack of the socket
CXL11_LIMITS CxlStackReq[MAX_LOGIC_IIO_STACK]; ///< Base and Limit of CXL11 resources for each stack of the socket
} SOCKET_PCI_BASE_LIMITS;
typedef struct {
//
// Save basic system configuration parameters along with the resource map to detect a change.
// Remember low and high I/O memory range when saving recource configuration. It is used to verify
// whether system memory map changed. Remember also stacks configured when creating the map.
// If anything changed reset the system PCI resource configuration.
//
UINT64 MmioHBase;
UINT64 MmioHGranularity;
UINT32 MmioLBase;
UINT32 MmioLLimit;
UINT32 MmioLGranularity;
UINT16 IoBase;
UINT16 IoLimit;
UINT16 IoGranularity;
UINT32 StackPresentBitmap[MAX_SOCKET];
//
// Used by the PciHostBridge DXE driver, these variables don't need to be exposed through setup options
// The variables are used as a communication vehicle from the PciHostBridge DXE driver to an OEM hook
// which updates the KTI resource map.
//
SOCKET_PCI_BASE_LIMITS Socket[MAX_SOCKET]; ///< Base and limit of all PCIe resources for each socket
} SYSTEM_PCI_BASE_LIMITS;
#pragma pack()
#endif // _IIO_PCIE_CONFIG_UPD_H_

View File

@ -0,0 +1,251 @@
/** @file
Data format for IIO Universal Data HOB Structure
@copyright
INTEL CONFIDENTIAL
Copyright 1999 - 2021 Intel Corporation. <BR>
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.
**/
#ifndef _IIO_UNIVERSAL_DATA_HOB_H_
#define _IIO_UNIVERSAL_DATA_HOB_H_
#define IIO_UNIVERSAL_DATA_GUID { \
0xa1, 0x96, 0xf3, 0x7f, 0x7d, 0xee, 0x1e, 0x43, \
0xba, 0x53, 0x8f, 0xCa, 0x12, 0x7c, 0x44, 0xc0 \
}
#ifndef MAX_SOCKET
#define MAX_SOCKET 4
#endif
#if (MAX_SOCKET == 1)
#define MAX_FW_KTI_PORTS 4 // Maximum KTI PORTS to be used in structure definition.
#else
#define MAX_FW_KTI_PORTS 6 // Maximum KTI PORTS to be used in structure definition
#endif //(MAX_SOCKET == 1)
#ifndef MAX_IMC
#define MAX_IMC 4 // Maximum memory controllers per socket
#endif
#ifndef MAX_MC_CH
#define MAX_MC_CH 2 // Max number of channels per MC (3 for EP)
#endif
#ifndef MAX_CH
#define MAX_CH ((MAX_IMC)*(MAX_MC_CH)) // Max channels per socket (worst case EP * EX combination = 16)
#endif
#define MC_MAX_NODE (MAX_SOCKET * MAX_IMC) // Max number of memory nodes
#ifndef MAX_IIO_PORTS_PER_SOCKET
#define MAX_IIO_PORTS_PER_SOCKET 57
#endif
#ifndef MAX_IIO_STACK
#define MAX_IIO_STACK 12
#endif
#define MAX_LOGIC_IIO_STACK 14
#define MAX_COMPUTE_DIE 1
#define MAX_CHA_MAP (2 * MAX_COMPUTE_DIE) //for GNR & SRF only, each compute die has its own CAPID6 & CAPID7 (i.e. 2 CAPID registers)
#pragma pack(1)
typedef struct _UINT64_STRUCT {
UINT32 lo;
UINT32 hi;
} UINT64_STRUCT, *PUINT64_STRUCT;
#ifndef MMIO_BARS_ENUM
#define MMIO_BARS_ENUM
typedef enum {
TYPE_SCF_BAR = 0,
TYPE_PCU_BAR,
TYPE_MEM_BAR0,
TYPE_MEM_BAR1,
TYPE_MEM_BAR2,
TYPE_MEM_BAR3,
TYPE_MEM_BAR4,
TYPE_MEM_BAR5,
TYPE_MEM_BAR6,
TYPE_MEM_BAR7,
TYPE_SBREG_BAR,
TYPE_MAX_MMIO_BAR
} MMIO_BARS;
#endif
typedef struct {
UINT8 Device;
UINT8 Function;
} IIO_PORT_INFO;
typedef struct {
UINT8 Major;
UINT8 Minor;
UINT8 Revision;
UINT16 BuildNumber;
} RC_VERSION;
//--------------------------------------------------------------------------------------//
// Structure definitions for Universal Data Store (UDS)
//--------------------------------------------------------------------------------------//
typedef struct {
UINT8 Valid; // TRUE, if the link is valid (i.e reached normal operation)
UINT8 PeerSocId; // Socket ID
UINT8 PeerSocType; // Socket Type (0 - CPU; 1 - IIO)
UINT8 PeerPort; // Port of the peer socket
} QPI_PEER_DATA;
typedef struct {
UINT8 Valid;
UINT32 MmioBar[TYPE_MAX_MMIO_BAR];
UINT8 PcieSegment;
UINT64_STRUCT SegMmcfgBase;
UINT32 StackPresentBitmap;
UINT16 CxlPresentBitmap;
UINT16 Cxl20CapableBitmap;
UINT8 TotM3Kti;
UINT8 TotCha;
UINT32 ChaList[MAX_CHA_MAP];
UINT32 SocId;
QPI_PEER_DATA PeerInfo[MAX_FW_KTI_PORTS]; // QPI LEP info
} QPI_CPU_DATA;
typedef struct {
UINT8 Valid;
UINT8 SocId;
QPI_PEER_DATA PeerInfo[MAX_SOCKET]; // QPI LEP info
} QPI_IIO_DATA;
typedef struct {
IIO_PORT_INFO PortInfo[MAX_IIO_PORTS_PER_SOCKET];
} IIO_DMI_PCIE_INFO;
typedef struct _STACK_RES {
UINT8 Personality;
UINT8 BusBase; // Base of Bus configured for this stack
UINT8 BusLimit; // Limit of Bus configured for this stack
UINT16 IoBase; // Base of IO configured for this stack
UINT16 IoLimit; // Limit of IO configured for this stack
UINT32 IoApicBase;
UINT32 IoApicLimit;
UINT32 Mmio32Base; // Base of low MMIO configured for this stack in memory map
UINT32 Mmio32Limit; // Limit of low MMIO configured for this stack in memory map
UINT64 Mmio64Base; // Base of high MMIO configured for this stack in memory map
UINT64 Mmio64Limit; // Limit of high MMIO configured for this stack in memory map
UINT8 PciResourceBusBase; // Base of Bus resource available for PCI devices
UINT8 PciResourceBusLimit; // Limit of Bus resource available for PCI devices
UINT16 PciResourceIoBase; // Base of IO resource available for PCI devices
UINT16 PciResourceIoLimit; // Limit of IO resource available for PCI devices
UINT32 PciResourceMem32Base; // Base of low MMIO resource available for PCI devices
UINT32 PciResourceMem32Limit; // Limit of low MMIO resource available for PCI devices
UINT64 PciResourceMem64Base; // Base of high MMIO resource available for PCI devices
UINT64 PciResourceMem64Limit; // Limit of high MMIO resource available for PCI devices
UINT32 VtdBarAddress; // NOTE: Obsolete, not used in next gen platforms
} STACK_RES;
typedef struct {
UINT8 Valid;
UINT8 SocketID; // Socket ID of the IIO (0..3)
UINT8 BusBase;
UINT8 BusLimit;
UINT16 PciResourceIoBase;
UINT16 PciResourceIoLimit;
UINT32 IoApicBase;
UINT32 IoApicLimit;
UINT32 Mmio32Base; // Base of low MMIO configured for this socket in memory map
UINT32 Mmio32Limit; // Limit of low MMIO configured for this socket in memory map
UINT64 Mmio64Base; // Base of high MMIO configured for this socket in memory map
UINT64 Mmio64Limit; // Limit of high MMIO configured for this socket in memory map
STACK_RES StackRes[MAX_LOGIC_IIO_STACK];
IIO_DMI_PCIE_INFO PcieInfo; // NOTE: Obsolete, not used in next gen platforms
} IIO_RESOURCE_INSTANCE;
typedef struct {
UINT16 PlatGlobalIoBase; // Global IO Base
UINT16 PlatGlobalIoLimit; // Global IO Limit
UINT32 PlatGlobalMmio32Base; // Global Mmiol base
UINT32 PlatGlobalMmio32Limit; // Global Mmiol limit
UINT64 PlatGlobalMmio64Base; // Global Mmioh Base [43:0]
UINT64 PlatGlobalMmio64Limit; // Global Mmioh Limit [43:0]
QPI_CPU_DATA CpuQpiInfo[MAX_SOCKET]; // QPI related info per CPU
QPI_IIO_DATA IioQpiInfo[MAX_SOCKET]; // QPI related info per IIO
UINT32 MemTsegSize;
UINT64 PciExpressBase;
UINT32 PciExpressSize;
UINT32 MemTolm;
IIO_RESOURCE_INSTANCE IIO_resource[MAX_SOCKET];
UINT8 numofIIO;
UINT8 MaxBusNumber;
UINT32 packageBspApicID[MAX_SOCKET]; // This data array is valid only for SBSP, not for non-SBSP CPUs. <AS> for CpuSv
UINT8 EVMode;
UINT8 SkuPersonality[MAX_SOCKET];
UINT16 IoGranularity;
UINT32 MmiolGranularity;
UINT64_STRUCT MmiohGranularity;
UINT8 RemoteRequestThreshold; //5370389
UINT32 UboxMmioSize;
UINT32 MaxAddressBits;
} PLATFORM_DATA;
typedef struct {
UINT8 CurrentUpiiLinkSpeed;// Current programmed UPI Link speed (Slow/Full speed mode)
UINT8 CurrentUpiLinkFrequency; // Current requested UPI Link frequency (in GT)
UINT8 OutKtiCpuSktHotPlugEn; // 0 - Disabled, 1 - Enabled for PM X2APIC
UINT32 OutKtiPerLinkL1En[MAX_SOCKET]; // output kti link enabled status for PM
UINT8 IsocEnable;
UINT32 meRequestedSize; // Size of the memory range requested by ME FW, in MB
UINT8 DmiVc1;
UINT8 DmiVcm;
UINT32 CpuPCPSInfo;
UINT8 cpuSubType;
UINT8 SystemRasType;
UINT8 numCpus; // 1,..4. Total number of CPU packages installed and detected (1..4)by QPI RC
UINT16 tolmLimit;
RC_VERSION RcVersion;
BOOLEAN MsrTraceEnable;
UINT8 DdrXoverMode; // DDR 2.2 Mode
// For RAS
UINT8 bootMode;
UINT8 OutClusterOnDieEn; // Whether RC enabled COD support
UINT8 OutSncEn;
UINT8 OutNumOfCluster;
UINT8 imcEnabled[MAX_SOCKET][MAX_IMC];
UINT16 LlcSizeReg;
UINT8 chEnabled[MAX_SOCKET][MAX_CH];
UINT8 memNode[MC_MAX_NODE];
UINT8 IoDcMode;
UINT8 DfxRstCplBitsEn;
UINT8 BitsUsed; //For 5 Level Paging
} SYSTEM_STATUS;
typedef struct {
PLATFORM_DATA PlatformData;
SYSTEM_STATUS SystemStatus;
UINT32 OemValue;
} IIO_UDS;
#pragma pack()
#endif //#ifndef _IIO_UNIVERSAL_DATA_HOB_H_

View File

@ -0,0 +1,371 @@
/** @file
GUID used for Memory Map Data entries in the HOB list.
@copyright
INTEL CONFIDENTIAL
Copyright 1999 - 2022 Intel Corporation. <BR>
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.
**/
#ifndef _MEMORY_MAP_DATA_HOB_H_
#define _MEMORY_MAP_DATA_HOB_H_
#define MEMORY_MAP_HOB_GUID \
{ \
0xf8870015,0x6994,0x4b98,0x95,0xa2,0xbd,0x56,0xda,0x91,0xc0,0x7f \
}
#ifndef MAX_SOCKET
#define MAX_SOCKET 4
#endif
#ifndef MAX_IMC
#define MAX_IMC 4 // Maximum memory controllers per socket
#endif
#ifndef MAX_MC_CH
#define MAX_MC_CH 2 // Max number of channels per MC (3 for EP)
#endif
#ifndef MAX_CH
#define MAX_CH ((MAX_IMC)*(MAX_MC_CH)) // Max channels per socket (worst case EP * EX combination = 16)
#endif
#define MAX_CXL_AMT 0
#ifndef MAX_UNIQUE_NGN_DIMM_INTERLEAVE
#define MAX_UNIQUE_NGN_DIMM_INTERLEAVE 2 // Max number of unique interleaves for NGN DIMM
#endif
#ifndef MAX_SPARE_RANK
#define MAX_SPARE_RANK 2 // Max number of spare ranks in a channel
#endif
#ifndef MAX_HBM_IO
#define MAX_HBM_IO 4
#endif
#ifndef MAX_DIMM
#define MAX_DIMM 2 // Max DIMM per channel
#endif
#ifndef MAX_RANK_DIMM
#define MAX_RANK_DIMM 2
#endif
#ifndef MAX_DRAM_CLUSTERS
#define MAX_DRAM_CLUSTERS 4
#endif
#ifndef MAX_SAD_RULES
#define MAX_SAD_RULES 16
#endif
#ifndef MAX_FPGA_REMOTE_SAD_RULES
#define MAX_FPGA_REMOTE_SAD_RULES 2 // Maximum FPGA sockets exists on ICX platform
#endif
#define MAX_SI_SOCKET 8 // Maximum silicon supported socket number
#define MAX_AMT (MAX_IMC+MAX_CXL_AMT) // Max abstract memory target per socket
#define AMT_MAX_NODE ((MAX_AMT)*(MAX_SOCKET)) // Max abstract memory target for all sockets
// NGN
#define NGN_MAX_SERIALNUMBER_STRLEN 4
#define NGN_MAX_PARTNUMBER_STRLEN 30
#define NGN_FW_VER_LEN 4
#define NGN_LOG_TYPE_NUM 2
#define NGN_LOG_LEVEL_NUM 2
/**
* Memory channel index conversion macros.
*
* We got two types of memory channel indexes:
* - socket channel - indexes 0..MAX_CH, used in [socket][channel] indexing
* - IMC channel - indexes 0..MAX_MC_CH, used in [socket][IMC][channel] indexing
* The below defined macros convert one channel index to the other one.
*/
#define MEM_SKTCH_TO_IMC(SktCh) ((SktCh) / MAX_MC_CH)
#define MEM_SKTCH_TO_IMCCH(SktCh) ((SktCh) % MAX_MC_CH)
#define MEM_IMCCH_TO_SKTCH(Imc, Ch) ((Imc) * MAX_MC_CH + (Ch))
#define MEM_64MB_TO_BYTES(Size64M) ((UINT64)(Size64M) << 26)
#define MEM_64MB_TO_KBYTES(Size64M) ((UINT64)(Size64M) << 16)
#define MEM_64MB_TO_MBYTES(Size64M) ((UINT64)(Size64M) << 6)
#define MEM_64MB_TO_GBYTES(Size64M) ((Size64M) >> 4)
#define MEM_BYTES_TO_64MB(SizeB) ((SizeB) >> 26)
#define MEM_KBYTES_TO_64MB(SizeKB) ((SizeKB) >> 16)
#define MEM_MBYTES_TO_64MB(SizeMB) ((SizeMB) >> 6)
typedef UINT8 CXL_INTLV_SET_KEY;
#define FSP_RESERVED1_LEN 77
#define FSP_RESERVED2_LEN 2174
#define FSP_RESERVED3_LEN 21
#define FSP_RESERVED4_LEN 130
#define FSP_RESERVED5_LEN 10
#define FSP_RESERVED6_LEN 800
#pragma pack(1)
typedef enum {
DIMM_RANK_MAP_OUT_UNKNOWN = 0,
DIMM_RANK_MAP_OUT_MEM_DECODE,
DIMM_RANK_MAP_OUT_POP_POR_VIOLATION,
DIMM_RANK_MAP_OUT_RANK_DISABLED,
DIMM_RANK_MAP_OUT_ADVMEMTEST_FAILURE,
DIMM_RANK_MAP_OUT_MAX
} DIMM_RANK_MAP_OUT_REASON;
struct RankDevice {
UINT8 enabled; // 0 = disabled, 1 = enabled
UINT8 logicalRank; // Logical Rank number (0 - 7)
UINT16 rankSize; // Units of 64 MB
};
struct PersisentDpaMap
{
UINT32 perRegionDPAOffset;
UINT32 SPALimit;
};
typedef struct firmwareRev {
UINT8 majorVersion;
UINT8 minorVersion;
UINT8 hotfixVersion;
UINT16 buildVersion;
} FIRMWARE_REV;
typedef struct DimmDevice {
UINT8 Present;
BOOLEAN Enabled;
UINT8 DcpmmPresent; // 1 - This is a DCPMM
UINT8 X4Present;
UINT8 DramIoWidth; // Actual DRAM IO Width (4, 8, 16)
UINT8 NumRanks;
UINT8 keyByte;
UINT8 actKeyByte2; // Actual module type reported by SPD
UINT8 actSPDModuleOrg; // Actual number of DRAM ranks and device width
UINT8 dimmTs; // Thermal sensor data.
UINT16 VolCap; // Volatile capacity (AEP DIMM only)
UINT16 nonVolCap; // Non-volatile capacity (AEP DIMM only)
UINT16 DimmSize;
UINT32 NVmemSize;
UINT16 SPDMMfgId; // Module Mfg Id from SPD
UINT16 VendorID;
UINT16 DeviceID;
UINT16 RevisionID;
UINT32 perRegionDPA; // DPA of PMEM that Nfit needs
struct PersisentDpaMap perDPAMap[MAX_UNIQUE_NGN_DIMM_INTERLEAVE]; // DPA map
UINT8 serialNumber[NGN_MAX_SERIALNUMBER_STRLEN]; // Serial Number
UINT8 PartNumber[NGN_MAX_PARTNUMBER_STRLEN]; // Part Number
UINT8 FirmwareVersionStr[NGN_FW_VER_LEN]; // Used to update the SMBIOS TYPE 17
struct firmwareRev FirmwareVersion; // Firmware revision
struct RankDevice rankList[MAX_RANK_DIMM];
UINT16 InterfaceFormatCode;
UINT16 SubsystemVendorID;
UINT16 SubsystemDeviceID;
UINT16 SubsystemRevisionID;
UINT16 FisVersion; // Firmware Interface Specification version
UINT8 DimmSku; // Dimm SKU info
UINT8 manufacturingLocation; // Manufacturing location for the NVDIMM
UINT16 manufacturingDate; // Date the NVDIMM was manufactured
INT32 commonTck;
UINT8 EnergyType; // 0: 12V aux power; 1: dedicated backup energy source; 2: no backup energy source
BOOLEAN NvDimmNPresent; // JEDEC NVDIMM-N Type Memory Present
UINT8 CidBitMap; // SubRankPer CS for DIMM device
UINT16 SPDRegVen; // Register Vendor ID in SPD
DIMM_RANK_MAP_OUT_REASON MapOutReason;
} MEMMAP_DIMM_DEVICE_INFO_STRUCT;
struct ChannelDevice {
UINT8 Enabled; // 0 = channel disabled, 1 = channel enabled
UINT8 Features; // Bit mask of features to enable or disable
UINT8 MaxDimm; // Number of DIMM
UINT8 NumRanks; // Number of ranks on this channel
UINT8 chFailed;
UINT8 ngnChFailed;
UINT8 Is9x4DimmPresent; // 9x4 dimm present indicator
UINT8 SpareLogicalRank[MAX_SPARE_RANK]; // Logical rank, selected as Spare
UINT8 SparePhysicalRank[MAX_SPARE_RANK]; // Physical rank, selected as spare
UINT16 SpareRankSize[MAX_SPARE_RANK]; // spare rank size
UINT8 EnabledLogicalRanks; // Bitmap of Logical ranks that are enabled
UINT8 DdrPopulationMap; // Bitmap to indicate location of DDR DIMMs within the channel memory slots (BIT0: Ch.D0, BIT1: CH.D1)
UINT8 PmemPopulationMap; // Bitmap to indicate location of PMem modules within the channel memory slots (BIT0: Ch.D0, BIT1: CH.D1)
MEMMAP_DIMM_DEVICE_INFO_STRUCT DimmInfo[MAX_DIMM];
};
struct memcontroller {
UINT32 MemSize;
};
typedef enum {
MemTypeNone = 0,
MemType1lmDdr,
MemType1lmAppDirect,
MemType1lmAppDirectReserved,
MemType1lmCtrl,
MemType1lmHbm,
MemTypeNxm,
MemType2lmDdrCacheMemoryMode,
MemType2lmDdrWbCacheAppDirect,
MemType2lmHbmCacheDdr,
MemType2lmHbmCacheMemoryMode,
MemTypeCxlAccVolatileMem,
MemTypeCxlAccPersistentMem,
MemTypeFpga,
MemTypeCxlExpVolatileMem,
MemTypeCxlExpPersistentMem,
MemTypeCxl2lmDdrCacheMem,
MemTypeCxlHetero,
MemTypeMax
} MEM_TYPE;
typedef struct SADTable {
UINT8 Enable; // Rule enable
MEM_TYPE type; // Bit map of memory region types, See defines 'MEM_TYPE_???' above for bit definitions of the ranges.
UINT8 granularity; // Interleave granularities for current SAD entry. Possible interleave granularity options depend on the SAD entry type. Note that SAD entry type BLK Window and CSR/Mailbox/Ctrl region do not support any granularity options
UINT32 Base; // Base of the current SAD entry
UINT32 Limit; // Limit of the current SAD entry
UINT8 ways; // Interleave ways for SAD
UINT8 channelInterBitmap[MAX_AMT]; //Bit map to denote which DDR4/NM channels are interleaved per IMC eg: 111b - Ch 2,1 & 0 are interleaved; 011b denotes Ch1 & 0 are interleaved
UINT8 FMchannelInterBitmap[MAX_AMT]; //Bit map to denote which FM channels are interleaved per IMC eg: 111b - Ch 2,1 & 0 are interleaved; 011b denotes Ch1 & 0 are interleaved
UINT8 NmChWays; // Channel Interleave ways for SAD. Represents channelInterBitmap ways for DDR4/NM.
UINT8 FmChWays; // Channel Interleave ways for SAD. Represents FMchannelInterBitmap ways for DDRT.
UINT16 imcInterBitmap; // Bit map to denote which IMCs are interleaved from this socket.
UINT16 NmImcInterBitmap; // Bit map to denote which IMCs are interleaved from this socket as NM.
BOOLEAN local; // 0 - Remote 1- Local
UINT8 IotEnabled; // To indicate if IOT is enabled
UINT8 mirrored; // To Indicate the SAD is mirrored while enabling partial mirroring
UINT8 Attr;
UINT8 tgtGranularity; // Interleave mode for target list
UINT8 Cluster; // SNC cluster, hemisphere, or quadrant index.
UINT8 HostBridgeGran; // Host bridge interleaving granularity.
UINT32 HotPlugPadSize; // Memory size padded for CXL hot plug. 0 if it is not a CXL hot plug SAD.
CXL_INTLV_SET_KEY CxlIntlvSetKey; // The unique key of CXL interleave set. (7nm)
} SAD_TABLE;
typedef struct socket {
UINT8 SocketEnabled;
UINT32 IioStackBitmap;
BOOLEAN HbmIoEn[MAX_HBM_IO]; // Flag indicates if HBM IO is enabled. TRUE: HBM IO is Enabled, FALSE: HBM IO is disabled.
UINT8 imcEnabled[MAX_IMC];
UINT8 SadIntList[MAX_DRAM_CLUSTERS * MAX_SAD_RULES][AMT_MAX_NODE]; // SAD interleave list
UINT32 SktTotMemMapSPA; // Total memory mapped to SPA
UINT32 SktMemSize2LM; // Total memory excluded from Limit
SAD_TABLE SAD[MAX_DRAM_CLUSTERS * MAX_SAD_RULES]; // SAD table
struct memcontroller imc[MAX_IMC];
struct ChannelDevice ChannelInfo[MAX_CH];
} MEMMAP_SOCKET;
typedef struct {
UINT8 Enabled; // Indicates if this EDC is enabled
UINT32 MemAsCache; // Memory used as Cache, in 64MB units
UINT32 MemAsFlat; // Memory used as Flat memory, in 64MB units
} EDC_INFO;
typedef struct SystemMemoryMapElement {
UINT16 Type; // Type of this memory element; Bit0: 1LM Bit1: 2LM Bit2: PMEM Bit3: PMEM-cache Bit4: BLK Window Bit5: CSR/Mailbox/Ctrl region
UINT8 NodeId; // Node ID of the HA Owning the memory
UINT8 SocketId; // Socket Id of socket that has his memory - ONLY IN NUMA
UINT8 SktInterBitmap; // Socket interleave bitmap, if more that on socket then ImcInterBitmap and ChInterBitmap are identical in all sockets
UINT16 ImcInterBitmap; // IMC interleave bitmap for this memory
UINT8 ChInterBitmap[MAX_IMC];//Bit map to denote which channels are interleaved per IMC eg: 111b - Ch 2,1 & 0 are interleaved; 011b denotes Ch1 & 0 are interleaved
UINT32 BaseAddress; // Base Address of the element in 64MB chunks
UINT32 ElementSize; // Size of this memory element in 64MB chunks
} SYSTEM_MEMORY_MAP_ELEMENT;
typedef struct SystemMemoryMapHob {
//
// Total Clusters. In SNC2 mode there are 2 clusters and SNC4 mode has 4 clusters.
// All2All/Quad/Hemi modes can be considered as having only one cluster (i.e SNC1).
//
UINT8 TotalClusters;
UINT8 reserved1[FSP_RESERVED1_LEN]; // MEMORY_MAP_BLOCK_DECODER_DATA BlockDecoderData; // block decoder data structure
UINT32 lowMemBase; // Mem base in 64MB units for below 4GB mem.
UINT32 lowMemSize; // Mem size in 64MB units for below 4GB mem.
UINT32 highMemBase; // Mem base in 64MB units for above 4GB mem.
UINT32 highMemSize; // Mem size in 64MB units for above 4GB mem.
UINT32 memSize; // Total physical memory size
UINT16 memFreq; // Mem Frequency
UINT16 HbmFreq; // HBM Frequency in MHz.
UINT8 memMode; // 0 - Independent, 1 - Lockstep
UINT8 volMemMode; // 0 - 1LM, 1 - 2LM
UINT8 CacheMemType; // 0 - DDR$DDRT, 1 - HBM$DDR. Only valid if volMemMode is 2LM
UINT16 DramType;
UINT8 DdrVoltage;
BOOLEAN SupportedPMemPresent; // TRUE if at least one PMem is present and supported by BIOS
BOOLEAN EkvPresent; // Set if EKV controller on system
BOOLEAN BwvPresent; // Set if BWV controller on system
BOOLEAN CwvPresent; // Set if CWV controller on system
UINT8 XMPProfilesSup;
UINT8 XMPCapability;
//
// HBM Specific Info.
//
UINT16 HbmInstances[MAX_SOCKET]; // Total HBM instances
UINT32 HbmFlatMemSize; // Total HBM memory size in 64MB units, if HBM used as Flat memory
UINT32 HbmCacheMemSize; // Total HBM memory used as cache, if HBM used as Cache memory
UINT16 HbmSpeed; // Configured HBM (i.e OPIO channel) speed in MT/s.
UINT16 MaxHbmSpeed; // Max HBM (i.e OPIO channel) speed in MT/s.
UINT8 SystemRasType;
UINT8 RasModesEnabled; // RAS modes that are enabled
UINT16 ExRasModesEnabled; // Extended RAS modes that are enabled
UINT8 sncEnabled; // 0 - SNC disabled for this configuration, 1 - SNC enabled for this configuration
UINT8 NumOfCluster;
UINT8 NumChPerMC;
UINT8 numberEntries; // Number of Memory Map Elements
SYSTEM_MEMORY_MAP_ELEMENT Element[(MAX_SOCKET * MAX_DRAM_CLUSTERS * MAX_SAD_RULES) + MAX_FPGA_REMOTE_SAD_RULES];
UINT8 reserved2[FSP_RESERVED2_LEN]; // struct memSetup MemSetup;
UINT8 reserved3[FSP_RESERVED3_LEN]; // MEM_DFXMEMVARS DfxMemVar;
MEMMAP_SOCKET Socket[MAX_SOCKET];
UINT8 reserved4[FSP_RESERVED4_LEN]; // struct memTiming profileMemTime[XMP_MAX_PROFILES];
UINT8 reserved5[FSP_RESERVED5_LEN]; // RASMEMORYINFO RasMeminfo;
UINT8 LatchSystemShutdownState;
BOOLEAN IsWpqFlushSupported;
UINT8 EadrSupport;
UINT8 EadrCacheFlushMode;
UINT8 SetSecureEraseSktChHob[MAX_SOCKET][MAX_CH]; //MAX_CH * MAX_SOCKET * MAX_DCPMM_CH
UINT8 reserved6[FSP_RESERVED6_LEN]; // HOST_DDRT_DIMM_DEVICE_INFO_STRUCT HostDdrtDimmInfo[MAX_SOCKET][MAX_CH];
UINT32 DdrCacheSize[MAX_SOCKET][MAX_CH]; // Size of DDR memory reserved for 2LM cache (64MB granularity)
BOOLEAN AdrStateForPmemModule[MAX_SOCKET][MAX_CH]; // ADR state for Intel PMEM Modules
UINT16 BiosFisVersion; // Firmware Interface Specification version currently supported by BIOS
UINT16 MaxAveragePowerLimit; // Max Power limit in mW used for averaged power ( Valid range ends at 15000mW)
UINT16 MinAveragePowerLimit; // Min Power limit in mW used for averaged power ( Valid range starts from 10000mW)
UINT16 CurrAveragePowerLimit; // Current Power limit in mW used for average power
UINT16 MaxMbbPowerLimit; // Max MBB power limit ( Valid range ends at 18000mW).
UINT16 MinMbbPowerLimit; // Min MBB power limit ( Valid range starts from 15000mW).
UINT16 CurrMbbPowerLimit; // Current Power limit in mW used for MBB power
UINT32 MaxMbbAveragePowerTimeConstant; // Max MBB Average Power Time Constant
UINT32 MinMbbAveragePowerTimeConstant; // Min MBB Average Power Time Constant
UINT32 CurrMbbAveragePowerTimeConstant; // Current MBB Average Power Time Constant
UINT32 MmiohBase; // MMIOH base in 64MB granularity
UINT8 MaxSadRules; // Maximum SAD entries supported by silicon (24 for 14nm silicon, 16 for 10nm silicon)
UINT8 NumberofChaDramClusters; // Number of CHA DRAM decoder clusters
BOOLEAN VirtualNumaEnable; // Enable or Disable Virtual NUMA
UINT8 VirtualNumOfCluster; // Number of Virtual NUMA nodes in each physical NUMA node (Socket or SNC cluster)
} SYSTEM_MEMORY_MAP_HOB;
#pragma pack()
#endif // _MEMORY_MAP_DATA_H_

View File

@ -0,0 +1,82 @@
/** @file
@copyright
INTEL CONFIDENTIAL
Copyright 2007 -2021 Intel Corporation. <BR>
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.
**/
#ifndef _PREV_BOOT_ERR_SRC_HOB_H_
#define _PREV_BOOT_ERR_SRC_HOB_H_
#define FSP_PREV_BOOT_ERR_SRC_HOB_GUID \
{ 0xc5, 0xb5, 0x38, 0x51, 0x69, 0x93, 0xec, 0x48, 0x5b, 0x97, 0x38, 0xa2, 0xf7, 0x09, 0x66, 0x75 }
#define PREV_BOOT_ERR_SRC_HOB_SIZE 1000
#pragma pack(1)
typedef struct {
UINT16 Length; // Actual size of the error sources used in the HOB
UINT8 HobData[PREV_BOOT_ERR_SRC_HOB_SIZE -2]; // List of Error source structures of format //MCBANK_ERR_INFO or CSR_ERR_INFO
}PREV_BOOT_ERR_SRC_HOB;
typedef struct{
UINT8 Type; // McBankType = 1;
UINT8 Segment;
UINT8 Socket;
UINT16 ApicId; // ApicId is Needed only if it a core McBank.
UINT16 McBankNum;
UINT64 McBankStatus;
UINT64 McbankAddr;
UINT64 McBankMisc;
} MCBANK_ERR_INFO;
typedef struct {
UINT8 Type; // PciExType =2 ;
UINT8 Segment;
UINT8 Bus;
UINT8 Device;
UINT8 Function;
UINT32 AerUncErrSts;
UINT8 AerHdrLogData[16];
} PCI_EX_ERR_INFO;
typedef struct {
UINT8 Type; // Other Csr error type =3 ;
UINT8 Segment;
UINT8 Bus;
UINT8 Device;
UINT8 Function;
UINT16 offset;
UINT32 Value;
} CSR_ERR_INFO;
typedef enum {
McBankType = 1,
PciExType,
CsrOtherType
} ERROR_ACCESS_TYPE;
#pragma pack()
#endif //_PREV_BOOT_ERR_SRC_HOB_H_

View File

@ -0,0 +1,281 @@
/** @file
System Information HOB Hearder File
@copyright
INTEL CONFIDENTIAL
Copyright 2017 - 2021 Intel Corporation. <BR>
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.
**/
#ifndef _SYSTEM_INFO_HOB_H_
#define _SYSTEM_INFO_HOB_H_
#define SYSTEM_INFO_HOB_GUID { 0x7650A0F2, 0x0D91, 0x4B0C, { 0x92, 0x3B, 0xBD, 0xCF, 0x22, 0xD1, 0x64, 0x35 }}
#ifndef MAX_SOCKET
#define MAX_SOCKET 4
#endif
#ifndef MAX_IIO_STACK
#define MAX_IIO_STACK 12
#endif
#define MAX_LOGIC_IIO_STACK 14
#ifndef MAX_IMC
#define MAX_IMC 4 // Maximum memory controllers per socket
#endif
#ifndef MAX_MC_CH
#define MAX_MC_CH 2 // Max number of channels per MC (3 for EP)
#endif
#ifndef MAX_CH
#define MAX_CH ((MAX_IMC)*(MAX_MC_CH)) // Max channels per socket (worst case EP * EX combination = 16)
#endif
#define MAX_HPM_PFS_ENTRY_NUM 15 // Number of entries in PFS structure
#define HPM_PFS_ENTRY_SIZE 2 // Entry size of PFS structure in DWORD
#pragma pack(1)
#ifndef MMIO_BARS_ENUM
#define MMIO_BARS_ENUM
typedef enum {
TYPE_SCF_BAR = 0,
TYPE_PCU_BAR,
TYPE_MEM_BAR0,
TYPE_MEM_BAR1,
TYPE_MEM_BAR2,
TYPE_MEM_BAR3,
TYPE_MEM_BAR4,
TYPE_MEM_BAR5,
TYPE_MEM_BAR6,
TYPE_MEM_BAR7,
TYPE_SBREG_BAR,
TYPE_MAX_MMIO_BAR
} MMIO_BARS;
#endif
typedef enum {
ReservedMemSs,
Ddr4MemSs = 1,
Ddr5MemSs = 2,
LpDdr4MemSs = 3,
LpDdr5MemSs = 4,
Hbm2MemSs = 5,
MrcMstMax,
MrcMstDelim = MAX_INT32
} MRC_MST;
typedef enum BootMode {
NormalBoot = 0, // Normal path through RC with full init, mem detection, init, training, etc.
// Some of these MRC specific init routines can be skipped based on MRC input params
// in addition to the sub-boot type (WarmBoot, WarmBootFast, etc).
S3Resume = 1 // S3 flow through RC. Should do the bare minimum required for S3
// init and be optimized for speed.
} BootMode;
//
// This is used to determine what type of die is connected to a UPI link
//
typedef enum {
UpiConnectionTypeCpu,
UpiConnectionTypePcieGen4,
UpiConnectionTypeFpga,
UpiConnectionTypeMax
} UPI_CONNECTION_TYPE;
//
// VSEC info for HPM
// The HPM_INFO struct contains info collected from the VSEC structure for the HPM.
// VSEC Structure is defined as below:
//
// ------------------------VSEC Structure------------------------
// | Next Cap Offset(12b) | Cap Version(4b) | PCIe Cap ID(16b) |
// --------------------------------------------------------------
// | VSEC_LEN(12b) | VSEC_REV(4b) | VSEC_ID(16b) |
// --------------------------------------------------------------
// | EntrySize(8b) | NumEntries(8b) | Rsvd(16b) |
// --------------------------------------------------------------
// | Address(29b) | tBIR(3b) |
// --------------------------------------------------------------
//
//
typedef struct {
UINT8 NumEntries; // The number of PM feature interface instances in this VSEC space
UINT8 EntrySize; // The entry size for each PM interface instance in 32-bit DWORDs
UINT32 Address; // The offset from the BAR register which is used for HPM to point to the base of the discovery entry. i.e. the PFS (PM Feature Structure)
UINT8 tBIR; // Which one of he function's BAR is used for the PFS offset
} HPM_INFO;
//
//-------------------------------- - PFS Entry--------------------------------
//| EntrySize(16b) | NumEntries(8b) | VSEC_SubID(8b) |
//----------------------------------------------------------------------------
//| RSVD(14b) | Attr(2b) | CapOffset(16b) |
//----------------------------------------------------------------------------
//
typedef struct {
UINT32 TpmiId : 8;
UINT32 NumEntries : 8;
UINT32 EntrySize : 16;
UINT32 CapOffset : 16;
UINT32 Attribute : 2;
UINT32 EntryBitMap : 8;
UINT32 Rsvd : 6;
} PFS_ENTRY;
//
// HPM (Hierarchical Power Management) VSEC resource allocation info
//
typedef struct {
BOOLEAN HpmEnabled; // HPM enabled or not in BIOS knob
BOOLEAN HpmInfraReady; // All the HPM infrastructure data is buffered
UINT32 OobMsmHpmBarBase; // The base of OOBMSM BAR1 for HPM PFS and LUT tables
UINT32 OobMsmHpmBarLimit; // The limit of OOBMSM BAR1 from where the required size will be allocated
UINT32 OobMsmHpmBarMmcfgAddress; // The OOBMSM BAR1 MMCFG address
UINT32 OobMsmHpmBarRequiredSize; // The required size of OOBMSM BAR1
HPM_INFO HpmVsecInfo; // For now, single VSEC is assumed
PFS_ENTRY Pfs[MAX_HPM_PFS_ENTRY_NUM]; // The buffered PFS structure
} HPM_VSEC_RESOURCE;
//
// Stack id swap information, which includes stack swap flag and the new stack id swap array.
//
typedef struct {
BOOLEAN StackSwapFlag;
UINT8 StackIdSwapArray[MAX_IIO_STACK];
} STACKID_SWAP_INFO;
typedef struct {
UINT64 Cxl1p1RcrbBase;
BOOLEAN Cxl1p1RcrbValid;
} CXL_1P1_RCRB;
typedef struct {
UINT32 StackPresentBitmap[MAX_SOCKET]; ///< bitmap of present stacks per socket
UINT8 StackBus[MAX_SOCKET][MAX_LOGIC_IIO_STACK];///< Bus of each stack
UINT32 StackMmiol[MAX_SOCKET][MAX_IIO_STACK]; ///< mmiol of each IIO stack, if it works as CXL, the mmiol base is RCRBBAR
UINT8 SocketFirstBus[MAX_SOCKET];
UINT8 Socket10nmUboxBus0[MAX_SOCKET]; //10nm CPU use only
UINT8 TotIoDie[MAX_SOCKET]; //GNR & SRF CPU use only
UINT8 TotCmpDie[MAX_SOCKET]; //GNR & SRF CPU use only
UINT8 SocketLastBus[MAX_SOCKET];
UINT8 segmentSocket[MAX_SOCKET];
UINT8 KtiPortCnt;
UINT32 socketPresentBitMap;
UINT32 SecondaryNodeBitMap;
UINT32 FpgaPresentBitMap;
UINT32 mmCfgBase;
UINT64 SocketMmCfgBase[MAX_SOCKET];
UINT8 DdrMaxCh;
UINT8 DdrMaxImc; ///< Logical number of IMC count, ignoring logical holes
UINT8 DdrPhysicalMaxImc; ///< Physical number of IMC count from Capid
UINT8 DdrNumChPerMc;
UINT8 DdrNumPseudoChPerCh;
UINT8 imcEnabled[MAX_SOCKET][MAX_IMC];
UINT8 mcId[MAX_SOCKET][MAX_CH];
MRC_MST MemSsType[MAX_SOCKET]; ///< MemSsType global identifier for DDR vs. HBM
UINT32 MmioBar[MAX_SOCKET][TYPE_MAX_MMIO_BAR];
UINT8 HbmMaxCh;
UINT8 HbmMaxIoInst;
UINT8 HbmNumChPerMc;
UINT8 HbmNumChPerIo;
UINT32 LastCsrAddress[2];
UINT32 LastCsrMmioAddr;
UINT8 CsrCachingEnable;
UINT32 LastCsrMcAddress[2];
UINT32 LastCsrMcMmioPhyAddr;
UINT8 CsrPciBarCachingEnable;
UINT32 LastCsrPciBarAddr[2];
UINT64 LastCsrPciBarPhyAddr;
UINT32 LastSBPortId[MAX_SOCKET];
UPI_CONNECTION_TYPE UpiConnectionType[MAX_SOCKET];
BOOLEAN PostedCsrAccessAllowed; // SW is allowed to use posted CSR writes method when TRUE
BOOLEAN PostedWritesEnabled; // All CSR writes use posted method when TRUE, non-posted when FALSE
BOOLEAN DataPopulated; // CPU_CSR_ACCESS_VAR is unavailable when FALSE
HPM_VSEC_RESOURCE SocketHpmVsecRes[MAX_SOCKET]; // HPM VSEC info for all sockets
BOOLEAN HbmSku;
UINT8 HcxType[MAX_SOCKET];
STACKID_SWAP_INFO StackIdSwapInfo[MAX_SOCKET]; //StackID sync after do StackId swap,including Stack swap table and whether do stack swap
CXL_1P1_RCRB Cxl1p1Rcrb[MAX_SOCKET][MAX_IIO_STACK]; // CXL 1.1 RCRB, one per PI5 stack
UINT32 DmiRcrb[MAX_SOCKET]; // DMI RCRB region, one per socket
UINT8 FabricType; //Compute die 10x6, 10x5, and 6x5 type is stored
UINT8 ChopType; //Compute Die Chop Type
UINT8 MdfInstCount;
} CPU_CSR_ACCESS_VAR;
typedef struct {
UINT32 MeRequestedSizeNv;
UINT32 MeRequestedAlignmentNv;
UINT8 SbspSocketIdNv;
} SYS_INFO_VAR_NVRAM;
typedef struct _CPUID_REGISTER_INFO {
UINT32 Eax;
UINT32 Ebx;
UINT32 Ecx;
UINT32 Edx;
} CPUID_REGISTER_INFO;
typedef struct _PROCESSOR_COMMON_INFO {
UINT32 capid0;
UINT32 capid1;
UINT32 capid2;
UINT32 capid3;
UINT32 capid4;
UINT32 capid5;
UINT32 capid6lo;
UINT32 capid6hi;
CPUID_REGISTER_INFO ExtCpuid7;
CPUID_REGISTER_INFO ExtCpuid1B;
} PROCESSOR_COMMON_INFO;
typedef struct {
UINT32 MeRequestedSize;
UINT32 MeRequestedAlignment;
UINT32 CheckPoint;
UINT8 ResetRequired;
UINT8 Emulation;
BootMode SysBootMode;
CPU_CSR_ACCESS_VAR CpuCsrAccessVarHost; // Common resource for CsrAccessRoutines
UINT64 CpuFreq;
UINT8 SocketId;
SYS_INFO_VAR_NVRAM SysInfoVarNvram;
BOOLEAN UsraTraceControl;
UINT16 UsraTraceConfiguration; // Bit 7 6 5 4 3:0
// Write, Modify, GetAddr, Long/Short, Trace 0x5 as signature
// Bit 15 14:11 10 9 8
// DumpCpuCsrAccessVar, TBD, CSR, PCIE, Read
BOOLEAN CpuCsrAccessVarInfoDumped;
PROCESSOR_COMMON_INFO ProcessorCommonInfo[MAX_SOCKET];
EFI_PHYSICAL_ADDRESS SocAddrMapData;
UINTN UsraPpiPtr;
} SYSTEM_INFO_VAR;
#pragma pack ()
#endif //#ifndef _SYSTEM_INFO_HOB_H_

View File

@ -0,0 +1,41 @@
/** @file
Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* Neither the name of Intel Corporation nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
This file is automatically generated. Please do NOT modify !!!
**/
#ifndef __DEFS_CXL_H__
#define __DEFS_CXL_H__
#define CXL_SECURITY_FULLY_TRUSTED 0
#define CXL_SECURITY_PARTIALLY_TRUSTED 1
#define CXL_SECURITY_UNTRUSTED 2
#define CXL_SECURITY_AUTO 3
#endif

View File

@ -0,0 +1,141 @@
/** @file
Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* Neither the name of Intel Corporation nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
This file is automatically generated. Please do NOT modify !!!
**/
#ifndef __DEFS_IIO_H__
#define __DEFS_IIO_H__
#include <fsp/api.h>
#define IIO_MODE_GEN4_ONLY 0
#define IIO_MODE_GEN5 1
#define IIO_MODE_CXL 2
#define IIO_MODE_FORCE_CXL 3
#define IIO_MODE_INVALID 0xFF
#define IIO_BIFURCATE_xxxxxxxx 0xFE
#define IIO_BIFURCATE_x4x4x4x4 0x0
#define IIO_BIFURCATE_x4x4xxx8 0x1
#define IIO_BIFURCATE_xxx8x4x4 0x2
#define IIO_BIFURCATE_xxx8xxx8 0x3
#define IIO_BIFURCATE_xxxxxx16 0x4
#define IIO_BIFURCATE_x2x2x4x8 0x5
#define IIO_BIFURCATE_x4x2x2x8 0x6
#define IIO_BIFURCATE_x8x2x2x4 0x7
#define IIO_BIFURCATE_x8x4x2x2 0x8
#define IIO_BIFURCATE_x2x2x4x4x4 0x9
#define IIO_BIFURCATE_x4x2x2x4x4 0xA
#define IIO_BIFURCATE_x4x4x2x2x4 0xB
#define IIO_BIFURCATE_x4x4x4x2x2 0xC
#define IIO_BIFURCATE_x2x2x2x2x8 0xD
#define IIO_BIFURCATE_x8x2x2x2x2 0xE
#define IIO_BIFURCATE_x2x2x2x2x4x4 0xF
#define IIO_BIFURCATE_x2x2x4x2x2x4 0x10
#define IIO_BIFURCATE_x2x2x4x4x2x2 0x11
#define IIO_BIFURCATE_x4x2x2x2x2x4 0x12
#define IIO_BIFURCATE_x4x2x2x4x2x2 0x13
#define IIO_BIFURCATE_x4x4x2x2x2x2 0x14
#define IIO_BIFURCATE_x2x2x2x2x2x2x4 0x15
#define IIO_BIFURCATE_x2x2x2x2x4x2x2 0x16
#define IIO_BIFURCATE_x2x2x4x2x2x2x2 0x17
#define IIO_BIFURCATE_x4x2x2x2x2x2x2 0x18
#define IIO_BIFURCATE_x2x2x2x2x2x2x2x2 0x19
#define IIO_BIFURCATE_AUTO 0xFF
//------------------------------------------------------------------------------------
// IIO IPs located in extended stacks for SPR program
//------------------------------------------------------------------------------------
#define HCX_BUS_RANGE 0x04
#define HCB_BUS_RANGE 0x08
#define CPM_BUS_OFFSET 0x01
#define HQM_BUS_OFFSET 0x03
#define CPM1_BUS_OFFSET 0x05
#define HQM1_BUS_OFFSET 0x07
#define CPM_MMIO_SIZE 0x100000000 // 4G MMIO resource for CPM
#define HQM_MMIO_SIZE 0x400000000 // 16G MMIO resource for HQM
#define CPM_RESERVED_BUS 0x01
#define HQM_RESERVED_BUS 0x01
#define HCT_BUS_RANGE 0x02
#define HCM_BUS_RANGE 0x02
#define TIP_BUS_OFFSET 0x01
#define VID_BUS_OFFSET 0x01
#define TIP_MMIO_SIZE 0x80000 // 512K MMIO resource for TIP
#define VID_MMIO_SIZE 0x1000000 // 16MB MMIO resource for VID
#define TIP_RESERVED_BUS 0x01
#define VID_RESERVED_BUS 0x01
#pragma pack(1)
// It's better to align with UPD_IIO_PCIE_PORT_CONFIG
typedef struct {
UINT8 SLOTEIP;
UINT8 SLOTHPCAP;
UINT8 SLOTHPSUP;
UINT8 SLOTPIP;
UINT8 SLOTAIP;
UINT8 SLOTMRLSP;
UINT8 SLOTPCP;
UINT8 SLOTABP;
UINT8 SLOTIMP;
UINT8 SLOTSPLS;
UINT8 SLOTSPLV;
UINT16 SLOTPSP;
BOOLEAN VppEnabled;
UINT8 VppPort;
UINT8 VppAddress;
UINT8 MuxAddress;
UINT8 ChannelID;
UINT8 PciePortEnable;
UINT8 PEXPHIDE;
UINT8 HidePEXPMenu;
UINT8 PciePortOwnership;
UINT8 RetimerConnectCount;
UINT8 ConfigIOU;
UINT8 PcieHotPlugOnPort;
UINT8 VMDEnabled;
UINT8 VMDPortEnable;
UINT8 VMDHotPlugEnable;
UINT8 PcieMaxPayload;
UINT8 PciePortLinkSpeed;
UINT8 DfxDnTxPresetGen3;
} UPD_IIO_PCIE_PORT_CONFIG_ENTRY;
#pragma pack()
//------------------------------------------------------------------------------------
// Uncomment line(s) below to override macro definitions in FSP IioUniversalDataHob.h
//------------------------------------------------------------------------------------
// #define MAX_SOCKET 4
// #define MAX_IMC 4
// #define MAX_CH 8
// #define MAX_IIO_PORTS_PER_SOCKET 57
// #define MAX_IIO_STACK 12
#endif

View File

@ -0,0 +1,71 @@
/** @file
Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* Neither the name of Intel Corporation nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
**/
#ifndef __DEFS_MEMMAP_H__
#define __DEFS_MEMMAP_H__
/* Bit definitions for RasModes */
#define CH_INDEPENDENT 0
#define FULL_MIRROR_1LM BIT0
#define FULL_MIRROR_2LM BIT1
#define CH_LOCKSTEP BIT2
#define RK_SPARE BIT3
#define PARTIAL_MIRROR_1LM BIT5
#define PARTIAL_MIRROR_2LM BIT6
#define STAT_VIRT_LOCKSTEP BIT7
#define MEMTYPE_1LM_MASK (1 << 0)
#define MEMTYPE_2LM_MASK (1 << 1)
#define MEMTYPE_VOLATILE_MASK (MEMTYPE_1LM_MASK | MEMTYPE_2LM_MASK)
/* ACPI SRAT Memory Flags */
#define SRAT_ACPI_MEMORY_ENABLED (1 << 0)
#define SRAT_ACPI_MEMORY_HOT_REMOVE_SUPPORTED (1 << 1)
#define SRAT_ACPI_MEMORY_NONVOLATILE (1 << 2)
#define MEM_TYPE_RESERVED (1 << 8)
#define MEM_ADDR_64MB_SHIFT_BITS 26
//------------------------------------------------------------------------------------
// Uncomment line(s) below to override macro definitions in FSP MemoryMapDataHob.h
//------------------------------------------------------------------------------------
// #define MAX_UNIQUE_NGN_DIMM_INTERLEAVE 2
// #define MAX_SPARE_RANK 2
// #define MAX_SOCKET 4 // Potentially need to refactor
// #define MAX_IMC 4 // Potentially need to refactor
// #define MAX_HBM_IO 4
// #define MAX_MC_CH 2
// #define MAX_DIMM 2 // Max DIMM per channel
// #define MAX_RANK_DIMM 2
// #define MAX_DRAM_CLUSTERS 4
// #define MAX_SAD_RULES 16
// #define MAX_FPGA_REMOTE_SAD_RULES 2 // Maximum FPGA sockets exists on ICX platform
#endif

View File

@ -0,0 +1,40 @@
/** @file
CXL GUID HOB definitions
@copyright
INTEL CONFIDENTIAL
Copyright 1999 - 2021 Intel Corporation. <BR>
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.
**/
#ifndef _HOB_CXLNODE_H_
#define _HOB_CXLNODE_H_
#include <fsp/util.h>
#include "CxlNodeHob.h"
#define FSP_HOB_CXLNODE_GUID { \
0x09, 0xe0, 0x8a, 0xdd, 0x5a, 0xda, 0xa3, 0x44, \
0xbe, 0x18, 0xda, 0x0c, 0x16, 0xc5, 0xaf, 0x5c \
}
#endif //_HOB_CXLNODE_H_

View File

@ -0,0 +1,40 @@
/** @file
Interface header file for the Enhanced warning log library class.
@copyright
INTEL CONFIDENTIAL
Copyright 2018 - 2021 Intel Corporation. <BR>
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.
**/
#ifndef _HOB_ENHANCEDWARNINGLOG_H_
#define _HOB_ENHANCEDWARNINGLOG_H_
#include <fsp/util.h>
#include "EnhancedWarningLogLib.h"
#define FSP_HOB_EWLID_GUID { \
0x00, 0x58, 0xe0, 0xd8, 0x5e, 0x00, 0x62, 0x44,\
0xaa, 0x3d, 0x9c, 0x6b, 0x47, 0x4, 0x92, 0x0b \
}
#endif //_HOB_ENHANCEDWARNINGLOG_H_

View File

@ -0,0 +1,186 @@
/**
Copyright (c) 2019-2021, Intel Corporation. All rights reserved.<BR>
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* Neither the name of Intel Corporation nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
**/
#ifndef _HOB_IIOUDS_H_
#define _HOB_IIOUDS_H_
#include <fsp/util.h>
#include "defs_iio.h"
#include "IioUniversalDataHob.h"
#define FSP_HOB_IIO_UNIVERSAL_DATA_GUID { \
0xa1, 0x96, 0xf3, 0x7f, 0x7d, 0xee, 0x1e, 0x43, \
0xba, 0x53, 0x8f, 0xCa, 0x12, 0x7c, 0x44, 0xc0 \
}
#define NUMBER_PORTS_PER_SOCKET MAX_IIO_PORTS_PER_SOCKET
#pragma pack(1)
/**
* IIO Stacks
*
* Ports(XCC) Stack(HOB) IioConfigIou
* =========================================
* 0 stack 0 DmiAsPcie
* 1A..1H stack 1 IOU0
* 2A..2H stack 2 IOU1
* 3A..3H stack 3 IOU2
* 4A..4H stack 4 IOU3
* 5A..5H stack 5 IOU4
* 6A..6H stack 6 IOU5
*/
/**
IIO PCIe Ports
**/
typedef enum {
// DmiAsPcie, stack 0
PORT_0 = 0,
// IOU0, stack 1
PORT_1A,
PORT_1B,
PORT_1C,
PORT_1D,
PORT_1E,
PORT_1F,
PORT_1G,
PORT_1H,
// IOU1, stack 2
PORT_2A,
PORT_2B,
PORT_2C,
PORT_2D,
PORT_2E,
PORT_2F,
PORT_2G,
PORT_2H,
// IOU2, stack 3
PORT_3A,
PORT_3B,
PORT_3C,
PORT_3D,
PORT_3E,
PORT_3F,
PORT_3G,
PORT_3H,
// IOU3, stack 4
PORT_4A,
PORT_4B,
PORT_4C,
PORT_4D,
PORT_4E,
PORT_4F,
PORT_4G,
PORT_4H,
// IOU4, stack 5
PORT_5A,
PORT_5B,
PORT_5C,
PORT_5D,
PORT_5E,
PORT_5F,
PORT_5G,
PORT_5H,
// IOU5, stack 6, not used for socket 0; for socket 1, swap from DMI as x8
PORT_6A,
PORT_6B,
PORT_6C,
PORT_6D,
PORT_6E,
PORT_6F,
PORT_6G,
PORT_6H,
// IOU6, stack 7, not used
PORT_7A,
PORT_7B,
PORT_7C,
PORT_7D,
PORT_7E,
PORT_7F,
PORT_7G,
PORT_7H,
MAX_PORTS
} PCIE_PORTS;
typedef enum {
//for ICX
IioStack0 = 0, // DmiAsPcie
IioStack1 = 1, // IOU0
IioStack2 = 2, // IOU1
IioStack3 = 3, // IOU2
IioStack4 = 4, // IOU3
IioStack5 = 5, // IOU4
//for SPR
IioStack6 = 6, // IOU5
IioStack7 = 7,
IioStack8 = 8,
IioStack9 = 9,
IioStack10 = 10,
IioStack11 = 11,
//for later SOC
IioStack12 = 12,
IioStack13 = 13,
IioStack14 = 14,
IioStack15 = 15,
IioStack16 = 16,
IioStack17 = 17,
IioStack18 = 18,
IioStackUnknown = 0xFF
} IIO_STACK;
typedef enum {
TYPE_UBOX = 0,
TYPE_UBOX_IIO,
TYPE_MCP,
TYPE_FPGA,
TYPE_HFI,
TYPE_NAC,
TYPE_GRAPHICS,
TYPE_DINO,
TYPE_RESERVED,
TYPE_DISABLED, // This item must be prior to stack specific disable types
TYPE_UBOX_IIO_DIS,
TYPE_MCP_DIS,
TYPE_FPGA_DIS,
TYPE_HFI_DIS,
TYPE_NAC_DIS,
TYPE_GRAPHICS_DIS,
TYPE_DINO_DIS,
TYPE_RESERVED_DIS,
TYPE_NONE
} STACK_TYPE;
#pragma pack()
#endif

View File

@ -0,0 +1,48 @@
/** @file
GUID used for Memory Map Data entries in the HOB list.
@copyright
INTEL CONFIDENTIAL
Copyright 1999 - 2021 Intel Corporation. <BR>
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.
**/
#ifndef _HOB_MEMMAP_H_
#define _HOB_MEMMAP_H_
#include "defs_memmap.h"
#include "MemoryMapDataHob.h"
#define FSP_SYSTEM_MEMORYMAP_HOB_GUID { \
0x15, 0x00, 0x87, 0xf8, 0x94, 0x69, 0x98, 0x4b, 0x95, 0xa2, \
0xbd, 0x56, 0xda, 0x91, 0xc0, 0x7f \
}
#define MAX_IMC_PER_SOCKET MAX_IMC
#define MAX_SRAT_MEM_ENTRIES_PER_IMC 8
#define MAX_SMB_INSTANCE 2
#define MAX_ACPI_MEMORY_AFFINITY_COUNT ( \
MAX_SOCKET * MAX_IMC_PER_SOCKET * MAX_SRAT_MEM_ENTRIES_PER_IMC \
)
#define AMT_MAX_NODE ((MAX_AMT)*(MAX_SOCKET)) // Max abstract memory target for all sockets
#endif // _HOB_MEMMAP_H_

View File

@ -0,0 +1,54 @@
/** @file
System Information HOB Hearder File
@copyright
INTEL CONFIDENTIAL
Copyright 2017 - 2021 Intel Corporation. <BR>
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.
**/
#ifndef _HOB_SYSTEMINFO_H_
#define _HOB_SYSTEMINFO_H_
#include <fsp/util.h>
#include "SystemInfoHob.h"
typedef enum {
TypeLcc = 0,
TypeMcc,
TypeHcc,
TypeXcc,
TypeUcc,
TypeLccFb,
TypeZcc,
TypeX1,
TypeGrr,
TypeGnrd,
TypeChopTypeMax = 0xff
} TYPE_CHOPTYPE_ENUM;
#define FSP_HOB_SYSTEMINFO_GUID { \
0xf2, 0xa0, 0x50, 0x76, 0x91, 0x0d, 0x0c, 0x4b, \
0x92, 0x3b, 0xbd, 0xcf, 0x22, 0xd1, 0x64, 0x35 \
}
#endif //_HOB_SYSTEMINFO_H_