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_COHERENCY_REG)) 58 59 #define hw_features_g72 (\ 60 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \ 61 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \ 62 BIT_ULL(HW_FEATURE_XAFFINITY) | \ 63 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \ 64 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \ 65 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \ 66 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \ 67 BIT_ULL(HW_FEATURE_COHERENCY_REG)) 68 69 #define hw_features_g51 hw_features_g72 70 71 #define hw_features_g52 (\ 72 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \ 73 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \ 74 BIT_ULL(HW_FEATURE_XAFFINITY) | \ 75 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \ 76 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \ 77 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \ 78 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \ 79 BIT_ULL(HW_FEATURE_IDVS_GROUP_SIZE) | \ 80 BIT_ULL(HW_FEATURE_COHERENCY_REG)) 81 82 #define hw_features_g76 (\ 83 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \ 84 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \ 85 BIT_ULL(HW_FEATURE_XAFFINITY) | \ 86 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \ 87 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \ 88 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \ 89 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \ 90 BIT_ULL(HW_FEATURE_COHERENCY_REG) | \ 91 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \ 92 BIT_ULL(HW_FEATURE_TLS_HASHING) | \ 93 BIT_ULL(HW_FEATURE_IDVS_GROUP_SIZE) | \ 94 BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG)) 95 96 #define hw_features_g31 (\ 97 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \ 98 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \ 99 BIT_ULL(HW_FEATURE_XAFFINITY) | \ 100 BIT_ULL(HW_FEATURE_THREAD_GROUP_SPLIT) | \ 101 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \ 102 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \ 103 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \ 104 BIT_ULL(HW_FEATURE_COHERENCY_REG) | \ 105 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \ 106 BIT_ULL(HW_FEATURE_TLS_HASHING) | \ 107 BIT_ULL(HW_FEATURE_3BIT_EXT_RW_L2_MMU_CONFIG)) 108 109 #define hw_features_g57 (\ 110 BIT_ULL(HW_FEATURE_JOBCHAIN_DISAMBIGUATION) | \ 111 BIT_ULL(HW_FEATURE_PWRON_DURING_PWROFF_TRANS) | \ 112 BIT_ULL(HW_FEATURE_XAFFINITY) | \ 113 BIT_ULL(HW_FEATURE_FLUSH_REDUCTION) | \ 114 BIT_ULL(HW_FEATURE_PROTECTED_MODE) | \ 115 BIT_ULL(HW_FEATURE_PROTECTED_DEBUG_MODE) | \ 116 BIT_ULL(HW_FEATURE_COHERENCY_REG) | \ 117 BIT_ULL(HW_FEATURE_AARCH64_MMU) | \ 118 BIT_ULL(HW_FEATURE_IDVS_GROUP_SIZE) | \ 119 BIT_ULL(HW_FEATURE_CLEAN_ONLY_SAFE)) 120 121 static inline bool panfrost_has_hw_feature(struct panfrost_device *pfdev, 122 enum panfrost_hw_feature feat) 123 { 124 return test_bit(feat, pfdev->features.hw_features); 125 } 126 127 #endif 128