hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
/** @file
 
  @copyright
  Copyright 2004 - 2021 Intel Corporation. <BR>
 
  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 <Upi/KtiSi.h>
#include <Upi/KtiDisc.h>
#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_