summaryrefslogtreecommitdiffstats
path: root/MdePkg/Include/IndustryStandard/Cxl30.h
blob: 7a9a6d69405d579e17551d95bab8b7c2757356c4 (plain)
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
/** @file
  CXL 3.0 Register definitions

  This file contains the register definitions based on the Compute Express Link
  (CXL) Specification Revision 3.0.

  Copyright (c) 2024, Intel Corporation. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef CXL30_H_
#define CXL30_H_

#include <IndustryStandard/Cxl20.h>

//
// CXL Cache Memory Capability IDs
// Compute Express Link Specification Revision 3.0 - Chapter 8.2.4 Table 8-22
//
#define CXL_CACHE_MEM_CAPABILITY_ID_TIMEOUT_AND_ISOLATION  0x0009
#define CXL_CACHE_MEM_CAPABILITY_ID_EXTENDED               0x000A
#define CXL_CACHE_MEM_CAPABILITY_ID_BI_ROUTE_TABLE         0x000B
#define CXL_CACHE_MEM_CAPABILITY_ID_BI_DECODER             0x000C
#define CXL_CACHE_MEM_CAPABILITY_ID_CACHE_ID_ROUTE_TABLE   0x000D
#define CXL_CACHE_MEM_CAPABILITY_ID_CACHE_ID_DECODER       0x000E
#define CXL_CACHE_MEM_CAPABILITY_ID_EXTENDED_HDM_DECODER   0x000F

//
// CXL_Capability_Version
// Compute Express ink Specification Revision 3.0 - Chapter 8.2.4.5
//
#define CXL_HDM_DECODER_VERSION_30  0x3

//
// CXL CXL HDM Decoder n Control
// Compute Express Link Specification Revision 3.0 - 8.2.4.19.7
//
//
// Bit4..7: Interleave Ways (IW)
//
#define CXL_HDM_16_WAY_INTERLEAVING  0x4
#define CXL_HDM_3_WAY_INTERLEAVING   0x8
#define CXL_HDM_6_WAY_INTERLEAVING   0x9
#define CXL_HDM_12_WAY_INTERLEAVING  0xA

//
// Ensure proper structure formats
//
#pragma pack(1)

//
// CXL.cachemem Extended Register Capability
// Compute Express Link Specification Revision 3.0  - Chapter 8.2.4.24
//
typedef union {
  struct {
    UINT32    ExtendedRangesBitmap : 16;      // Bit 0..15
    UINT32    Reserved             : 16;      // Bit 16..31
  } Bits;
  UINT32    Uint32;
} CXL_CM_EXTENTED_REGISTER_CAPABILITY;

#define CXL_CM_EXTENTED_RANGES_BITMAP  (BIT2 | BIT3 | BIT4 | BIT5 | BIT6 | BIT7 | BIT8 | BIT9 | BIT10 | BIT11 | BIT12 | BIT13 | BIT15)

//
// CXL BI Route Table Capability
// Compute Express Link Specification Revision 3.0  - Chapter 8.2.4.25
//
typedef union {
  struct {
    UINT32    ExplicitBiRtCommitRequired : 1;                  // bit 0
    UINT32    Reserved                   : 31;                 // bit 1..31
  } Bits;
  UINT32    Uint32;
} CXL_BI_RT_CAPABILITY;

typedef union {
  struct {
    UINT32    BiRtCommit : 1;                                   // bit 0
    UINT32    Reserved   : 31;                                  // bit 1..31
  } Bits;
  UINT32    Uint32;
} CXL_BI_RT_CONTROL;

typedef union {
  struct {
    UINT32    BiRtCommitted          : 1;                      // bit 0
    UINT32    BiRtErrorNotCommitted  : 1;                      // bit 1
    UINT32    Reserved1              : 6;                      // bit 2..7
    UINT32    BiRtCommitTimeoutScale : 4;                      // bit 8..11
    UINT32    BiRtCommitTimeoutBase  : 4;                      // bit 12..15
    UINT32    Reserved2              : 16;                     // bit 16..31
  } Bits;
  UINT32    Uint32;
} CXL_BI_RT_STATUS;

typedef struct {
  CXL_BI_RT_CAPABILITY    BiRtCap;                              // offset 0x00
  CXL_BI_RT_CONTROL       BiRtControl;                          // offset 0x04
  CXL_BI_RT_STATUS        BiRtStatus;                           // offset 0x08
} CXL_BI_ROUTE_TABLE_CAPABILITY;

//
// CXL BI Decoder Capability
// Compute Express Link Specification Revision 3.0  - Chapter 8.2.4.26
//
typedef union {
  struct {
    UINT32    HdmDCapable                     : 1;             // bit 0
    UINT32    ExplicitBiDecoderCommitRequired : 1;             // bit 1
    UINT32    Reserved                        : 30;            // bit 2..31
  } Bits;
  UINT32    Uint32;
} CXL_BI_DECODER_CAP;

typedef union {
  struct {
    UINT32    BiForward       : 1;                             // bit 0
    UINT32    BiEnable        : 1;                             // bit 1
    UINT32    BiDecoderCommit : 1;                             // bit 2
    UINT32    Reserved        : 29;                            // bit 3..31
  } Bits;
  UINT32    Uint32;
} CXL_BI_DECODER_CONTROL;

typedef union {
  struct {
    UINT32    BiDecoderCommitted          : 1;                 // bit 0
    UINT32    BiDecoderErrorNotCommitted  : 1;                 // bit 1
    UINT32    Reserved1                   : 6;                 // bit 2..7
    UINT32    BiDecoderCommitTimeoutScale : 4;                 // bit 8..11
    UINT32    BiDecoderCommitTimeoutBase  : 4;                 // bit 12..15
    UINT32    Reserved2                   : 16;                // bit 16..31
  } Bits;
  UINT32    Uint32;
} CXL_BI_DECODER_STATUS;

typedef struct {
  CXL_BI_DECODER_CAP        BiDecoderCap;                       // offset 0x00
  CXL_BI_DECODER_CONTROL    BiDecoderControl;                   // offset 0x04
  CXL_BI_DECODER_STATUS     BiDecoderStatus;                    // offset 0x08
} CXL_BI_DECODER_CAPABILITY;

//
// CXL Cache ID Route Table Capability
// Compute Express Link Specification Revision 3.0  - Chapter 8.2.4.27
//
typedef union {
  struct {
    UINT32    CacheIdTargetCount              : 5;            // Bit 0..4
    UINT32    Reserved1                       : 3;            // Bit 5..7
    UINT32    HdmDType2DeviceMaxCount         : 4;            // Bit 8..11
    UINT32    Reserved2                       : 4;            // Bit 12..15
    UINT32    ExplicitCacheIdRtCommitRequired : 1;            // Bit 16
    UINT32    Reserved3                       : 15;           // Bit 17:31
  } Bits;
  UINT32    Uint32;
} CXL_CACHE_ID_RT_CAPABILITY;

typedef union {
  struct {
    UINT32    CacheIdRtCommit : 1;                   // Bit 0
    UINT32    Reserved        : 31;                  // Bit 1..31
  } Bits;
  UINT32    Uint32;
} CXL_CACHE_ID_RT_CONTROL;

typedef union {
  struct {
    UINT32    CacheIdRtCommitted          : 1;       // Bit 0
    UINT32    CacheIdRtErrNotCommitted    : 1;       // Bit 1
    UINT32    Reserved1                   : 6;       // Bit 2..7
    UINT32    CacheIdRtCommitTimeoutScale : 4;       // Bit 8..11
    UINT32    CacheIdRtCommitTimeoutBase  : 4;       // Bit 12..15
    UINT32    Reserved2                   : 16;      // Bit 16..31
  } Bits;
  UINT32    Uint32;
} CXL_CACHE_ID_RT_STATUS;

typedef union {
  struct {
    UINT16    Valid      : 1;                       // Bit 0
    UINT16    Reserved   : 7;                       // Bit 1..7
    UINT16    PortNumber : 8;                       // Bit 8..15
  } Bits;
  UINT16    Uint16;
} CXL_CACHE_ID_RT_TARGET;

typedef struct {
  CXL_CACHE_ID_RT_CAPABILITY    CacheIdRtCap;               // offset 0x00
  CXL_CACHE_ID_RT_CONTROL       CacheIdRtControl;           // offset 0x04
  CXL_CACHE_ID_RT_STATUS        CacheIdRtStatus;            // offset 0x08
  UINT32                        Reserved;                   // offset 0x0C
  CXL_CACHE_ID_RT_TARGET        CacheIdRtTarget[];          // offset 0x10
} CXL_CACHE_ID_ROUTE_TABLE_CAPABILITY;

//
// CXL Cache ID Decoder Capability
// Compute Express Link Specification Revision 3.0  - Chapter 8.2.4.28
//
typedef union {
  struct {
    UINT32    ExplicitCacheIdDecoderCommitRequired : 1;            // Bit 0
    UINT32    Reserved                             : 31;           // Bit 1..31
  } Bits;
  UINT32    Uint32;
} CXL_CACHE_ID_DECODER_CAP;

typedef union {
  struct {
    UINT32    ForwardCacheId         : 1;           // Bit 0
    UINT32    AssignCacheId          : 1;           // Bit 1
    UINT32    HdmDType2DevicePresent : 1;           // Bit 2
    UINT32    CacheIdDecoderCommit   : 1;           // Bit 3
    UINT32    Reserved1              : 4;           // Bit 4..7
    UINT32    HdmDType2DeviceCacheId : 4;           // Bit 8..11
    UINT32    Reserved2              : 4;           // Bit 12..15
    UINT32    LocalCacheId           : 4;           // Bit 16..19
    UINT32    Reserved3              : 4;           // Bit 20..23
    UINT32    TrustLevel             : 2;           // Bit 24..25
    UINT32    Reserved4              : 6;           // Bit 26..31
  } Bits;
  UINT32    Uint32;
} CXL_CACHE_ID_DECODER_CONTROL;

typedef union {
  struct {
    UINT32    CacheIdDecoderCommitted          : 1;           // Bit 0
    UINT32    CacheIdDecoderErrorNotCommitted  : 1;           // Bit 1
    UINT32    Reserved1                        : 6;           // Bit 2..7
    UINT32    CacheIdDecoderCommitTimeoutScale : 4;           // Bit 8..11
    UINT32    CacheIdDecoderCommitTimeoutBase  : 4;           // Bit 12..15
    UINT32    Reserved2                        : 16;          // Bit 16..31
  } Bits;
  UINT32    Uint32;
} CXL_CACHE_ID_DECODER_STATUS;

typedef struct {
  CXL_CACHE_ID_DECODER_CAP        CacheIdDecoderCap;           // offset 0x00
  CXL_CACHE_ID_DECODER_CONTROL    CacheIdDecoderControl;       // offset 0x04
  CXL_CACHE_ID_DECODER_STATUS     CacheIdDecoderStatus;        // offset 0x08
} CXL_CACHE_ID_DECODER_CAPABILITY;

//
// CXL Timeout and Isolation Capability Structure
// Compute Express Link Specification Revision 3.0  - Chapter 8.2.4.23
//
typedef union {
  struct {
    UINT32    CxlmemTransactionTimeoutRangesSupported   : 4; // Bits 3:0
    UINT32    CxlmemTransactionTimeoutSupported         : 1; // Bits 4
    UINT32    Reserved1                                 : 3; // Bits 7:5
    UINT32    CxlcacheTransactionTimeoutRangesSupported : 4; // Bits 11:8
    UINT32    CxlcacheTransactionTimeoutSupported       : 1; // Bits 12
    UINT32    Reserved2                                 : 3; // Bits 15:13
    UINT32    CxlmemIsolationSupported                  : 1; // Bits 16
    UINT32    CxlmemIsolationLinkdownSupported          : 1; // Bits 17
    UINT32    CxlcacheIsolationSupported                : 1; // Bits 18
    UINT32    CxlcacheIsolationLinkdownSupported        : 1; // Bits 19
    UINT32    Reserved3                                 : 5; // Bits 24:20
    UINT32    IsolationErrCorSignalingSupported         : 1; // Bits 25
    UINT32    IsolationInterruptSupported               : 1; // Bits 26
    UINT32    IsolationInterruptMessageNumber           : 5; // Bits 31:27
  } Bits;
  UINT32    Uint32;
} CXL_3_0_CXL_TIMEOUT_AND_ISOLATION_CAPABILITY;

typedef union {
  struct {
    UINT32    CxlmemTransactionTimeoutValue    : 4; // Bits 3:0
    UINT32    CxlmemTransactionTimeoutEnable   : 1; // Bits 4
    UINT32    Reserved1                        : 3; // Bits 7:5
    UINT32    CxlcacheTransactionTimeoutValue  : 4; // Bits 11:8
    UINT32    CxlcacheTransactionTimeoutEnable : 1; // Bits 12
    UINT32    Reserved2                        : 3; // Bits 15:13
    UINT32    CxlmemIsolationEnable            : 1; // Bits 16
    UINT32    CxlmemIsolationLinkdownEnable    : 1; // Bits 17
    UINT32    CxlcacheIsolationEnable          : 1; // Bits 18
    UINT32    CxlcacheIsolationLinkdownEnable  : 1; // Bits 19
    UINT32    Reserved3                        : 5; // Bits 24:20
    UINT32    IsolationErrCorSignalingEnable   : 1; // Bits 25
    UINT32    IsolationInterruptEnable         : 1; // Bits 26
    UINT32    Reserved4                        : 5; // Bits 31:27
  } Bits;
  UINT32    Uint32;
} CXL_3_0_CXL_TIMEOUT_AND_ISOLATION_CONTROL;

typedef union {
  struct {
    UINT32    CxlmemTransactionTimeout        : 1;  // Bits 0
    UINT32    Reserved1                       : 3;  // Bits 3:1
    UINT32    CxlcacheTransactionTimeout      : 1;  // Bits 4
    UINT32    Reserved2                       : 3;  // Bits 7:5
    UINT32    CxlmemIsolationStatus           : 1;  // Bits 8
    UINT32    CxlmemIsolationLinkdownStatus   : 1;  // Bits 9
    UINT32    Reserved3                       : 2;  // Bits 11:10
    UINT32    CxlcacheIsolationStatus         : 1;  // Bits 12
    UINT32    CxlcacheIsolationLinkdownStatus : 1;  // Bits 13
    UINT32    CxlRpBusy                       : 1;  // Bits 14
    UINT32    Reserved4                       : 17; // Bits 31:15
  } Bits;
  UINT32    Uint32;
} CXL_3_0_CXL_TIMEOUT_AND_ISOLATION_STATUS;

typedef struct {
  CXL_3_0_CXL_TIMEOUT_AND_ISOLATION_CAPABILITY    TimeoutAndIsolationCap;
  UINT32                                          Reserved;
  CXL_3_0_CXL_TIMEOUT_AND_ISOLATION_CONTROL       TimeoutAndIsolationControl;
  CXL_3_0_CXL_TIMEOUT_AND_ISOLATION_STATUS        TimeoutAndIsolationStatus;
} CXL_3_0_CXL_TIMEOUT_AND_ISOLATION_CAPABILITY_STRUCTURE;

#pragma pack()

#endif