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_V4,
16 	HW_FEATURE_FLUSH_REDUCTION,
17 	HW_FEATURE_PROTECTED_MODE,
18 	HW_FEATURE_COHERENCY_REG,
19 	HW_FEATURE_PROTECTED_DEBUG_MODE,
20 	HW_FEATURE_AARCH64_MMU,
21 	HW_FEATURE_TLS_HASHING,
22 	HW_FEATURE_THREAD_GROUP_SPLIT,
23 	HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG,
24 };
25 
26 #define hw_features_t600 (\
27 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
28 	BIT_ULL(HW_FEATURE_V4))
29 
30 #define hw_features_t620 hw_features_t600
31 
32 #define hw_features_t720 hw_features_t600
33 
34 #define hw_features_t760 (\
35 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
36 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
37 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
38 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT))
39 
40 #define hw_features_t860 hw_features_t760
41 
42 #define hw_features_t880 hw_features_t760
43 
44 #define hw_features_t830 hw_features_t760
45 
46 #define hw_features_t820 hw_features_t760
47 
48 #define hw_features_g71 (\
49 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
50 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
51 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
52 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
53 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
54 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
55 	BIT_ULL(HW_FEATURE_COHERENCY_REG))
56 
57 #define hw_features_g72 (\
58 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
59 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
60 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
61 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
62 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
63 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
64 	BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
65 	BIT_ULL(HW_FEATURE_COHERENCY_REG))
66 
67 #define hw_features_g51 hw_features_g72
68 
69 #define hw_features_g52 (\
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_THREAD_GROUP_SPLIT) | \
74 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
75 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
76 	BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
77 	BIT_ULL(HW_FEATURE_COHERENCY_REG))
78 
79 #define hw_features_g76 (\
80 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
81 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
82 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
83 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
84 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
85 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
86 	BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
87 	BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
88 	BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
89 	BIT_ULL(HW_FEATURE_TLS_HASHING) | \
90 	BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG))
91 
92 #define hw_features_g31 (\
93 	BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
94 	BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
95 	BIT_ULL(HW_FEATURE_XAFFINITY) | \
96 	BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
97 	BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
98 	BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
99 	BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
100 	BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
101 	BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
102 	BIT_ULL(HW_FEATURE_TLS_HASHING) | \
103 	BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG))
104 
105 static inline bool panfrost_has_hw_feature(struct panfrost_device *pfdev,
106 					   enum panfrost_hw_feature feat)
107 {
108 	return test_bit(feat, pfdev->features.hw_features);
109 }
110 
111 #endif
112