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_IDVS_GROUP_SIZE,
24 HW_FEATURE_CLEAN_ONLY_SAFE,
25 HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG,
26 };
27
28 #define hw_features_t600 (\
29 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
30 BIT_ULL(HW_FEATURE_V4))
31
32 #define hw_features_t620 hw_features_t600
33
34 #define hw_features_t720 hw_features_t600
35
36 #define hw_features_t760 (\
37 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
38 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
39 BIT_ULL(HW_FEATURE_XAFFINITY) | \
40 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT))
41
42 #define hw_features_t860 hw_features_t760
43
44 #define hw_features_t880 hw_features_t760
45
46 #define hw_features_t830 hw_features_t760
47
48 #define hw_features_t820 hw_features_t760
49
50 #define hw_features_g71 (\
51 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
52 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
53 BIT_ULL(HW_FEATURE_XAFFINITY) | \
54 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
55 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
56 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
57 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
58 BIT_ULL(HW_FEATURE_COHERENCY_REG))
59
60 #define hw_features_g72 (\
61 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
62 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
63 BIT_ULL(HW_FEATURE_XAFFINITY) | \
64 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
65 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
66 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
67 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
68 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
69 BIT_ULL(HW_FEATURE_COHERENCY_REG))
70
71 #define hw_features_g51 hw_features_g72
72
73 #define hw_features_g52 (\
74 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
75 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
76 BIT_ULL(HW_FEATURE_XAFFINITY) | \
77 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
78 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
79 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
80 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
81 BIT_ULL(HW_FEATURE_IDVS_GROUP_SIZE) | \
82 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
83 BIT_ULL(HW_FEATURE_COHERENCY_REG))
84
85 #define hw_features_g76 (\
86 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
87 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
88 BIT_ULL(HW_FEATURE_XAFFINITY) | \
89 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
90 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
91 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
92 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
93 BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
94 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
95 BIT_ULL(HW_FEATURE_TLS_HASHING) | \
96 BIT_ULL(HW_FEATURE_IDVS_GROUP_SIZE) | \
97 BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG))
98
99 #define hw_features_g31 (\
100 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
101 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
102 BIT_ULL(HW_FEATURE_XAFFINITY) | \
103 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
104 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
105 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
106 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
107 BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
108 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
109 BIT_ULL(HW_FEATURE_TLS_HASHING) | \
110 BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG))
111
112 #define hw_features_g57 (\
113 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
114 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
115 BIT_ULL(HW_FEATURE_XAFFINITY) | \
116 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
117 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
118 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
119 BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
120 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
121 BIT_ULL(HW_FEATURE_IDVS_GROUP_SIZE) | \
122 BIT_ULL(HW_FEATURE_CLEAN_ONLY_SAFE))
123
panfrost_has_hw_feature(struct panfrost_device * pfdev,enum panfrost_hw_feature feat)124 static inline bool panfrost_has_hw_feature(struct panfrost_device *pfdev,
125 enum panfrost_hw_feature feat)
126 {
127 return test_bit(feat, pfdev->features.hw_features);
128 }
129
130 #endif
131