xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/amd/amdkfd/kfd_dbgdev.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2014 Advanced Micro Devices, Inc.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Permission is hereby granted, free of charge, to any person obtaining a
5*4882a593Smuzhiyun  * copy of this software and associated documentation files (the "Software"),
6*4882a593Smuzhiyun  * to deal in the Software without restriction, including without limitation
7*4882a593Smuzhiyun  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*4882a593Smuzhiyun  * and/or sell copies of the Software, and to permit persons to whom the
9*4882a593Smuzhiyun  * Software is furnished to do so, subject to the following conditions:
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * The above copyright notice and this permission notice shall be included in
12*4882a593Smuzhiyun  * all copies or substantial portions of the Software.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*4882a593Smuzhiyun  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17*4882a593Smuzhiyun  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*4882a593Smuzhiyun  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*4882a593Smuzhiyun  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*4882a593Smuzhiyun  * OTHER DEALINGS IN THE SOFTWARE.
21*4882a593Smuzhiyun  */
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #ifndef KFD_DBGDEV_H_
24*4882a593Smuzhiyun #define KFD_DBGDEV_H_
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun enum {
27*4882a593Smuzhiyun 	SQ_CMD_VMID_OFFSET = 28,
28*4882a593Smuzhiyun 	ADDRESS_WATCH_CNTL_OFFSET = 24
29*4882a593Smuzhiyun };
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun enum {
32*4882a593Smuzhiyun 	PRIV_QUEUE_SYNC_TIME_MS = 200
33*4882a593Smuzhiyun };
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun /* CONTEXT reg space definition */
36*4882a593Smuzhiyun enum {
37*4882a593Smuzhiyun 	CONTEXT_REG_BASE = 0xA000,
38*4882a593Smuzhiyun 	CONTEXT_REG_END = 0xA400,
39*4882a593Smuzhiyun 	CONTEXT_REG_SIZE = CONTEXT_REG_END - CONTEXT_REG_BASE
40*4882a593Smuzhiyun };
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun /* USER CONFIG reg space definition */
43*4882a593Smuzhiyun enum {
44*4882a593Smuzhiyun 	USERCONFIG_REG_BASE = 0xC000,
45*4882a593Smuzhiyun 	USERCONFIG_REG_END = 0x10000,
46*4882a593Smuzhiyun 	USERCONFIG_REG_SIZE = USERCONFIG_REG_END - USERCONFIG_REG_BASE
47*4882a593Smuzhiyun };
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun /* CONFIG reg space definition */
50*4882a593Smuzhiyun enum {
51*4882a593Smuzhiyun 	AMD_CONFIG_REG_BASE = 0x2000,	/* in dwords */
52*4882a593Smuzhiyun 	AMD_CONFIG_REG_END = 0x2B00,
53*4882a593Smuzhiyun 	AMD_CONFIG_REG_SIZE = AMD_CONFIG_REG_END - AMD_CONFIG_REG_BASE
54*4882a593Smuzhiyun };
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun /* SH reg space definition */
57*4882a593Smuzhiyun enum {
58*4882a593Smuzhiyun 	SH_REG_BASE = 0x2C00,
59*4882a593Smuzhiyun 	SH_REG_END = 0x3000,
60*4882a593Smuzhiyun 	SH_REG_SIZE = SH_REG_END - SH_REG_BASE
61*4882a593Smuzhiyun };
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /* SQ_CMD definitions */
64*4882a593Smuzhiyun #define SQ_CMD						0x8DEC
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun enum SQ_IND_CMD_CMD {
67*4882a593Smuzhiyun 	SQ_IND_CMD_CMD_NULL = 0x00000000,
68*4882a593Smuzhiyun 	SQ_IND_CMD_CMD_HALT = 0x00000001,
69*4882a593Smuzhiyun 	SQ_IND_CMD_CMD_RESUME = 0x00000002,
70*4882a593Smuzhiyun 	SQ_IND_CMD_CMD_KILL = 0x00000003,
71*4882a593Smuzhiyun 	SQ_IND_CMD_CMD_DEBUG = 0x00000004,
72*4882a593Smuzhiyun 	SQ_IND_CMD_CMD_TRAP = 0x00000005,
73*4882a593Smuzhiyun };
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun enum SQ_IND_CMD_MODE {
76*4882a593Smuzhiyun 	SQ_IND_CMD_MODE_SINGLE = 0x00000000,
77*4882a593Smuzhiyun 	SQ_IND_CMD_MODE_BROADCAST = 0x00000001,
78*4882a593Smuzhiyun 	SQ_IND_CMD_MODE_BROADCAST_QUEUE = 0x00000002,
79*4882a593Smuzhiyun 	SQ_IND_CMD_MODE_BROADCAST_PIPE = 0x00000003,
80*4882a593Smuzhiyun 	SQ_IND_CMD_MODE_BROADCAST_ME = 0x00000004,
81*4882a593Smuzhiyun };
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun union SQ_IND_INDEX_BITS {
84*4882a593Smuzhiyun 	struct {
85*4882a593Smuzhiyun 		uint32_t wave_id:4;
86*4882a593Smuzhiyun 		uint32_t simd_id:2;
87*4882a593Smuzhiyun 		uint32_t thread_id:6;
88*4882a593Smuzhiyun 		 uint32_t:1;
89*4882a593Smuzhiyun 		uint32_t force_read:1;
90*4882a593Smuzhiyun 		uint32_t read_timeout:1;
91*4882a593Smuzhiyun 		uint32_t unindexed:1;
92*4882a593Smuzhiyun 		uint32_t index:16;
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun 	} bitfields, bits;
95*4882a593Smuzhiyun 	uint32_t u32All;
96*4882a593Smuzhiyun 	signed int i32All;
97*4882a593Smuzhiyun 	float f32All;
98*4882a593Smuzhiyun };
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun union SQ_IND_CMD_BITS {
101*4882a593Smuzhiyun 	struct {
102*4882a593Smuzhiyun 		uint32_t data:32;
103*4882a593Smuzhiyun 	} bitfields, bits;
104*4882a593Smuzhiyun 	uint32_t u32All;
105*4882a593Smuzhiyun 	signed int i32All;
106*4882a593Smuzhiyun 	float f32All;
107*4882a593Smuzhiyun };
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun union SQ_CMD_BITS {
110*4882a593Smuzhiyun 	struct {
111*4882a593Smuzhiyun 		uint32_t cmd:3;
112*4882a593Smuzhiyun 		 uint32_t:1;
113*4882a593Smuzhiyun 		uint32_t mode:3;
114*4882a593Smuzhiyun 		uint32_t check_vmid:1;
115*4882a593Smuzhiyun 		uint32_t trap_id:3;
116*4882a593Smuzhiyun 		 uint32_t:5;
117*4882a593Smuzhiyun 		uint32_t wave_id:4;
118*4882a593Smuzhiyun 		uint32_t simd_id:2;
119*4882a593Smuzhiyun 		 uint32_t:2;
120*4882a593Smuzhiyun 		uint32_t queue_id:3;
121*4882a593Smuzhiyun 		 uint32_t:1;
122*4882a593Smuzhiyun 		uint32_t vm_id:4;
123*4882a593Smuzhiyun 	} bitfields, bits;
124*4882a593Smuzhiyun 	uint32_t u32All;
125*4882a593Smuzhiyun 	signed int i32All;
126*4882a593Smuzhiyun 	float f32All;
127*4882a593Smuzhiyun };
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun union SQ_IND_DATA_BITS {
130*4882a593Smuzhiyun 	struct {
131*4882a593Smuzhiyun 		uint32_t data:32;
132*4882a593Smuzhiyun 	} bitfields, bits;
133*4882a593Smuzhiyun 	uint32_t u32All;
134*4882a593Smuzhiyun 	signed int i32All;
135*4882a593Smuzhiyun 	float f32All;
136*4882a593Smuzhiyun };
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun union GRBM_GFX_INDEX_BITS {
139*4882a593Smuzhiyun 	struct {
140*4882a593Smuzhiyun 		uint32_t instance_index:8;
141*4882a593Smuzhiyun 		uint32_t sh_index:8;
142*4882a593Smuzhiyun 		uint32_t se_index:8;
143*4882a593Smuzhiyun 		 uint32_t:5;
144*4882a593Smuzhiyun 		uint32_t sh_broadcast_writes:1;
145*4882a593Smuzhiyun 		uint32_t instance_broadcast_writes:1;
146*4882a593Smuzhiyun 		uint32_t se_broadcast_writes:1;
147*4882a593Smuzhiyun 	} bitfields, bits;
148*4882a593Smuzhiyun 	uint32_t u32All;
149*4882a593Smuzhiyun 	signed int i32All;
150*4882a593Smuzhiyun 	float f32All;
151*4882a593Smuzhiyun };
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun union TCP_WATCH_ADDR_H_BITS {
154*4882a593Smuzhiyun 	struct {
155*4882a593Smuzhiyun 		uint32_t addr:16;
156*4882a593Smuzhiyun 		 uint32_t:16;
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun 	} bitfields, bits;
159*4882a593Smuzhiyun 	uint32_t u32All;
160*4882a593Smuzhiyun 	signed int i32All;
161*4882a593Smuzhiyun 	float f32All;
162*4882a593Smuzhiyun };
163*4882a593Smuzhiyun 
164*4882a593Smuzhiyun union TCP_WATCH_ADDR_L_BITS {
165*4882a593Smuzhiyun 	struct {
166*4882a593Smuzhiyun 		uint32_t:6;
167*4882a593Smuzhiyun 		uint32_t addr:26;
168*4882a593Smuzhiyun 	} bitfields, bits;
169*4882a593Smuzhiyun 	uint32_t u32All;
170*4882a593Smuzhiyun 	signed int i32All;
171*4882a593Smuzhiyun 	float f32All;
172*4882a593Smuzhiyun };
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun enum {
175*4882a593Smuzhiyun 	QUEUESTATE__INVALID = 0, /* so by default we'll get invalid state */
176*4882a593Smuzhiyun 	QUEUESTATE__ACTIVE_COMPLETION_PENDING,
177*4882a593Smuzhiyun 	QUEUESTATE__ACTIVE
178*4882a593Smuzhiyun };
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun union ULARGE_INTEGER {
181*4882a593Smuzhiyun 	struct {
182*4882a593Smuzhiyun 		uint32_t low_part;
183*4882a593Smuzhiyun 		uint32_t high_part;
184*4882a593Smuzhiyun 	} u;
185*4882a593Smuzhiyun 	unsigned long long quad_part;
186*4882a593Smuzhiyun };
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun #define KFD_CIK_VMID_START_OFFSET (8)
190*4882a593Smuzhiyun #define KFD_CIK_VMID_END_OFFSET (KFD_CIK_VMID_START_OFFSET + (8))
191*4882a593Smuzhiyun 
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun void kfd_dbgdev_init(struct kfd_dbgdev *pdbgdev, struct kfd_dev *pdev,
194*4882a593Smuzhiyun 			enum DBGDEV_TYPE type);
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun union TCP_WATCH_CNTL_BITS {
197*4882a593Smuzhiyun 	struct {
198*4882a593Smuzhiyun 		uint32_t mask:24;
199*4882a593Smuzhiyun 		uint32_t vmid:4;
200*4882a593Smuzhiyun 		uint32_t atc:1;
201*4882a593Smuzhiyun 		uint32_t mode:2;
202*4882a593Smuzhiyun 		uint32_t valid:1;
203*4882a593Smuzhiyun 	} bitfields, bits;
204*4882a593Smuzhiyun 	uint32_t u32All;
205*4882a593Smuzhiyun 	signed int i32All;
206*4882a593Smuzhiyun 	float f32All;
207*4882a593Smuzhiyun };
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun enum {
210*4882a593Smuzhiyun 	ADDRESS_WATCH_REG_CNTL_ATC_BIT = 0x10000000UL,
211*4882a593Smuzhiyun 	ADDRESS_WATCH_REG_CNTL_DEFAULT_MASK = 0x00FFFFFF,
212*4882a593Smuzhiyun 	ADDRESS_WATCH_REG_ADDLOW_MASK_EXTENSION = 0x03000000,
213*4882a593Smuzhiyun 	/* extend the mask to 26 bits in order to match the low address field */
214*4882a593Smuzhiyun 	ADDRESS_WATCH_REG_ADDLOW_SHIFT = 6,
215*4882a593Smuzhiyun 	ADDRESS_WATCH_REG_ADDHIGH_MASK = 0xFFFF
216*4882a593Smuzhiyun };
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun enum {
219*4882a593Smuzhiyun 	MAX_TRAPID = 8,		/* 3 bits in the bitfield. */
220*4882a593Smuzhiyun 	MAX_WATCH_ADDRESSES = 4
221*4882a593Smuzhiyun };
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun enum {
224*4882a593Smuzhiyun 	ADDRESS_WATCH_REG_ADDR_HI = 0,
225*4882a593Smuzhiyun 	ADDRESS_WATCH_REG_ADDR_LO,
226*4882a593Smuzhiyun 	ADDRESS_WATCH_REG_CNTL,
227*4882a593Smuzhiyun 	ADDRESS_WATCH_REG_MAX
228*4882a593Smuzhiyun };
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun #endif	/* KFD_DBGDEV_H_ */
231