Kevin Hao | b92a226 | 2016-07-23 14:42:40 +0530 | [diff] [blame] | 1 | #ifndef __ASM_POWERPC_CPUFEATURES_H |
| 2 | #define __ASM_POWERPC_CPUFEATURES_H |
| 3 | |
| 4 | #ifndef __ASSEMBLY__ |
| 5 | |
Kevin Hao | c12e6f2 | 2016-07-23 14:42:42 +0530 | [diff] [blame] | 6 | #include <linux/bug.h> |
Kevin Hao | b92a226 | 2016-07-23 14:42:40 +0530 | [diff] [blame] | 7 | #include <asm/cputable.h> |
| 8 | |
| 9 | static inline bool early_cpu_has_feature(unsigned long feature) |
| 10 | { |
| 11 | return !!((CPU_FTRS_ALWAYS & feature) || |
| 12 | (CPU_FTRS_POSSIBLE & cur_cpu_spec->cpu_features & feature)); |
| 13 | } |
| 14 | |
Kevin Hao | 4db7327 | 2016-07-23 14:42:41 +0530 | [diff] [blame] | 15 | #ifdef CONFIG_JUMP_LABEL_FEATURE_CHECKS |
| 16 | #include <linux/jump_label.h> |
| 17 | |
| 18 | #define NUM_CPU_FTR_KEYS 64 |
| 19 | |
| 20 | extern struct static_key_true cpu_feature_keys[NUM_CPU_FTR_KEYS]; |
| 21 | |
| 22 | static __always_inline bool cpu_has_feature(unsigned long feature) |
| 23 | { |
| 24 | int i; |
| 25 | |
| 26 | BUILD_BUG_ON(!__builtin_constant_p(feature)); |
| 27 | |
Aneesh Kumar K.V | c812c7d | 2016-07-23 14:42:43 +0530 | [diff] [blame] | 28 | #ifdef CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG |
| 29 | if (!static_key_initialized) { |
| 30 | printk("Warning! cpu_has_feature() used prior to jump label init!\n"); |
| 31 | dump_stack(); |
| 32 | return early_cpu_has_feature(feature); |
| 33 | } |
| 34 | #endif |
| 35 | |
Kevin Hao | 4db7327 | 2016-07-23 14:42:41 +0530 | [diff] [blame] | 36 | if (CPU_FTRS_ALWAYS & feature) |
| 37 | return true; |
| 38 | |
| 39 | if (!(CPU_FTRS_POSSIBLE & feature)) |
| 40 | return false; |
| 41 | |
| 42 | i = __builtin_ctzl(feature); |
| 43 | return static_branch_likely(&cpu_feature_keys[i]); |
| 44 | } |
| 45 | #else |
Kevin Hao | b92a226 | 2016-07-23 14:42:40 +0530 | [diff] [blame] | 46 | static inline bool cpu_has_feature(unsigned long feature) |
| 47 | { |
| 48 | return early_cpu_has_feature(feature); |
| 49 | } |
Kevin Hao | 4db7327 | 2016-07-23 14:42:41 +0530 | [diff] [blame] | 50 | #endif |
Kevin Hao | b92a226 | 2016-07-23 14:42:40 +0530 | [diff] [blame] | 51 | |
| 52 | #endif /* __ASSEMBLY__ */ |
| 53 | #endif /* __ASM_POWERPC_CPUFEATURE_H */ |