gem5  v22.1.0.0
sdma_packets.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021 Advanced Micro Devices, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its
16  * contributors may be used to endorse or promote products derived from this
17  * software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  *
31  */
32 
33 #ifndef __DEV_AMDGPU_SDMA_PACKETS_HH__
34 #define __DEV_AMDGPU_SDMA_PACKETS_HH__
35 
36 namespace gem5
37 {
38 
42 typedef struct GEM5_PACKED
43 {
44  uint32_t count : 30;
45  uint32_t res0 : 2;
46  uint32_t res1 : 16;
47  uint32_t sdw: 2;
48  uint32_t res2 : 6;
49  uint32_t ddw: 2;
50  uint32_t res3 : 6;
51  uint64_t source;
52  uint64_t dest;
54 static_assert(sizeof(sdmaCopy) == 24);
55 
56 typedef struct GEM5_PACKED
57 {
58  uint64_t dest;
59  uint32_t count : 20;
60  uint32_t reserved0 : 4;
61  uint32_t sw : 2;
62  uint32_t reserved1 : 6;
64 static_assert(sizeof(sdmaWrite) == 12);
65 
66 typedef struct GEM5_PACKED
67 {
68  union
69  {
70  struct
71  {
72  uint32_t addrLo;
73  uint32_t addrHi;
74  };
76  };
77  uint32_t srcData;
78  uint32_t unused : 10;
79  uint32_t count : 22;
81 static_assert(sizeof(sdmaConstFill) == 16);
82 
83 typedef struct GEM5_PACKED
84 {
85  uint32_t key0;
86  uint32_t key1;
87  uint32_t key2;
88  uint32_t key3;
89  uint32_t count0;
90  uint32_t count1;
91  uint32_t count2;
92  uint32_t count3;
94 static_assert(sizeof(sdmaAESKey) == 32);
95 
96 typedef struct GEM5_PACKED
97 {
98  uint32_t countData0;
99  uint32_t countData1;
100  uint32_t countData2;
101  uint32_t countData3;
103 static_assert(sizeof(sdmaAESCounter) == 16);
104 
105 typedef struct GEM5_PACKED
106 {
107  uint32_t countKey0;
108  uint32_t countKey1;
109  uint32_t countKey2;
110  uint32_t countKey3;
112 static_assert(sizeof(sdmaAESLoad) == 16);
113 
114 typedef struct GEM5_PACKED
115 {
116  uint32_t reserved : 6;
117  uint32_t offset : 26;
119 static_assert(sizeof(sdmaAESOffset) == 4);
120 
121 typedef struct GEM5_PACKED
122 {
123  uint64_t base;
124  uint32_t size : 20;
125  uint32_t reserved : 12;
126  uint64_t csaAddr;
128 static_assert(sizeof(sdmaIndirectBuffer) == 20);
129 
130 typedef struct GEM5_PACKED
131 {
132  uint32_t priv : 1;
133  uint32_t reserved1 : 11;
134  uint32_t vmid : 4;
135  uint32_t reserved2 : 16;
137 static_assert(sizeof(sdmaIndirectBufferHeader) == 4);
138 
139 typedef struct GEM5_PACKED
140 {
141  uint64_t dest;
142  uint32_t data;
144 static_assert(sizeof(sdmaFence) == 12);
145 
146 typedef struct GEM5_PACKED
147 {
148  union
149  {
150  struct
151  {
152  uint32_t contextId : 3;
153  uint32_t rbRptr: 13;
154  uint32_t ibOffset : 12;
155  uint32_t reserved : 4;
156  };
157  uint32_t intrContext;
158  };
160 static_assert(sizeof(sdmaTrap) == 4);
161 
162 typedef struct GEM5_PACKED
163 {
164  union
165  {
166  struct
167  {
168  uint32_t reserved : 3;
169  uint32_t addrLo : 29;
170  uint32_t addrHi;
171  };
172  Addr addr;
173  };
175 static_assert(sizeof(sdmaSemaphore) == 8);
176 
177 typedef struct GEM5_PACKED
178 {
179  union
180  {
181  struct
182  {
183  uint32_t reserved : 3;
184  uint32_t addrLo : 29;
185  uint32_t addrHi;
186  };
187  Addr addr;
188  };
190 static_assert(sizeof(sdmaMemInc) == 8);
191 
192 typedef struct GEM5_PACKED
193 {
194  uint32_t regAddr : 18;
195  uint32_t reserved : 2;
196  uint32_t apertureId : 12;
197  uint32_t data;
199 static_assert(sizeof(sdmaSRBMWrite) == 8);
200 
201 typedef struct GEM5_PACKED
202 {
203  uint32_t reserved : 28;
204  uint32_t byteEnable : 4;
206 static_assert(sizeof(sdmaSRBMWriteHeader) == 4);
207 
208 typedef struct GEM5_PACKED
209 {
210  uint64_t address;
211  uint32_t ref;
212  uint32_t mask;
213  uint32_t pollInt : 16;
214  uint32_t retryCount : 12;
215  uint32_t reserved1 : 4;
217 static_assert(sizeof(sdmaPollRegMem) == 20);
218 
219 typedef struct GEM5_PACKED
220 {
221  uint32_t reserved : 26;
222  uint32_t op : 2; // Operation
223  uint32_t func : 3; // Comparison function
224  uint32_t mode : 1; // Mode: register or memory polling
226 static_assert(sizeof(sdmaPollRegMemHeader) == 4);
227 
228 typedef struct GEM5_PACKED
229 {
230  union
231  {
232  struct
233  {
234  uint32_t addrLo;
235  uint32_t addrHi;
236  };
237  Addr addr;
238  };
239  uint32_t reference;
240  union
241  {
242  struct
243  {
244  uint32_t execCount : 14;
245  uint32_t unused : 18;
246  };
247  uint32_t ordinal;
248  };
250 static_assert(sizeof(sdmaCondExec) == 16);
251 
252 typedef struct GEM5_PACKED
253 {
254  union
255  {
256  struct
257  {
258  uint32_t addrLo;
259  uint32_t addrHi;
260  };
261  Addr addr;
262  };
263  union
264  {
265  struct
266  {
267  uint32_t srcDataLo;
268  uint32_t srdDataHi;
269  };
270  uint64_t srcData;
271  };
272  union
273  {
274  struct
275  {
276  uint32_t cmpDataLo;
277  uint32_t cmpDataHi;
278  };
279  uint64_t cmpData;
280  };
281  uint32_t loopInt : 13;
282  uint32_t reserved : 19;
284 static_assert(sizeof(sdmaAtomic) == 28);
285 
286 typedef struct GEM5_PACKED
287 {
288  int unused2 : 16;
289  int loop : 1;
290  int unused1 : 8;
291  int opcode : 7;
293 static_assert(sizeof(sdmaAtomicHeader) == 4);
294 
295 constexpr unsigned int SDMA_ATOMIC_ADD64 = 47;
296 
297 typedef struct GEM5_PACKED
298 {
299  uint64_t dest;
300  uint64_t mask;
301  uint64_t initValue;
302  uint64_t increment;
303  uint32_t count: 19;
304  uint32_t reserved : 13;
306 static_assert(sizeof(sdmaPtePde) == 36);
307 
308 typedef struct GEM5_PACKED
309 {
310  union
311  {
312  struct
313  {
314  uint32_t initDataLo;
315  uint32_t initDataHi;
316  };
317  uint64_t initData;
318  };
320 static_assert(sizeof(sdmaTimestamp) == 8);
321 
322 typedef struct GEM5_PACKED
323 {
324  uint32_t execCount : 14;
325  uint32_t reserved : 18;
327 static_assert(sizeof(sdmaPredExec) == 4);
328 
329 typedef struct GEM5_PACKED
330 {
331  uint32_t opcode : 8;
332  uint32_t subOpcode : 8;
333  uint32_t device : 8;
334  uint32_t unused : 8;
336 static_assert(sizeof(sdmaPredExecHeader) == 4);
337 
338 typedef struct GEM5_PACKED
339 {
340  uint32_t contextId : 3;
341  uint32_t rbRptr: 13;
342  uint32_t ibOffset : 12;
343  uint32_t reserved : 4;
345 static_assert(sizeof(sdmaDummyTrap) == 4);
346 
347 typedef struct GEM5_PACKED
348 {
349  uint32_t byteStride;
350  uint32_t dmaCount;
351  union
352  {
353  struct
354  {
355  uint32_t destLo;
356  uint32_t destHi;
357  };
358  uint64_t dest;
359  };
360  uint32_t byteCount : 26;
362 static_assert(sizeof(sdmaDataFillMulti) == 20);
363 
364 typedef struct GEM5_PACKED
365 {
366  uint16_t format : 8;
367  uint16_t barrier : 1;
368  uint16_t acqFenceScope : 2;
369  uint16_t relFenceScope : 2;
370  uint16_t reserved : 3;
372 static_assert(sizeof(sdmaHeaderAgentDisp) == 2);
373 
374 typedef struct GEM5_PACKED
375 {
377  uint16_t res0;
378  uint32_t res1;
379  union
380  {
381  struct
382  {
383  uint32_t retLo;
384  uint32_t retHi;
385  };
387  };
388  uint32_t count : 22;
389  uint32_t res2 : 10;
390  uint32_t res3 : 16;
391  uint32_t swDest : 2;
392  uint32_t res4 : 6;
393  uint32_t swSrc : 2;
394  uint32_t unused : 6;
395  union
396  {
397  struct
398  {
399  uint32_t srcLo;
400  uint32_t srcHi;
401  };
403  };
404  union
405  {
406  struct
407  {
408  uint32_t destLo;
409  uint32_t destHi;
410  };
412  };
413  uint64_t res5;
414  uint64_t res6;
415  union
416  {
417  struct
418  {
419  uint32_t compSignalLo;
420  uint32_t compSignalHi;
421  };
423  };
425 static_assert(sizeof(sdmaAQLCopy) == 64);
426 
427 typedef struct GEM5_PACKED
428 {
430  uint16_t res0;
431  uint32_t res1;
437  uint64_t res2;
438  union
439  {
440  struct
441  {
442  uint32_t compSignalLo;
443  uint32_t compSignalHi;
444  };
446  };
448 static_assert(sizeof(sdmaAQLBarrierOr) == 64);
449 
450 } // namespace gem5
451 
452 #endif // __DEV_AMDGPU_SDMA_PACKETS_HH__
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
struct gem5::GEM5_PACKED sdmaFence
struct gem5::GEM5_PACKED sdmaDataFillMulti
struct gem5::GEM5_PACKED sdmaConstFill
struct gem5::GEM5_PACKED sdmaIndirectBufferHeader
struct gem5::GEM5_PACKED sdmaTimestamp
struct gem5::GEM5_PACKED sdmaAESCounter
struct gem5::GEM5_PACKED sdmaAtomic
struct gem5::GEM5_PACKED sdmaPredExecHeader
struct gem5::GEM5_PACKED sdmaAQLBarrierOr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
struct gem5::GEM5_PACKED sdmaPtePde
struct gem5::GEM5_PACKED sdmaPollRegMem
struct gem5::GEM5_PACKED sdmaMemInc
struct gem5::GEM5_PACKED sdmaPollRegMemHeader
struct gem5::GEM5_PACKED sdmaPredExec
struct gem5::GEM5_PACKED sdmaAESKey
constexpr unsigned int SDMA_ATOMIC_ADD64
struct gem5::GEM5_PACKED sdmaWrite
struct gem5::GEM5_PACKED sdmaAtomicHeader
struct gem5::GEM5_PACKED sdmaCopy
SDMA packets.
struct gem5::GEM5_PACKED sdmaIndirectBuffer
struct gem5::GEM5_PACKED sdmaTrap
struct gem5::GEM5_PACKED sdmaSRBMWrite
struct gem5::GEM5_PACKED sdmaAQLCopy
struct gem5::GEM5_PACKED sdmaAESOffset
struct gem5::GEM5_PACKED sdmaHeaderAgentDisp
struct gem5::GEM5_PACKED sdmaAESLoad
struct gem5::GEM5_PACKED sdmaSRBMWriteHeader
struct gem5::GEM5_PACKED sdmaDummyTrap
struct gem5::GEM5_PACKED sdmaSemaphore
struct gem5::GEM5_PACKED sdmaCondExec
PM4 packets.
Definition: pm4_defines.hh:78
sdmaHeaderAgentDisp header
uint32_t reserved1
Definition: pm4_defines.hh:97
uint16_t relFenceScope
uint32_t reserved2
Definition: pm4_defines.hh:99
uint16_t acqFenceScope

Generated on Wed Dec 21 2022 10:22:32 for gem5 by doxygen 1.9.1