xref: /openbsd-src/sys/dev/pci/drm/amd/amdgpu/nvd.h (revision f005ef32267c16bdb134f0e9fa4477dbe07c263a)
1c349dbc7Sjsg /*
2c349dbc7Sjsg  * Copyright 2019 Advanced Micro Devices, Inc.
3c349dbc7Sjsg  *
4c349dbc7Sjsg  * Permission is hereby granted, free of charge, to any person obtaining a
5c349dbc7Sjsg  * copy of this software and associated documentation files (the "Software"),
6c349dbc7Sjsg  * to deal in the Software without restriction, including without limitation
7c349dbc7Sjsg  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8c349dbc7Sjsg  * and/or sell copies of the Software, and to permit persons to whom the
9c349dbc7Sjsg  * Software is furnished to do so, subject to the following conditions:
10c349dbc7Sjsg  *
11c349dbc7Sjsg  * The above copyright notice and this permission notice shall be included in
12c349dbc7Sjsg  * all copies or substantial portions of the Software.
13c349dbc7Sjsg  *
14c349dbc7Sjsg  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15c349dbc7Sjsg  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16c349dbc7Sjsg  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17c349dbc7Sjsg  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18c349dbc7Sjsg  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19c349dbc7Sjsg  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20c349dbc7Sjsg  * OTHER DEALINGS IN THE SOFTWARE.
21c349dbc7Sjsg  *
22c349dbc7Sjsg  */
23c349dbc7Sjsg 
24c349dbc7Sjsg #ifndef NVD_H
25c349dbc7Sjsg #define NVD_H
26c349dbc7Sjsg 
27c349dbc7Sjsg /**
28c349dbc7Sjsg  * Navi's PM4 definitions
29c349dbc7Sjsg  */
30c349dbc7Sjsg #define	PACKET_TYPE0	0
31c349dbc7Sjsg #define	PACKET_TYPE1	1
32c349dbc7Sjsg #define	PACKET_TYPE2	2
33c349dbc7Sjsg #define	PACKET_TYPE3	3
34c349dbc7Sjsg 
35c349dbc7Sjsg #define CP_PACKET_GET_TYPE(h) (((h) >> 30) & 3)
36c349dbc7Sjsg #define CP_PACKET_GET_COUNT(h) (((h) >> 16) & 0x3FFF)
37c349dbc7Sjsg #define CP_PACKET0_GET_REG(h) ((h) & 0xFFFF)
38c349dbc7Sjsg #define CP_PACKET3_GET_OPCODE(h) (((h) >> 8) & 0xFF)
39c349dbc7Sjsg #define PACKET0(reg, n)	((PACKET_TYPE0 << 30) |				\
40c349dbc7Sjsg 			 ((reg) & 0xFFFF) |			\
41c349dbc7Sjsg 			 ((n) & 0x3FFF) << 16)
42c349dbc7Sjsg #define CP_PACKET2			0x80000000
43c349dbc7Sjsg #define		PACKET2_PAD_SHIFT		0
44c349dbc7Sjsg #define		PACKET2_PAD_MASK		(0x3fffffff << 0)
45c349dbc7Sjsg 
46c349dbc7Sjsg #define PACKET2(v)	(CP_PACKET2 | REG_SET(PACKET2_PAD, (v)))
47c349dbc7Sjsg 
48c349dbc7Sjsg #define PACKET3(op, n)	((PACKET_TYPE3 << 30) |				\
49c349dbc7Sjsg 			 (((op) & 0xFF) << 8) |				\
50c349dbc7Sjsg 			 ((n) & 0x3FFF) << 16)
51c349dbc7Sjsg 
52c349dbc7Sjsg #define PACKET3_COMPUTE(op, n) (PACKET3(op, n) | 1 << 1)
53c349dbc7Sjsg 
54c349dbc7Sjsg /* Packet 3 types */
55c349dbc7Sjsg #define	PACKET3_NOP					0x10
56c349dbc7Sjsg #define	PACKET3_SET_BASE				0x11
57c349dbc7Sjsg #define		PACKET3_BASE_INDEX(x)                  ((x) << 0)
58c349dbc7Sjsg #define			CE_PARTITION_BASE		3
59c349dbc7Sjsg #define	PACKET3_CLEAR_STATE				0x12
60c349dbc7Sjsg #define	PACKET3_INDEX_BUFFER_SIZE			0x13
61c349dbc7Sjsg #define	PACKET3_DISPATCH_DIRECT				0x15
62c349dbc7Sjsg #define	PACKET3_DISPATCH_INDIRECT			0x16
63c349dbc7Sjsg #define	PACKET3_INDIRECT_BUFFER_END			0x17
64c349dbc7Sjsg #define	PACKET3_INDIRECT_BUFFER_CNST_END		0x19
65c349dbc7Sjsg #define	PACKET3_ATOMIC_GDS				0x1D
66c349dbc7Sjsg #define	PACKET3_ATOMIC_MEM				0x1E
67c349dbc7Sjsg #define	PACKET3_OCCLUSION_QUERY				0x1F
68c349dbc7Sjsg #define	PACKET3_SET_PREDICATION				0x20
69c349dbc7Sjsg #define	PACKET3_REG_RMW					0x21
70c349dbc7Sjsg #define	PACKET3_COND_EXEC				0x22
71c349dbc7Sjsg #define	PACKET3_PRED_EXEC				0x23
72c349dbc7Sjsg #define	PACKET3_DRAW_INDIRECT				0x24
73c349dbc7Sjsg #define	PACKET3_DRAW_INDEX_INDIRECT			0x25
74c349dbc7Sjsg #define	PACKET3_INDEX_BASE				0x26
75c349dbc7Sjsg #define	PACKET3_DRAW_INDEX_2				0x27
76c349dbc7Sjsg #define	PACKET3_CONTEXT_CONTROL				0x28
77c349dbc7Sjsg #define	PACKET3_INDEX_TYPE				0x2A
78c349dbc7Sjsg #define	PACKET3_DRAW_INDIRECT_MULTI			0x2C
79c349dbc7Sjsg #define	PACKET3_DRAW_INDEX_AUTO				0x2D
80c349dbc7Sjsg #define	PACKET3_NUM_INSTANCES				0x2F
81c349dbc7Sjsg #define	PACKET3_DRAW_INDEX_MULTI_AUTO			0x30
82c349dbc7Sjsg #define	PACKET3_INDIRECT_BUFFER_PRIV			0x32
83c349dbc7Sjsg #define	PACKET3_INDIRECT_BUFFER_CNST			0x33
84c349dbc7Sjsg #define	PACKET3_COND_INDIRECT_BUFFER_CNST		0x33
85c349dbc7Sjsg #define	PACKET3_STRMOUT_BUFFER_UPDATE			0x34
86c349dbc7Sjsg #define	PACKET3_DRAW_INDEX_OFFSET_2			0x35
87c349dbc7Sjsg #define	PACKET3_DRAW_PREAMBLE				0x36
88c349dbc7Sjsg #define	PACKET3_WRITE_DATA				0x37
89c349dbc7Sjsg #define		WRITE_DATA_DST_SEL(x)                   ((x) << 8)
90c349dbc7Sjsg 		/* 0 - register
91c349dbc7Sjsg 		 * 1 - memory (sync - via GRBM)
92c349dbc7Sjsg 		 * 2 - gl2
93c349dbc7Sjsg 		 * 3 - gds
94c349dbc7Sjsg 		 * 4 - reserved
95c349dbc7Sjsg 		 * 5 - memory (async - direct)
96c349dbc7Sjsg 		 */
97c349dbc7Sjsg #define		WR_ONE_ADDR                             (1 << 16)
98c349dbc7Sjsg #define		WR_CONFIRM                              (1 << 20)
99c349dbc7Sjsg #define		WRITE_DATA_CACHE_POLICY(x)              ((x) << 25)
100c349dbc7Sjsg 		/* 0 - LRU
101c349dbc7Sjsg 		 * 1 - Stream
102c349dbc7Sjsg 		 */
103c349dbc7Sjsg #define		WRITE_DATA_ENGINE_SEL(x)                ((x) << 30)
104c349dbc7Sjsg 		/* 0 - me
105c349dbc7Sjsg 		 * 1 - pfp
106c349dbc7Sjsg 		 * 2 - ce
107c349dbc7Sjsg 		 */
108c349dbc7Sjsg #define	PACKET3_DRAW_INDEX_INDIRECT_MULTI		0x38
109c349dbc7Sjsg #define	PACKET3_MEM_SEMAPHORE				0x39
110c349dbc7Sjsg #              define PACKET3_SEM_USE_MAILBOX       (0x1 << 16)
111c349dbc7Sjsg #              define PACKET3_SEM_SEL_SIGNAL_TYPE   (0x1 << 20) /* 0 = increment, 1 = write 1 */
112c349dbc7Sjsg #              define PACKET3_SEM_SEL_SIGNAL	    (0x6 << 29)
113c349dbc7Sjsg #              define PACKET3_SEM_SEL_WAIT	    (0x7 << 29)
114c349dbc7Sjsg #define	PACKET3_DRAW_INDEX_MULTI_INST			0x3A
115c349dbc7Sjsg #define	PACKET3_COPY_DW					0x3B
116c349dbc7Sjsg #define	PACKET3_WAIT_REG_MEM				0x3C
117c349dbc7Sjsg #define		WAIT_REG_MEM_FUNCTION(x)                ((x) << 0)
118c349dbc7Sjsg 		/* 0 - always
119c349dbc7Sjsg 		 * 1 - <
120c349dbc7Sjsg 		 * 2 - <=
121c349dbc7Sjsg 		 * 3 - ==
122c349dbc7Sjsg 		 * 4 - !=
123c349dbc7Sjsg 		 * 5 - >=
124c349dbc7Sjsg 		 * 6 - >
125c349dbc7Sjsg 		 */
126c349dbc7Sjsg #define		WAIT_REG_MEM_MEM_SPACE(x)               ((x) << 4)
127c349dbc7Sjsg 		/* 0 - reg
128c349dbc7Sjsg 		 * 1 - mem
129c349dbc7Sjsg 		 */
130c349dbc7Sjsg #define		WAIT_REG_MEM_OPERATION(x)               ((x) << 6)
131c349dbc7Sjsg 		/* 0 - wait_reg_mem
132c349dbc7Sjsg 		 * 1 - wr_wait_wr_reg
133c349dbc7Sjsg 		 */
134c349dbc7Sjsg #define		WAIT_REG_MEM_ENGINE(x)                  ((x) << 8)
135c349dbc7Sjsg 		/* 0 - me
136c349dbc7Sjsg 		 * 1 - pfp
137c349dbc7Sjsg 		 */
138c349dbc7Sjsg #define	PACKET3_INDIRECT_BUFFER				0x3F
139c349dbc7Sjsg #define		INDIRECT_BUFFER_VALID                   (1 << 23)
140c349dbc7Sjsg #define		INDIRECT_BUFFER_CACHE_POLICY(x)         ((x) << 28)
141c349dbc7Sjsg 		/* 0 - LRU
142c349dbc7Sjsg 		 * 1 - Stream
143c349dbc7Sjsg 		 * 2 - Bypass
144c349dbc7Sjsg 		 */
145c349dbc7Sjsg #define		INDIRECT_BUFFER_PRE_ENB(x)		((x) << 21)
146c349dbc7Sjsg #define		INDIRECT_BUFFER_PRE_RESUME(x)           ((x) << 30)
147c349dbc7Sjsg #define	PACKET3_COND_INDIRECT_BUFFER			0x3F
148c349dbc7Sjsg #define	PACKET3_COPY_DATA				0x40
149c349dbc7Sjsg #define	PACKET3_CP_DMA					0x41
150c349dbc7Sjsg #define	PACKET3_PFP_SYNC_ME				0x42
151c349dbc7Sjsg #define	PACKET3_SURFACE_SYNC				0x43
152c349dbc7Sjsg #define	PACKET3_ME_INITIALIZE				0x44
153c349dbc7Sjsg #define	PACKET3_COND_WRITE				0x45
154c349dbc7Sjsg #define	PACKET3_EVENT_WRITE				0x46
155c349dbc7Sjsg #define		EVENT_TYPE(x)                           ((x) << 0)
156c349dbc7Sjsg #define		EVENT_INDEX(x)                          ((x) << 8)
157c349dbc7Sjsg 		/* 0 - any non-TS event
158c349dbc7Sjsg 		 * 1 - ZPASS_DONE, PIXEL_PIPE_STAT_*
159c349dbc7Sjsg 		 * 2 - SAMPLE_PIPELINESTAT
160c349dbc7Sjsg 		 * 3 - SAMPLE_STREAMOUTSTAT*
161c349dbc7Sjsg 		 * 4 - *S_PARTIAL_FLUSH
162c349dbc7Sjsg 		 */
163c349dbc7Sjsg #define	PACKET3_EVENT_WRITE_EOP				0x47
164c349dbc7Sjsg #define	PACKET3_EVENT_WRITE_EOS				0x48
165c349dbc7Sjsg #define	PACKET3_RELEASE_MEM				0x49
166c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_EVENT_TYPE(x)	((x) << 0)
167c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_EVENT_INDEX(x)	((x) << 8)
168c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_GLM_WB		(1 << 12)
169c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_GLM_INV		(1 << 13)
170c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_GLV_INV		(1 << 14)
171c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_GL1_INV		(1 << 15)
172c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_GL2_US		(1 << 16)
173c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_GL2_RANGE	(1 << 17)
174c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_GL2_DISCARD	(1 << 19)
175c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_GL2_INV		(1 << 20)
176c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_GL2_WB		(1 << 21)
177c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_GCR_SEQ		(1 << 22)
178c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_CACHE_POLICY(x)	((x) << 25)
179c349dbc7Sjsg 		/* 0 - cache_policy__me_release_mem__lru
180c349dbc7Sjsg 		 * 1 - cache_policy__me_release_mem__stream
181c349dbc7Sjsg 		 * 2 - cache_policy__me_release_mem__noa
182c349dbc7Sjsg 		 * 3 - cache_policy__me_release_mem__bypass
183c349dbc7Sjsg 		 */
184c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_EXECUTE		(1 << 28)
185c349dbc7Sjsg 
186c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_DATA_SEL(x)		((x) << 29)
187c349dbc7Sjsg 		/* 0 - discard
188c349dbc7Sjsg 		 * 1 - send low 32bit data
189c349dbc7Sjsg 		 * 2 - send 64bit data
190c349dbc7Sjsg 		 * 3 - send 64bit GPU counter value
191c349dbc7Sjsg 		 * 4 - send 64bit sys counter value
192c349dbc7Sjsg 		 */
193c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_INT_SEL(x)		((x) << 24)
194c349dbc7Sjsg 		/* 0 - none
195c349dbc7Sjsg 		 * 1 - interrupt only (DATA_SEL = 0)
196c349dbc7Sjsg 		 * 2 - interrupt when data write is confirmed
197c349dbc7Sjsg 		 */
198c349dbc7Sjsg #define		PACKET3_RELEASE_MEM_DST_SEL(x)		((x) << 16)
199c349dbc7Sjsg 		/* 0 - MC
200c349dbc7Sjsg 		 * 1 - TC/L2
201c349dbc7Sjsg 		 */
202c349dbc7Sjsg 
203c349dbc7Sjsg 
204c349dbc7Sjsg 
205c349dbc7Sjsg #define	PACKET3_PREAMBLE_CNTL				0x4A
206c349dbc7Sjsg #              define PACKET3_PREAMBLE_BEGIN_CLEAR_STATE     (2 << 28)
207c349dbc7Sjsg #              define PACKET3_PREAMBLE_END_CLEAR_STATE       (3 << 28)
208c349dbc7Sjsg #define	PACKET3_DMA_DATA				0x50
209c349dbc7Sjsg /* 1. header
210c349dbc7Sjsg  * 2. CONTROL
211c349dbc7Sjsg  * 3. SRC_ADDR_LO or DATA [31:0]
212c349dbc7Sjsg  * 4. SRC_ADDR_HI [31:0]
213c349dbc7Sjsg  * 5. DST_ADDR_LO [31:0]
214c349dbc7Sjsg  * 6. DST_ADDR_HI [7:0]
215c349dbc7Sjsg  * 7. COMMAND [31:26] | BYTE_COUNT [25:0]
216c349dbc7Sjsg  */
217c349dbc7Sjsg /* CONTROL */
218c349dbc7Sjsg #              define PACKET3_DMA_DATA_ENGINE(x)     ((x) << 0)
219c349dbc7Sjsg 		/* 0 - ME
220c349dbc7Sjsg 		 * 1 - PFP
221c349dbc7Sjsg 		 */
222c349dbc7Sjsg #              define PACKET3_DMA_DATA_SRC_CACHE_POLICY(x) ((x) << 13)
223c349dbc7Sjsg 		/* 0 - LRU
224c349dbc7Sjsg 		 * 1 - Stream
225c349dbc7Sjsg 		 */
226c349dbc7Sjsg #              define PACKET3_DMA_DATA_DST_SEL(x)  ((x) << 20)
227c349dbc7Sjsg 		/* 0 - DST_ADDR using DAS
228c349dbc7Sjsg 		 * 1 - GDS
229c349dbc7Sjsg 		 * 3 - DST_ADDR using L2
230c349dbc7Sjsg 		 */
231c349dbc7Sjsg #              define PACKET3_DMA_DATA_DST_CACHE_POLICY(x) ((x) << 25)
232c349dbc7Sjsg 		/* 0 - LRU
233c349dbc7Sjsg 		 * 1 - Stream
234c349dbc7Sjsg 		 */
235c349dbc7Sjsg #              define PACKET3_DMA_DATA_SRC_SEL(x)  ((x) << 29)
236c349dbc7Sjsg 		/* 0 - SRC_ADDR using SAS
237c349dbc7Sjsg 		 * 1 - GDS
238c349dbc7Sjsg 		 * 2 - DATA
239c349dbc7Sjsg 		 * 3 - SRC_ADDR using L2
240c349dbc7Sjsg 		 */
241c349dbc7Sjsg #              define PACKET3_DMA_DATA_CP_SYNC     (1 << 31)
242c349dbc7Sjsg /* COMMAND */
243c349dbc7Sjsg #              define PACKET3_DMA_DATA_CMD_SAS     (1 << 26)
244c349dbc7Sjsg 		/* 0 - memory
245c349dbc7Sjsg 		 * 1 - register
246c349dbc7Sjsg 		 */
247c349dbc7Sjsg #              define PACKET3_DMA_DATA_CMD_DAS     (1 << 27)
248c349dbc7Sjsg 		/* 0 - memory
249c349dbc7Sjsg 		 * 1 - register
250c349dbc7Sjsg 		 */
251c349dbc7Sjsg #              define PACKET3_DMA_DATA_CMD_SAIC    (1 << 28)
252c349dbc7Sjsg #              define PACKET3_DMA_DATA_CMD_DAIC    (1 << 29)
253c349dbc7Sjsg #              define PACKET3_DMA_DATA_CMD_RAW_WAIT  (1 << 30)
254c349dbc7Sjsg #define	PACKET3_CONTEXT_REG_RMW				0x51
255c349dbc7Sjsg #define	PACKET3_GFX_CNTX_UPDATE				0x52
256c349dbc7Sjsg #define	PACKET3_BLK_CNTX_UPDATE				0x53
257c349dbc7Sjsg #define	PACKET3_INCR_UPDT_STATE				0x55
258c349dbc7Sjsg #define	PACKET3_ACQUIRE_MEM				0x58
259ad8b1aafSjsg /* 1.  HEADER
260ad8b1aafSjsg  * 2.  COHER_CNTL [30:0]
261ad8b1aafSjsg  * 2.1 ENGINE_SEL [31:31]
262ad8b1aafSjsg  * 2.  COHER_SIZE [31:0]
263ad8b1aafSjsg  * 3.  COHER_SIZE_HI [7:0]
264ad8b1aafSjsg  * 4.  COHER_BASE_LO [31:0]
265ad8b1aafSjsg  * 5.  COHER_BASE_HI [23:0]
266ad8b1aafSjsg  * 7.  POLL_INTERVAL [15:0]
267ad8b1aafSjsg  * 8.  GCR_CNTL [18:0]
268ad8b1aafSjsg  */
269ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GLI_INV(x) ((x) << 0)
270ad8b1aafSjsg 		/*
271ad8b1aafSjsg 		 * 0:NOP
272ad8b1aafSjsg 		 * 1:ALL
273ad8b1aafSjsg 		 * 2:RANGE
274ad8b1aafSjsg 		 * 3:FIRST_LAST
275ad8b1aafSjsg 		 */
276ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GL1_RANGE(x) ((x) << 2)
277ad8b1aafSjsg 		/*
278ad8b1aafSjsg 		 * 0:ALL
279ad8b1aafSjsg 		 * 1:reserved
280ad8b1aafSjsg 		 * 2:RANGE
281ad8b1aafSjsg 		 * 3:FIRST_LAST
282ad8b1aafSjsg 		 */
283ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GLM_WB(x) ((x) << 4)
284ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GLM_INV(x) ((x) << 5)
285ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GLK_WB(x) ((x) << 6)
286ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GLK_INV(x) ((x) << 7)
287ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GLV_INV(x) ((x) << 8)
288ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GL1_INV(x) ((x) << 9)
289ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_US(x) ((x) << 10)
290ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_RANGE(x) ((x) << 11)
291ad8b1aafSjsg 		/*
292ad8b1aafSjsg 		 * 0:ALL
293ad8b1aafSjsg 		 * 1:VOL
294ad8b1aafSjsg 		 * 2:RANGE
295ad8b1aafSjsg 		 * 3:FIRST_LAST
296ad8b1aafSjsg 		 */
297ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_DISCARD(x)  ((x) << 13)
298ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_INV(x) ((x) << 14)
299ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_WB(x) ((x) << 15)
300ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_CNTL_SEQ(x) ((x) << 16)
301ad8b1aafSjsg 		/*
302ad8b1aafSjsg 		 * 0: PARALLEL
303ad8b1aafSjsg 		 * 1: FORWARD
304ad8b1aafSjsg 		 * 2: REVERSE
305ad8b1aafSjsg 		 */
306ad8b1aafSjsg #define 	PACKET3_ACQUIRE_MEM_GCR_RANGE_IS_PA  (1 << 18)
307c349dbc7Sjsg #define	PACKET3_REWIND					0x59
308c349dbc7Sjsg #define	PACKET3_INTERRUPT				0x5A
309c349dbc7Sjsg #define	PACKET3_GEN_PDEPTE				0x5B
310c349dbc7Sjsg #define	PACKET3_INDIRECT_BUFFER_PASID			0x5C
311c349dbc7Sjsg #define	PACKET3_PRIME_UTCL2				0x5D
312c349dbc7Sjsg #define	PACKET3_LOAD_UCONFIG_REG			0x5E
313c349dbc7Sjsg #define	PACKET3_LOAD_SH_REG				0x5F
314c349dbc7Sjsg #define	PACKET3_LOAD_CONFIG_REG				0x60
315c349dbc7Sjsg #define	PACKET3_LOAD_CONTEXT_REG			0x61
316c349dbc7Sjsg #define	PACKET3_LOAD_COMPUTE_STATE			0x62
317c349dbc7Sjsg #define	PACKET3_LOAD_SH_REG_INDEX			0x63
318c349dbc7Sjsg #define	PACKET3_SET_CONFIG_REG				0x68
319c349dbc7Sjsg #define		PACKET3_SET_CONFIG_REG_START			0x00002000
320c349dbc7Sjsg #define		PACKET3_SET_CONFIG_REG_END			0x00002c00
321c349dbc7Sjsg #define	PACKET3_SET_CONTEXT_REG				0x69
322c349dbc7Sjsg #define		PACKET3_SET_CONTEXT_REG_START			0x0000a000
323c349dbc7Sjsg #define		PACKET3_SET_CONTEXT_REG_END			0x0000a400
324c349dbc7Sjsg #define	PACKET3_SET_CONTEXT_REG_INDEX			0x6A
325c349dbc7Sjsg #define	PACKET3_SET_VGPR_REG_DI_MULTI			0x71
326c349dbc7Sjsg #define	PACKET3_SET_SH_REG_DI				0x72
327c349dbc7Sjsg #define	PACKET3_SET_CONTEXT_REG_INDIRECT		0x73
328c349dbc7Sjsg #define	PACKET3_SET_SH_REG_DI_MULTI			0x74
329c349dbc7Sjsg #define	PACKET3_GFX_PIPE_LOCK				0x75
330c349dbc7Sjsg #define	PACKET3_SET_SH_REG				0x76
331c349dbc7Sjsg #define		PACKET3_SET_SH_REG_START			0x00002c00
332c349dbc7Sjsg #define		PACKET3_SET_SH_REG_END				0x00003000
333c349dbc7Sjsg #define	PACKET3_SET_SH_REG_OFFSET			0x77
334c349dbc7Sjsg #define	PACKET3_SET_QUEUE_REG				0x78
335c349dbc7Sjsg #define	PACKET3_SET_UCONFIG_REG				0x79
336c349dbc7Sjsg #define		PACKET3_SET_UCONFIG_REG_START			0x0000c000
337c349dbc7Sjsg #define		PACKET3_SET_UCONFIG_REG_END			0x0000c400
338c349dbc7Sjsg #define	PACKET3_SET_UCONFIG_REG_INDEX			0x7A
339c349dbc7Sjsg #define	PACKET3_FORWARD_HEADER				0x7C
340c349dbc7Sjsg #define	PACKET3_SCRATCH_RAM_WRITE			0x7D
341c349dbc7Sjsg #define	PACKET3_SCRATCH_RAM_READ			0x7E
342c349dbc7Sjsg #define	PACKET3_LOAD_CONST_RAM				0x80
343c349dbc7Sjsg #define	PACKET3_WRITE_CONST_RAM				0x81
344c349dbc7Sjsg #define	PACKET3_DUMP_CONST_RAM				0x83
345c349dbc7Sjsg #define	PACKET3_INCREMENT_CE_COUNTER			0x84
346c349dbc7Sjsg #define	PACKET3_INCREMENT_DE_COUNTER			0x85
347c349dbc7Sjsg #define	PACKET3_WAIT_ON_CE_COUNTER			0x86
348c349dbc7Sjsg #define	PACKET3_WAIT_ON_DE_COUNTER_DIFF			0x88
349c349dbc7Sjsg #define	PACKET3_SWITCH_BUFFER				0x8B
350c349dbc7Sjsg #define	PACKET3_DISPATCH_DRAW_PREAMBLE			0x8C
351c349dbc7Sjsg #define	PACKET3_DISPATCH_DRAW_PREAMBLE_ACE		0x8C
352c349dbc7Sjsg #define	PACKET3_DISPATCH_DRAW				0x8D
353c349dbc7Sjsg #define	PACKET3_DISPATCH_DRAW_ACE			0x8D
354c349dbc7Sjsg #define	PACKET3_GET_LOD_STATS				0x8E
355c349dbc7Sjsg #define	PACKET3_DRAW_MULTI_PREAMBLE			0x8F
356c349dbc7Sjsg #define	PACKET3_FRAME_CONTROL				0x90
357ad8b1aafSjsg #			define FRAME_TMZ	(1 << 0)
358c349dbc7Sjsg #			define FRAME_CMD(x) ((x) << 28)
359c349dbc7Sjsg 			/*
360c349dbc7Sjsg 			 * x=0: tmz_begin
361c349dbc7Sjsg 			 * x=1: tmz_end
362c349dbc7Sjsg 			 */
363c349dbc7Sjsg #define	PACKET3_INDEX_ATTRIBUTES_INDIRECT		0x91
364c349dbc7Sjsg #define	PACKET3_WAIT_REG_MEM64				0x93
365c349dbc7Sjsg #define	PACKET3_COND_PREEMPT				0x94
366c349dbc7Sjsg #define	PACKET3_HDP_FLUSH				0x95
367c349dbc7Sjsg #define	PACKET3_COPY_DATA_RB				0x96
368c349dbc7Sjsg #define	PACKET3_INVALIDATE_TLBS				0x98
369c349dbc7Sjsg #              define PACKET3_INVALIDATE_TLBS_DST_SEL(x)     ((x) << 0)
370c349dbc7Sjsg #              define PACKET3_INVALIDATE_TLBS_ALL_HUB(x)     ((x) << 4)
371c349dbc7Sjsg #              define PACKET3_INVALIDATE_TLBS_PASID(x)       ((x) << 5)
372c349dbc7Sjsg #define	PACKET3_AQL_PACKET				0x99
373c349dbc7Sjsg #define	PACKET3_DMA_DATA_FILL_MULTI			0x9A
374c349dbc7Sjsg #define	PACKET3_SET_SH_REG_INDEX			0x9B
375c349dbc7Sjsg #define	PACKET3_DRAW_INDIRECT_COUNT_MULTI		0x9C
376c349dbc7Sjsg #define	PACKET3_DRAW_INDEX_INDIRECT_COUNT_MULTI		0x9D
377c349dbc7Sjsg #define	PACKET3_DUMP_CONST_RAM_OFFSET			0x9E
378c349dbc7Sjsg #define	PACKET3_LOAD_CONTEXT_REG_INDEX			0x9F
379c349dbc7Sjsg #define	PACKET3_SET_RESOURCES				0xA0
380c349dbc7Sjsg /* 1. header
381c349dbc7Sjsg  * 2. CONTROL
382c349dbc7Sjsg  * 3. QUEUE_MASK_LO [31:0]
383c349dbc7Sjsg  * 4. QUEUE_MASK_HI [31:0]
384c349dbc7Sjsg  * 5. GWS_MASK_LO [31:0]
385c349dbc7Sjsg  * 6. GWS_MASK_HI [31:0]
386c349dbc7Sjsg  * 7. OAC_MASK [15:0]
387c349dbc7Sjsg  * 8. GDS_HEAP_SIZE [16:11] | GDS_HEAP_BASE [5:0]
388c349dbc7Sjsg  */
389c349dbc7Sjsg #              define PACKET3_SET_RESOURCES_VMID_MASK(x)     ((x) << 0)
390c349dbc7Sjsg #              define PACKET3_SET_RESOURCES_UNMAP_LATENTY(x) ((x) << 16)
391c349dbc7Sjsg #              define PACKET3_SET_RESOURCES_QUEUE_TYPE(x)    ((x) << 29)
392c349dbc7Sjsg #define PACKET3_MAP_PROCESS				0xA1
393c349dbc7Sjsg #define PACKET3_MAP_QUEUES				0xA2
394c349dbc7Sjsg /* 1. header
395c349dbc7Sjsg  * 2. CONTROL
396c349dbc7Sjsg  * 3. CONTROL2
397c349dbc7Sjsg  * 4. MQD_ADDR_LO [31:0]
398c349dbc7Sjsg  * 5. MQD_ADDR_HI [31:0]
399c349dbc7Sjsg  * 6. WPTR_ADDR_LO [31:0]
400c349dbc7Sjsg  * 7. WPTR_ADDR_HI [31:0]
401c349dbc7Sjsg  */
402c349dbc7Sjsg /* CONTROL */
403c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_QUEUE_SEL(x)       ((x) << 4)
404c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_VMID(x)            ((x) << 8)
405c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_QUEUE(x)           ((x) << 13)
406c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_PIPE(x)            ((x) << 16)
407c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_ME(x)              ((x) << 18)
408c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_QUEUE_TYPE(x)      ((x) << 21)
409c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_ALLOC_FORMAT(x)    ((x) << 24)
410c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_ENGINE_SEL(x)      ((x) << 26)
411c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_NUM_QUEUES(x)      ((x) << 29)
412c349dbc7Sjsg /* CONTROL2 */
413c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_CHECK_DISABLE(x)   ((x) << 1)
414c349dbc7Sjsg #              define PACKET3_MAP_QUEUES_DOORBELL_OFFSET(x) ((x) << 2)
415c349dbc7Sjsg #define	PACKET3_UNMAP_QUEUES				0xA3
416c349dbc7Sjsg /* 1. header
417c349dbc7Sjsg  * 2. CONTROL
418c349dbc7Sjsg  * 3. CONTROL2
419c349dbc7Sjsg  * 4. CONTROL3
420c349dbc7Sjsg  * 5. CONTROL4
421c349dbc7Sjsg  * 6. CONTROL5
422c349dbc7Sjsg  */
423c349dbc7Sjsg /* CONTROL */
424c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_ACTION(x)           ((x) << 0)
425c349dbc7Sjsg 		/* 0 - PREEMPT_QUEUES
426c349dbc7Sjsg 		 * 1 - RESET_QUEUES
427c349dbc7Sjsg 		 * 2 - DISABLE_PROCESS_QUEUES
428c349dbc7Sjsg 		 * 3 - PREEMPT_QUEUES_NO_UNMAP
429c349dbc7Sjsg 		 */
430c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_QUEUE_SEL(x)        ((x) << 4)
431c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_ENGINE_SEL(x)       ((x) << 26)
432c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_NUM_QUEUES(x)       ((x) << 29)
433c349dbc7Sjsg /* CONTROL2a */
434c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_PASID(x)            ((x) << 0)
435c349dbc7Sjsg /* CONTROL2b */
436c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_DOORBELL_OFFSET0(x) ((x) << 2)
437c349dbc7Sjsg /* CONTROL3a */
438c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_DOORBELL_OFFSET1(x) ((x) << 2)
439c349dbc7Sjsg /* CONTROL3b */
440c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_RB_WPTR(x)          ((x) << 0)
441c349dbc7Sjsg /* CONTROL4 */
442c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_DOORBELL_OFFSET2(x) ((x) << 2)
443c349dbc7Sjsg /* CONTROL5 */
444c349dbc7Sjsg #              define PACKET3_UNMAP_QUEUES_DOORBELL_OFFSET3(x) ((x) << 2)
445c349dbc7Sjsg #define	PACKET3_QUERY_STATUS				0xA4
446c349dbc7Sjsg /* 1. header
447c349dbc7Sjsg  * 2. CONTROL
448c349dbc7Sjsg  * 3. CONTROL2
449c349dbc7Sjsg  * 4. ADDR_LO [31:0]
450c349dbc7Sjsg  * 5. ADDR_HI [31:0]
451c349dbc7Sjsg  * 6. DATA_LO [31:0]
452c349dbc7Sjsg  * 7. DATA_HI [31:0]
453c349dbc7Sjsg  */
454c349dbc7Sjsg /* CONTROL */
455c349dbc7Sjsg #              define PACKET3_QUERY_STATUS_CONTEXT_ID(x)       ((x) << 0)
456c349dbc7Sjsg #              define PACKET3_QUERY_STATUS_INTERRUPT_SEL(x)    ((x) << 28)
457c349dbc7Sjsg #              define PACKET3_QUERY_STATUS_COMMAND(x)          ((x) << 30)
458c349dbc7Sjsg /* CONTROL2a */
459c349dbc7Sjsg #              define PACKET3_QUERY_STATUS_PASID(x)            ((x) << 0)
460c349dbc7Sjsg /* CONTROL2b */
461c349dbc7Sjsg #              define PACKET3_QUERY_STATUS_DOORBELL_OFFSET(x)  ((x) << 2)
462c349dbc7Sjsg #              define PACKET3_QUERY_STATUS_ENG_SEL(x)          ((x) << 25)
463c349dbc7Sjsg #define	PACKET3_RUN_LIST				0xA5
464c349dbc7Sjsg #define	PACKET3_MAP_PROCESS_VM				0xA6
465*f005ef32Sjsg /* GFX11 */
466*f005ef32Sjsg #define	PACKET3_SET_Q_PREEMPTION_MODE			0xF0
467*f005ef32Sjsg #              define PACKET3_SET_Q_PREEMPTION_MODE_IB_VMID(x)  ((x) << 0)
468*f005ef32Sjsg #              define PACKET3_SET_Q_PREEMPTION_MODE_INIT_SHADOW_MEM    (1 << 0)
469c349dbc7Sjsg 
470c349dbc7Sjsg #endif
471