| /** @file |
| |
| Copyright (c) 2019-2023, 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 _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_ |