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
11enum 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
303static 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