/** @file @copyright Copyright 2004 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ // Definition Flag: // 1. KTI_SW_SIMULATION -> run with KTIRC Simulation // 2. IA32 -> run with IA32 mode #ifndef _KTI_HOST_H_ #define _KTI_HOST_H_ #include "DataTypes.h" #include "PlatformHost.h" #include #include #include "MemHostChipCommon.h" #pragma pack(1) /********************************************************* KTIRC Host Structure Related *********************************************************/ typedef enum { KTI_LINK0 = 0x0, KTI_LINK1, KTI_LINK2, KTI_LINK3, KTI_LINK4, KTI_LINK5 } KTI_LOGIC_LINK; typedef struct { UINT8 Reserved1; UINT8 Reserved2; UINT8 Reserved3; UINT8 Reserved4; UINT8 Reserved5; UINT8 Reserved6; UINT8 Reserved7; UINT8 Reserved8; UINT8 Reserved9; UINT8 Reserved10; UINT8 Reserved11; UINT8 Reserved12; UINT8 Reserved13; UINT8 Reserved14; UINT8 Reserved15; UINT8 Reserved16; UINT8 Reserved17; UINT8 Reserved18; UINT8 Reserved19; UINT8 Reserved20; UINT8 Reserved21; UINT8 Reserved22; UINT8 Reserved23; UINT8 Reserved24; UINT8 Reserved25; UINT8 Reserved26; UINT8 Reserved27; UINT8 Reserved28; UINT8 Reserved29; UINT8 Reserved30; UINT8 Reserved31; UINT8 Reserved32; UINT8 Reserved33; UINT8 Reserved34; UINT8 Reserved35; UINT8 Reserved36; UINT8 Reserved37; UINT32 Reserved38; UINT8 Reserved39; UINT8 Reserved40; } KTI_RESERVED_3; typedef struct { UINT32 Reserved1:2; UINT32 Reserved2:2; UINT32 Reserved3:2; UINT32 Rsvd1 : 26; } KTI_RESERVED_1; typedef struct { UINT8 Reserved4 : 2; UINT8 Rsvd1 : 6; } KTI_RESERVED_2; typedef struct { KTI_RESERVED_1 Link[MAX_FW_KTI_PORTS]; KTI_RESERVED_2 Phy[MAX_FW_KTI_PORTS]; } KTI_RESERVED_4; /** Per Lane PHY Configuration These PHY settings are system dependent. Every socket/link/freq requires an instance of this structure. **/ typedef struct { UINT8 SocketID; ///< Socket ID UINT8 AllLanesUseSameTxeq; ///< Use same TXEQ on all lanes UINT8 Freq; ///< The Link Speed these TXEQ settings should be used for UINT32 Link; ///< Port Number UINT32 TXEQL[20]; ///< TXEQ Settings UINT32 CTLEPEAK[5]; ///< CTLE Peaking Settings } PER_LANE_EPARAM_LINK_INFO; /** All Lanes PHY Configuration This is for full speed mode, all lanes have the same TXEQ setting **/ typedef struct { UINT8 SocketID; ///< Socket ID UINT8 Freq; ///< The Link Speed these TXEQ settings should be used for UINT32 Link; ///< Port Number UINT32 AllLanesTXEQ; ///< TXEQ Setting UINT8 CTLEPEAK; ///< CTLE Peaking Setting } ALL_LANES_EPARAM_LINK_INFO; #define ADAPTIVE_CTLE 0x3f 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; // // Link layer settings, per link // typedef struct { UINT8 KtiPortDisable:1; // TRUE - Port disabled; FALSE- Port enabled (default) UINT8 KtiLinkVnaOverride:7; // Numeric value 0x00-0x7f UINT8 Rsvd:8; } KTI_CPU_LINK_SETTING; // // Phy general setting, per link // typedef struct { UINT32 KtiLinkSpeed:3; UINT32 Rsvd:29; } KTI_CPU_PHY_SETTING; // // Per CPU setting // typedef struct { KTI_CPU_LINK_SETTING Link[MAX_FW_KTI_PORTS]; KTI_CPU_PHY_SETTING Phy[MAX_FW_KTI_PORTS]; } KTI_CPU_SETTING; /** KTIRC input structure **/ typedef struct { // // Protocol layer and other general options; note that "Auto" is provided only options whose value will change depending // on the topology, not for all options. // /** Indicates the ratio of Bus/MMIOL/IO resource to be allocated for each CPU's IIO. Value 0 indicates, that CPU is not relevant for the system. If resource is requested for an CPU that is not currently populated, KTIRC will assume that the ratio is 0 for that CPU and won't allocate any resources for it. If resource is not requested for a CPU that is populated, KTIRC will force the ratio for that CPU to 1. **/ UINT8 BusRatio[MAX_SOCKET]; UINT8 D2KCreditConfig; ///< 1 - Min, 2 - Med (Default), 3- Max UINT8 SnoopThrottleConfig; ///< 0 - Disabled (Default), 1 - Min, 2 - Med, 3- Max UINT8 SnoopAllCores; ///< 0 - Disabled, 1 - Enabled, 2 - Auto UINT8 LegacyVgaSoc; ///< Socket that claims the legacy VGA range; valid values are 0-7; 0 is default. UINT8 LegacyVgaStack; ///< Stack that claims the legacy VGA range; valid values are 0-3; 0 is default. UINT8 ColdResetRequestStart; ///< @deprecated Reserved. UINT8 P2pRelaxedOrdering; ///< 0 - Disable(default) 1 - Enable UINT8 DebugPrintLevel; ///< Bit 0 - Fatal, Bit1 - Warning, Bit2 - Info Summary; Bit 3 - Info detailed. 1 - Enable; 0 - Disable UINT8 SncEn; ///< 0 - Disable, (default) 1 - Enable UINT8 UmaClustering; ///< 0 - Disable, 2 - 2Clusters UMA, 4 - 4Clusters UMA UINT8 IoDcMode; ///< 0 - Disable IODC, 1 - AUTO (default), 2 - IODC_EN_REM_INVITOM_PUSH, 3 - IODC_EN_REM_INVITOM_ALLOCFLOW ///< 4 - IODC_EN_REM_INVITOM_ALLOC_NONALLOC, 5 - IODC_EN_REM_INVITOM_AND_WCILF UINT8 DegradePrecedence; ///< Use DEGRADE_PRECEDENCE definition; TOPOLOGY_PRECEDENCE is default UINT8 Degrade4SPreference; ///< 4S1LFullConnect topology is default; another option is 4S2LRing topology. UINT8 DirectoryModeEn; ///< 0 - Disable; 1 - Enable (default) UINT8 XptPrefetchEn; ///< Xpt Prefetch : 1 - Enable; 0 - Disable; 2 - Auto (default) UINT8 KtiPrefetchEn; ///< Kti Prefetch : 1 - Enable; 0 - Disable; 2 - Auto (default) UINT8 XptRemotePrefetchEn; ///< Xpt Remote Prefetch : 1 - Enable; 0 - Disable; 2 - Auto (default) (ICX only) UINT8 RdCurForXptPrefetchEn; ///< RdCur for XPT Prefetch : 0 - Disable, 1 - Enable, 2- Auto (default) UINT8 KtiFpgaEnable[MAX_SOCKET]; ///< Indicate if should enable Fpga device found in this socket : 0 - Disable, 1 - Enable, 2- Auto UINT8 DdrtQosMode; ///< DDRT QoS Feature: 0 - Disable (default), 1 - M2M QoS Enable, Cha QoS Disable ///< 2 - M2M QoS Enable, Cha QoS Enable // // Phy/Link Layer Options (System-wide and per socket) // UINT8 KtiLinkSpeedMode; ///< Link speed mode selection; 0 - Slow Speed; 1- Full Speed (default) UINT8 KtiLinkSpeed; ///< Use KTI_LINKSPEED definition UINT8 KtiAdaptationEn; ///< 0 - Disable, 1 - Enable UINT8 KtiAdaptationSpeed; ///< Use KTI_LINK_SPEED definition; MAX_KTI_LINK_SPEED - Auto (i.e BIOS choosen speed) UINT8 KtiLinkL0pEn; ///< 0 - Disable, 1 - Enable, 2- Auto (default) UINT8 KtiLinkL1En; ///< 0 - Disable, 1 - Enable, 2- Auto (default) UINT8 KtiFailoverEn; ///< 0 - Disable, 1 - Enable, 2- Auto (default) UINT8 KtiLbEn; ///< 0 - Disable(default), 1 - Enable UINT8 KtiCrcMode; ///< CRC_MODE_16BIT, CRC_MODE_ROLLING_32BIT, CRC_MODE_AUTO or CRC_MODE_PER_LINK UINT8 KtiCpuSktHotPlugEn; ///< 0 - Disable (default), 1 - Enable UINT8 KtiCpuSktHotPlugTopology; ///< 0 - 4S Topology (default), 1 - 8S Topology UINT8 KtiSkuMismatchCheck; ///< 0 - No, 1 - Yes (default) UINT8 IrqThreshold; ///< IRQ Threshold setting UINT8 TorThresLoctoremNorm; ///< TOR threshold - Loctorem threshold normal UINT8 TorThresLoctoremEmpty; ///< TOR threshold - Loctorem threshold empty UINT8 MbeBwCal; ///< 0 - Linear, 1 - Biased, 2 - Legacy, 3 - AUTO (default = Linear) UINT8 TscSyncEn; ///< TSC sync in sockets: 0 - Disable, 1 - Enable, 2 - AUTO (Default) UINT8 StaleAtoSOptEn; ///< HA A to S directory optimization: 1 - Enable; 0 - Disable; 2 - Auto (Default) UINT8 LLCDeadLineAlloc; ///< LLC dead line alloc: 1 - Enable(Default); 0 - Disable UINT8 SplitLock; ///< @deprecated Reserved, must be set to 0. UINT8 ColdResetRequestEnd; ///< @deprecated Reserved. /// /// Phy/Link Layer Options (per Port) /// KTI_CPU_SETTING PhyLinkPerPortSetting[MAX_SOCKET]; UINT8 mmCfgBase; ///< MMCFG Base address, must be 64MB (SKX, HSX, BDX) / 256MB (GROVEPORT) aligned. Options: {0:1G, 1:1.5G, 2:1.75G, 3:2G, 4:2.25G, 5:3G, 6: Auto} UINT8 mmCfgSize; ///< MMCFG Size address, must be 64M, 128M or 256M. Options: {0:64M, 1:128M, 2:256M, 3:512M, 4:1G, 5:2G, 6: Auto} UINT32 mmiolBase; ///< MMIOL Base address, must be 64MB aligned UINT32 mmiolSize; ///< MMIOL Size address UINT32 mmiohBase; ///< Address bits above 4GB, i,e, the hex value here is address Bit[45:32] for SKX family, Bit[51:32] for ICX-SP UINT8 CpuPaLimit; ///< Limits the max address to 46bits. This will take precedence over mmiohBase UINT8 lowGap; ///< @deprecated Reserved. UINT8 highGap; ///< @deprecated Reserved. UINT16 mmiohSize; ///< Number of 1GB contiguous regions to be assigned for MMIOH space per CPU. Range 1-1024 UINT8 isocEn; ///< 1 - Enable; 0 - Disable (BIOS will force this for 4S) UINT8 dcaEn; ///< 1 - Enable; 0 - Disable /** BoardTypeBitmask: - Bits[3:0] - Socket0 - Bits[7:4] - Socket1 - Bits[11:8] - Socket2 - Bits[15:12] - Socket3 - Bits[19:16] - Socket4 - Bits[23:20] - Socket5 - Bits[27:24] - Socket6 - Bits[31:28] - Socket7 Within each Socket-specific field, bits mean: - Bit0 = CPU_TYPE_STD support; always 1 on Socket0 - Bit1 = CPU_TYPE_F support - Bit2 = CPU_TYPE_P support - Bit3 = reserved **/ UINT32 BoardTypeBitmask; UINT32 AllLanesPtr; ///< Pointer to an array of ALL_LANES_EPARAM_LINK_INFO structures. UINT32 PerLanePtr; ///< Pointer to an array of PER_LANE_EPARAM_LINK_INFO structures. UINT32 AllLanesSizeOfTable; ///< Number of elements in array pointed to by AllLanesPtr UINT32 PerLaneSizeOfTable; ///< Number of elements in array pointed to by PerLanePtr UINT32 WaitTimeForPSBP; ///< the wait time in units of 1000us for PBSP to check in. BOOLEAN IsKtiNvramDataReady; ///< Used internally, Reserved. UINT32 OemHookPostTopologyDiscovery; ///< OEM_HOOK_POST_TOPOLOGY_DISCOVERY function pointer. Invoked at the end of topology discovery, used for error reporting. UINT32 OemGetResourceMapUpdate; ///< OEM_GET_RESOURCE_MAP_UPDATE function pointer. Allows platform code to adjust the resource map. UINT32 OemGetAdaptedEqSettings; ///< @deprecated Reserved, must be set to 0. UINT32 OemCheckCpuPartsChangeSwap; ///< @deprecated Reserved, must be set to 0. BOOLEAN WaSerializationEn; ///< Enable BIOS serialization WA by PcdWaSerializationEn KTI_RESERVED_3 Reserved166; KTI_RESERVED_4 Reserved167[MAX_SOCKET]; UINT8 KtiInEnableMktme; ///< 0 - Disabled; 1 - Enabled; MkTme status decides D2Kti feature state /** Pointers to the location of the CFR/SINIT binaries. Contains a pointer to a 24 byte fixed length array. The array contains the 3 instances of the following c-struct ~~~ typedef struct { UINT32 CfrImagePtr; UINT32 CfrImageSize; } ~~~ This allows a maximum of 3 CFR/SINIT binaries to be provided by platform code. **/ UINT32 CFRImagePtr; UINT8 S3mCFRCommit; ///< 0 - Disable S3m CFR flow. 1 - Provision S3m CFR but not Commit. 2 - Provision and Commit S3M CFR. UINT8 PucodeCFRCommit; ///< 0 - Disable Pucode CFR flow. 1 - Provision Pucode CFR but not Commit. 2 - Provision and Commit Pucode CFR. } KTI_HOST_IN; #pragma pack() #endif // _KTI_HOST_H_