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