xref: /openbmc/linux/drivers/gpu/drm/amd/amdkfd/cik_regs.h (revision 4f3db074)
1 /*
2  * Copyright 2014 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  */
22 
23 #ifndef CIK_REGS_H
24 #define CIK_REGS_H
25 
26 #define IH_VMID_0_LUT					0x3D40u
27 
28 #define BIF_DOORBELL_CNTL				0x530Cu
29 
30 #define	SRBM_GFX_CNTL					0xE44
31 #define	PIPEID(x)					((x) << 0)
32 #define	MEID(x)						((x) << 2)
33 #define	VMID(x)						((x) << 4)
34 #define	QUEUEID(x)					((x) << 8)
35 
36 #define	SQ_CONFIG					0x8C00
37 
38 #define	SH_MEM_BASES					0x8C28
39 /* if PTR32, these are the bases for scratch and lds */
40 #define	PRIVATE_BASE(x)					((x) << 0) /* scratch */
41 #define	SHARED_BASE(x)					((x) << 16) /* LDS */
42 #define	SH_MEM_APE1_BASE				0x8C2C
43 /* if PTR32, this is the base location of GPUVM */
44 #define	SH_MEM_APE1_LIMIT				0x8C30
45 /* if PTR32, this is the upper limit of GPUVM */
46 #define	SH_MEM_CONFIG					0x8C34
47 #define	PTR32						(1 << 0)
48 #define PRIVATE_ATC					(1 << 1)
49 #define	ALIGNMENT_MODE(x)				((x) << 2)
50 #define	SH_MEM_ALIGNMENT_MODE_DWORD			0
51 #define	SH_MEM_ALIGNMENT_MODE_DWORD_STRICT		1
52 #define	SH_MEM_ALIGNMENT_MODE_STRICT			2
53 #define	SH_MEM_ALIGNMENT_MODE_UNALIGNED			3
54 #define	DEFAULT_MTYPE(x)				((x) << 4)
55 #define	APE1_MTYPE(x)					((x) << 7)
56 
57 /* valid for both DEFAULT_MTYPE and APE1_MTYPE */
58 #define	MTYPE_CACHED					0
59 #define	MTYPE_NONCACHED					3
60 
61 
62 #define SH_STATIC_MEM_CONFIG				0x9604u
63 
64 #define	TC_CFG_L1_LOAD_POLICY0				0xAC68
65 #define	TC_CFG_L1_LOAD_POLICY1				0xAC6C
66 #define	TC_CFG_L1_STORE_POLICY				0xAC70
67 #define	TC_CFG_L2_LOAD_POLICY0				0xAC74
68 #define	TC_CFG_L2_LOAD_POLICY1				0xAC78
69 #define	TC_CFG_L2_STORE_POLICY0				0xAC7C
70 #define	TC_CFG_L2_STORE_POLICY1				0xAC80
71 #define	TC_CFG_L2_ATOMIC_POLICY				0xAC84
72 #define	TC_CFG_L1_VOLATILE				0xAC88
73 #define	TC_CFG_L2_VOLATILE				0xAC8C
74 
75 #define CP_PQ_WPTR_POLL_CNTL				0xC20C
76 #define	WPTR_POLL_EN					(1 << 31)
77 
78 #define CPC_INT_CNTL					0xC2D0
79 #define CP_ME1_PIPE0_INT_CNTL				0xC214
80 #define CP_ME1_PIPE1_INT_CNTL				0xC218
81 #define CP_ME1_PIPE2_INT_CNTL				0xC21C
82 #define CP_ME1_PIPE3_INT_CNTL				0xC220
83 #define CP_ME2_PIPE0_INT_CNTL				0xC224
84 #define CP_ME2_PIPE1_INT_CNTL				0xC228
85 #define CP_ME2_PIPE2_INT_CNTL				0xC22C
86 #define CP_ME2_PIPE3_INT_CNTL				0xC230
87 #define DEQUEUE_REQUEST_INT_ENABLE			(1 << 13)
88 #define WRM_POLL_TIMEOUT_INT_ENABLE			(1 << 17)
89 #define PRIV_REG_INT_ENABLE				(1 << 23)
90 #define TIME_STAMP_INT_ENABLE				(1 << 26)
91 #define GENERIC2_INT_ENABLE				(1 << 29)
92 #define GENERIC1_INT_ENABLE				(1 << 30)
93 #define GENERIC0_INT_ENABLE				(1 << 31)
94 #define CP_ME1_PIPE0_INT_STATUS				0xC214
95 #define CP_ME1_PIPE1_INT_STATUS				0xC218
96 #define CP_ME1_PIPE2_INT_STATUS				0xC21C
97 #define CP_ME1_PIPE3_INT_STATUS				0xC220
98 #define CP_ME2_PIPE0_INT_STATUS				0xC224
99 #define CP_ME2_PIPE1_INT_STATUS				0xC228
100 #define CP_ME2_PIPE2_INT_STATUS				0xC22C
101 #define CP_ME2_PIPE3_INT_STATUS				0xC230
102 #define DEQUEUE_REQUEST_INT_STATUS			(1 << 13)
103 #define WRM_POLL_TIMEOUT_INT_STATUS			(1 << 17)
104 #define PRIV_REG_INT_STATUS				(1 << 23)
105 #define TIME_STAMP_INT_STATUS				(1 << 26)
106 #define GENERIC2_INT_STATUS				(1 << 29)
107 #define GENERIC1_INT_STATUS				(1 << 30)
108 #define GENERIC0_INT_STATUS				(1 << 31)
109 
110 #define CP_HPD_EOP_BASE_ADDR				0xC904
111 #define CP_HPD_EOP_BASE_ADDR_HI				0xC908
112 #define CP_HPD_EOP_VMID					0xC90C
113 #define CP_HPD_EOP_CONTROL				0xC910
114 #define	EOP_SIZE(x)					((x) << 0)
115 #define	EOP_SIZE_MASK					(0x3f << 0)
116 #define CP_MQD_BASE_ADDR				0xC914
117 #define CP_MQD_BASE_ADDR_HI				0xC918
118 #define CP_HQD_ACTIVE					0xC91C
119 #define CP_HQD_VMID					0xC920
120 
121 #define CP_HQD_PERSISTENT_STATE				0xC924u
122 #define	DEFAULT_CP_HQD_PERSISTENT_STATE			(0x33U << 8)
123 #define	PRELOAD_REQ					(1 << 0)
124 
125 #define CP_HQD_PIPE_PRIORITY				0xC928u
126 #define CP_HQD_QUEUE_PRIORITY				0xC92Cu
127 #define CP_HQD_QUANTUM					0xC930u
128 #define	QUANTUM_EN					1U
129 #define	QUANTUM_SCALE_1MS				(1U << 4)
130 #define	QUANTUM_DURATION(x)				((x) << 8)
131 
132 #define CP_HQD_PQ_BASE					0xC934
133 #define CP_HQD_PQ_BASE_HI				0xC938
134 #define CP_HQD_PQ_RPTR					0xC93C
135 #define CP_HQD_PQ_RPTR_REPORT_ADDR			0xC940
136 #define CP_HQD_PQ_RPTR_REPORT_ADDR_HI			0xC944
137 #define CP_HQD_PQ_WPTR_POLL_ADDR			0xC948
138 #define CP_HQD_PQ_WPTR_POLL_ADDR_HI			0xC94C
139 #define CP_HQD_PQ_DOORBELL_CONTROL			0xC950
140 #define	DOORBELL_OFFSET(x)				((x) << 2)
141 #define	DOORBELL_OFFSET_MASK				(0x1fffff << 2)
142 #define	DOORBELL_SOURCE					(1 << 28)
143 #define	DOORBELL_SCHD_HIT				(1 << 29)
144 #define	DOORBELL_EN					(1 << 30)
145 #define	DOORBELL_HIT					(1 << 31)
146 #define CP_HQD_PQ_WPTR					0xC954
147 #define CP_HQD_PQ_CONTROL				0xC958
148 #define	QUEUE_SIZE(x)					((x) << 0)
149 #define	QUEUE_SIZE_MASK					(0x3f << 0)
150 #define	RPTR_BLOCK_SIZE(x)				((x) << 8)
151 #define	RPTR_BLOCK_SIZE_MASK				(0x3f << 8)
152 #define	MIN_AVAIL_SIZE(x)				((x) << 20)
153 #define	PQ_ATC_EN					(1 << 23)
154 #define	PQ_VOLATILE					(1 << 26)
155 #define	NO_UPDATE_RPTR					(1 << 27)
156 #define	UNORD_DISPATCH					(1 << 28)
157 #define	ROQ_PQ_IB_FLIP					(1 << 29)
158 #define	PRIV_STATE					(1 << 30)
159 #define	KMD_QUEUE					(1 << 31)
160 
161 #define	DEFAULT_RPTR_BLOCK_SIZE				RPTR_BLOCK_SIZE(5)
162 #define	DEFAULT_MIN_AVAIL_SIZE				MIN_AVAIL_SIZE(3)
163 
164 #define CP_HQD_IB_BASE_ADDR				0xC95Cu
165 #define CP_HQD_IB_BASE_ADDR_HI				0xC960u
166 #define CP_HQD_IB_RPTR					0xC964u
167 #define CP_HQD_IB_CONTROL				0xC968u
168 #define	IB_ATC_EN					(1U << 23)
169 #define	DEFAULT_MIN_IB_AVAIL_SIZE			(3U << 20)
170 
171 #define	AQL_ENABLE					1
172 
173 #define CP_HQD_DEQUEUE_REQUEST				0xC974
174 #define	DEQUEUE_REQUEST_DRAIN				1
175 #define DEQUEUE_REQUEST_RESET				2
176 #define		DEQUEUE_INT					(1U << 8)
177 
178 #define CP_HQD_SEMA_CMD					0xC97Cu
179 #define CP_HQD_MSG_TYPE					0xC980u
180 #define CP_HQD_ATOMIC0_PREOP_LO				0xC984u
181 #define CP_HQD_ATOMIC0_PREOP_HI				0xC988u
182 #define CP_HQD_ATOMIC1_PREOP_LO				0xC98Cu
183 #define CP_HQD_ATOMIC1_PREOP_HI				0xC990u
184 #define CP_HQD_HQ_SCHEDULER0				0xC994u
185 #define CP_HQD_HQ_SCHEDULER1				0xC998u
186 
187 
188 #define CP_MQD_CONTROL					0xC99C
189 #define	MQD_VMID(x)					((x) << 0)
190 #define	MQD_VMID_MASK					(0xf << 0)
191 #define	MQD_CONTROL_PRIV_STATE_EN			(1U << 8)
192 
193 #define	SDMA_RB_VMID(x)					(x << 24)
194 #define	SDMA_RB_ENABLE					(1 << 0)
195 #define	SDMA_RB_SIZE(x)					((x) << 1) /* log2 */
196 #define	SDMA_RPTR_WRITEBACK_ENABLE			(1 << 12)
197 #define	SDMA_RPTR_WRITEBACK_TIMER(x)			((x) << 16) /* log2 */
198 #define	SDMA_OFFSET(x)					(x << 0)
199 #define	SDMA_DB_ENABLE					(1 << 28)
200 #define	SDMA_ATC					(1 << 0)
201 #define	SDMA_VA_PTR32					(1 << 4)
202 #define	SDMA_VA_SHARED_BASE(x)				(x << 8)
203 
204 #define GRBM_GFX_INDEX					0x30800
205 #define	INSTANCE_INDEX(x)				((x) << 0)
206 #define	SH_INDEX(x)					((x) << 8)
207 #define	SE_INDEX(x)					((x) << 16)
208 #define	SH_BROADCAST_WRITES				(1 << 29)
209 #define	INSTANCE_BROADCAST_WRITES			(1 << 30)
210 #define	SE_BROADCAST_WRITES				(1 << 31)
211 
212 #define SQC_CACHES					0x30d20
213 #define SQC_POLICY					0x8C38u
214 #define SQC_VOLATILE					0x8C3Cu
215 
216 #define CP_PERFMON_CNTL					0x36020
217 
218 #define ATC_VMID0_PASID_MAPPING				0x339Cu
219 #define	ATC_VMID_PASID_MAPPING_UPDATE_STATUS		0x3398u
220 #define	ATC_VMID_PASID_MAPPING_VALID			(1U << 31)
221 
222 #define ATC_VM_APERTURE0_CNTL				0x3310u
223 #define	ATS_ACCESS_MODE_NEVER				0
224 #define	ATS_ACCESS_MODE_ALWAYS				1
225 
226 #define ATC_VM_APERTURE0_CNTL2				0x3318u
227 #define ATC_VM_APERTURE0_HIGH_ADDR			0x3308u
228 #define ATC_VM_APERTURE0_LOW_ADDR			0x3300u
229 #define ATC_VM_APERTURE1_CNTL				0x3314u
230 #define ATC_VM_APERTURE1_CNTL2				0x331Cu
231 #define ATC_VM_APERTURE1_HIGH_ADDR			0x330Cu
232 #define ATC_VM_APERTURE1_LOW_ADDR			0x3304u
233 
234 #endif
235