0001
0002
0003
0004 #ifndef __PANFROST_FEATURES_H__
0005 #define __PANFROST_FEATURES_H__
0006
0007 #include <linux/bitops.h>
0008
0009 #include "panfrost_device.h"
0010
0011 enum panfrost_hw_feature {
0012 HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
0013 HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
0014 HW_FEATURE_XAFFINITY,
0015 HW_FEATURE_V4,
0016 HW_FEATURE_FLUSH_REDUCTION,
0017 HW_FEATURE_PROTECTED_MODE,
0018 HW_FEATURE_COHERENCY_REG,
0019 HW_FEATURE_PROTECTED_DEBUG_MODE,
0020 HW_FEATURE_AARCH64_MMU,
0021 HW_FEATURE_TLS_HASHING,
0022 HW_FEATURE_THREAD_GROUP_SPLIT,
0023 HW_FEATURE_IDVS_GROUP_SIZE,
0024 HW_FEATURE_CLEAN_ONLY_SAFE,
0025 HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG,
0026 };
0027
0028 #define hw_features_t600 (\
0029 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
0030 BIT_ULL(HW_FEATURE_V4))
0031
0032 #define hw_features_t620 hw_features_t600
0033
0034 #define hw_features_t720 hw_features_t600
0035
0036 #define hw_features_t760 (\
0037 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
0038 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
0039 BIT_ULL(HW_FEATURE_XAFFINITY) | \
0040 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT))
0041
0042 #define hw_features_t860 hw_features_t760
0043
0044 #define hw_features_t880 hw_features_t760
0045
0046 #define hw_features_t830 hw_features_t760
0047
0048 #define hw_features_t820 hw_features_t760
0049
0050 #define hw_features_g71 (\
0051 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
0052 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
0053 BIT_ULL(HW_FEATURE_XAFFINITY) | \
0054 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
0055 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
0056 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
0057 BIT_ULL(HW_FEATURE_COHERENCY_REG))
0058
0059 #define hw_features_g72 (\
0060 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
0061 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
0062 BIT_ULL(HW_FEATURE_XAFFINITY) | \
0063 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
0064 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
0065 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
0066 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
0067 BIT_ULL(HW_FEATURE_COHERENCY_REG))
0068
0069 #define hw_features_g51 hw_features_g72
0070
0071 #define hw_features_g52 (\
0072 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
0073 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
0074 BIT_ULL(HW_FEATURE_XAFFINITY) | \
0075 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
0076 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
0077 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
0078 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
0079 BIT_ULL(HW_FEATURE_IDVS_GROUP_SIZE) | \
0080 BIT_ULL(HW_FEATURE_COHERENCY_REG))
0081
0082 #define hw_features_g76 (\
0083 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
0084 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
0085 BIT_ULL(HW_FEATURE_XAFFINITY) | \
0086 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
0087 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
0088 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
0089 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
0090 BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
0091 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
0092 BIT_ULL(HW_FEATURE_TLS_HASHING) | \
0093 BIT_ULL(HW_FEATURE_IDVS_GROUP_SIZE) | \
0094 BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG))
0095
0096 #define hw_features_g31 (\
0097 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
0098 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
0099 BIT_ULL(HW_FEATURE_XAFFINITY) | \
0100 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \
0101 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
0102 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
0103 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
0104 BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
0105 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
0106 BIT_ULL(HW_FEATURE_TLS_HASHING) | \
0107 BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG))
0108
0109 #define hw_features_g57 (\
0110 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \
0111 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \
0112 BIT_ULL(HW_FEATURE_XAFFINITY) | \
0113 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \
0114 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \
0115 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \
0116 BIT_ULL(HW_FEATURE_COHERENCY_REG) | \
0117 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \
0118 BIT_ULL(HW_FEATURE_IDVS_GROUP_SIZE) | \
0119 BIT_ULL(HW_FEATURE_CLEAN_ONLY_SAFE))
0120
0121 static inline bool panfrost_has_hw_feature(struct panfrost_device *pfdev,
0122 enum panfrost_hw_feature feat)
0123 {
0124 return test_bit(feat, pfdev->features.hw_features);
0125 }
0126
0127 #endif