1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* (C) COPYRIGHT 2014-2018 ARM Limited. All rights reserved. */
3 /* Copyright 2019 Linaro, Ltd., Rob Herring <robh@kernel.org> */
4 #ifndef __PANFROST_FEATURES_H__
5 #define __PANFROST_FEATURES_H__
6 
7 #include <linux/bitops.h>
8 
9 #include "panfrost_device.h"
10 
11 enum panfrost_hw_feature {
12 	HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
13 	HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
14 	HW_FEATURE_XAFFINITY,
15 	HW_FEATURE_OUT_OF_ORDER_EXEC,
16 	HW_FEATURE_MRT,
17 	HW_FEATURE_BRNDOUT_CC,
18 	HW_FEATURE_INTERPIPE_REG_ALIASING,
19 	HW_FEATURE_LD_ST_TILEBUFFER,
20 	HW_FEATURE_MSAA_16X,
21 	HW_FEATURE_32_BIT_UNIFORM_ADDRESS,
22 	HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL,
23 	HW_FEATURE_OPTIMIZED_COVERAGE_MASK,
24 	HW_FEATURE_T7XX_PAIRING_RULES,
25 	HW_FEATURE_LD_ST_LEA_TEX,
26 	HW_FEATURE_LINEAR_FILTER_FLOAT,
27 	HW_FEATURE_WORKGROUP_ROUND_MULTIPLE_OF_4,
28 	HW_FEATURE_IMAGES_IN_FRAGMENT_SHADERS,
29 	HW_FEATURE_TEST4_DATUM_MODE,
30 	HW_FEATURE_NEXT_INSTRUCTION_TYPE,
31 	HW_FEATURE_BRNDOUT_KILL,
32 	HW_FEATURE_WARPING,
33 	HW_FEATURE_V4,
34 	HW_FEATURE_FLUSH_REDUCTION,
35 	HW_FEATURE_PROTECTED_MODE,
36 	HW_FEATURE_COHERENCY_REG,
37 	HW_FEATURE_PROTECTED_DEBUG_MODE,
38 	HW_FEATURE_AARCH64_MMU,
39 	HW_FEATURE_TLS_HASHING,
40 	HW_FEATURE_THREAD_GROUP_SPLIT,
41 	HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG,
42 };
43 
44 #define hw_features_t600 (\
45 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
46 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
47 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
48 	BIT_ULL(HW_FEATURE_V4))
49 
50 #define hw_features_t620 (\
51 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
52 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
53 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
54 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
55 	BIT_ULL(HW_FEATURE_V4))
56 
57 #define hw_features_t720 (\
58 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
59 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
60 	BIT_ULL(HW_FEATURE_INTERPIPE_REG_ALIASING) | \
61 	BIT_ULL(HW_FEATURE_OPTIMIZED_COVERAGE_MASK) | \
62 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
63 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
64 	BIT_ULL(HW_FEATURE_WORKGROUP_ROUND_MULTIPLE_OF_4) | \
65 	BIT_ULL(HW_FEATURE_WARPING) | \
66 	BIT_ULL(HW_FEATURE_V4))
67 
68 
69 #define hw_features_t760 (\
70 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
71 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
72 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
73 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
74 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
75 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
76 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
77 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
78 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
79 	BIT_ULL(HW_FEATURE_MRT) | \
80 	BIT_ULL(HW_FEATURE_MSAA_16X) | \
81 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
82 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
83 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
84 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT))
85 
86 // T860
87 #define hw_features_t860 (\
88 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
89 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
90 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
91 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
92 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
93 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
94 	BIT_ULL(HW_FEATURE_BRNDOUT_KILL) | \
95 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
96 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
97 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
98 	BIT_ULL(HW_FEATURE_MRT) | \
99 	BIT_ULL(HW_FEATURE_MSAA_16X) | \
100 	BIT_ULL(HW_FEATURE_NEXT_INSTRUCTION_TYPE) | \
101 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
102 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
103 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
104 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT))
105 
106 #define hw_features_t880 hw_features_t860
107 
108 #define hw_features_t830 (\
109 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
110 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
111 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
112 	BIT_ULL(HW_FEATURE_WARPING) | \
113 	BIT_ULL(HW_FEATURE_INTERPIPE_REG_ALIASING) | \
114 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
115 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
116 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
117 	BIT_ULL(HW_FEATURE_BRNDOUT_KILL) | \
118 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
119 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
120 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
121 	BIT_ULL(HW_FEATURE_MRT) | \
122 	BIT_ULL(HW_FEATURE_NEXT_INSTRUCTION_TYPE) | \
123 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
124 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
125 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
126 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT))
127 
128 #define hw_features_t820 (\
129 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
130 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
131 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
132 	BIT_ULL(HW_FEATURE_WARPING) | \
133 	BIT_ULL(HW_FEATURE_INTERPIPE_REG_ALIASING) | \
134 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
135 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
136 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
137 	BIT_ULL(HW_FEATURE_BRNDOUT_KILL) | \
138 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
139 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
140 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
141 	BIT_ULL(HW_FEATURE_MRT) | \
142 	BIT_ULL(HW_FEATURE_NEXT_INSTRUCTION_TYPE) | \
143 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
144 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
145 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
146 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT))
147 
148 #define hw_features_g71 (\
149 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
150 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
151 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
152 	BIT_ULL(HW_FEATURE_WARPING) | \
153 	BIT_ULL(HW_FEATURE_INTERPIPE_REG_ALIASING) | \
154 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
155 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
156 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
157 	BIT_ULL(HW_FEATURE_BRNDOUT_KILL) | \
158 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
159 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
160 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
161 	BIT_ULL(HW_FEATURE_MRT) | \
162 	BIT_ULL(HW_FEATURE_MSAA_16X) | \
163 	BIT_ULL(HW_FEATURE_NEXT_INSTRUCTION_TYPE) | \
164 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
165 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
166 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
167 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
168 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
169 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
170 	BIT_ULL(HW_FEATURE_COHERENCY_REG))
171 
172 #define hw_features_g72 (\
173 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
174 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
175 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
176 	BIT_ULL(HW_FEATURE_WARPING) | \
177 	BIT_ULL(HW_FEATURE_INTERPIPE_REG_ALIASING) | \
178 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
179 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
180 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
181 	BIT_ULL(HW_FEATURE_BRNDOUT_KILL) | \
182 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
183 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
184 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
185 	BIT_ULL(HW_FEATURE_MRT) | \
186 	BIT_ULL(HW_FEATURE_MSAA_16X) | \
187 	BIT_ULL(HW_FEATURE_NEXT_INSTRUCTION_TYPE) | \
188 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
189 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
190 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
191 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
192 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
193 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
194 	BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
195 	BIT_ULL(HW_FEATURE_COHERENCY_REG))
196 
197 #define hw_features_g51 (\
198 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
199 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
200 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
201 	BIT_ULL(HW_FEATURE_WARPING) | \
202 	BIT_ULL(HW_FEATURE_INTERPIPE_REG_ALIASING) | \
203 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
204 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
205 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
206 	BIT_ULL(HW_FEATURE_BRNDOUT_KILL) | \
207 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
208 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
209 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
210 	BIT_ULL(HW_FEATURE_MRT) | \
211 	BIT_ULL(HW_FEATURE_MSAA_16X) | \
212 	BIT_ULL(HW_FEATURE_NEXT_INSTRUCTION_TYPE) | \
213 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
214 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
215 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
216 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
217 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
218 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
219 	BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
220 	BIT_ULL(HW_FEATURE_COHERENCY_REG))
221 
222 #define hw_features_g52 (\
223 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
224 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
225 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
226 	BIT_ULL(HW_FEATURE_WARPING) | \
227 	BIT_ULL(HW_FEATURE_INTERPIPE_REG_ALIASING) | \
228 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
229 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
230 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
231 	BIT_ULL(HW_FEATURE_BRNDOUT_KILL) | \
232 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
233 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
234 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
235 	BIT_ULL(HW_FEATURE_MRT) | \
236 	BIT_ULL(HW_FEATURE_MSAA_16X) | \
237 	BIT_ULL(HW_FEATURE_NEXT_INSTRUCTION_TYPE) | \
238 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
239 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
240 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
241 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
242 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
243 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
244 	BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
245 	BIT_ULL(HW_FEATURE_COHERENCY_REG))
246 
247 #define hw_features_g76 (\
248 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
249 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
250 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
251 	BIT_ULL(HW_FEATURE_WARPING) | \
252 	BIT_ULL(HW_FEATURE_INTERPIPE_REG_ALIASING) | \
253 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
254 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
255 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
256 	BIT_ULL(HW_FEATURE_BRNDOUT_KILL) | \
257 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
258 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
259 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
260 	BIT_ULL(HW_FEATURE_MRT) | \
261 	BIT_ULL(HW_FEATURE_MSAA_16X) | \
262 	BIT_ULL(HW_FEATURE_NEXT_INSTRUCTION_TYPE) | \
263 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
264 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
265 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
266 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
267 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
268 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
269 	BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
270 	BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
271 	BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
272 	BIT_ULL(HW_FEATURE_TLS_HASHING) | \
273 	BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG))
274 
275 #define hw_features_g31 (\
276 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
277 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
278 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
279 	BIT_ULL(HW_FEATURE_WARPING) | \
280 	BIT_ULL(HW_FEATURE_INTERPIPE_REG_ALIASING) | \
281 	BIT_ULL(HW_FEATURE_32_BIT_UNIFORM_ADDRESS) | \
282 	BIT_ULL(HW_FEATURE_ATTR_AUTO_TYPE_INFERRAL) | \
283 	BIT_ULL(HW_FEATURE_BRNDOUT_CC) | \
284 	BIT_ULL(HW_FEATURE_BRNDOUT_KILL) | \
285 	BIT_ULL(HW_FEATURE_LD_ST_LEA_TEX) | \
286 	BIT_ULL(HW_FEATURE_LD_ST_TILEBUFFER) | \
287 	BIT_ULL(HW_FEATURE_LINEAR_FILTER_FLOAT) | \
288 	BIT_ULL(HW_FEATURE_MRT) | \
289 	BIT_ULL(HW_FEATURE_MSAA_16X) | \
290 	BIT_ULL(HW_FEATURE_NEXT_INSTRUCTION_TYPE) | \
291 	BIT_ULL(HW_FEATURE_OUT_OF_ORDER_EXEC) | \
292 	BIT_ULL(HW_FEATURE_T7XX_PAIRING_RULES) | \
293 	BIT_ULL(HW_FEATURE_TEST4_DATUM_MODE) | \
294 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
295 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
296 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
297 	BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
298 	BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
299 	BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
300 	BIT_ULL(HW_FEATURE_TLS_HASHING) | \
301 	BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG))
302 
303 static inline bool panfrost_has_hw_feature(struct panfrost_device *pfdev,
304 					   enum panfrost_hw_feature feat)
305 {
306 	return test_bit(feat, pfdev->features.hw_features);
307 }
308 
309 #endif
310