xref: /OK3568_Linux_fs/kernel/arch/powerpc/include/asm/cpufeature.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * CPU feature definitions for module loading, used by
4*4882a593Smuzhiyun  * module_cpu_feature_match(), see asm/cputable.h for powerpc CPU features.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright 2016 Alastair D'Silva, IBM Corporation.
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifndef __ASM_POWERPC_CPUFEATURE_H
10*4882a593Smuzhiyun #define __ASM_POWERPC_CPUFEATURE_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <asm/cputable.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* Keep these in step with powerpc/include/asm/cputable.h */
15*4882a593Smuzhiyun #define MAX_CPU_FEATURES (2 * 32)
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun /*
18*4882a593Smuzhiyun  * Currently we don't have a need for any of the feature bits defined in
19*4882a593Smuzhiyun  * cpu_user_features. When we do, they should be defined such as:
20*4882a593Smuzhiyun  *
21*4882a593Smuzhiyun  * #define PPC_MODULE_FEATURE_32 (ilog2(PPC_FEATURE_32))
22*4882a593Smuzhiyun  */
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #define PPC_MODULE_FEATURE_VEC_CRYPTO			(32 + ilog2(PPC_FEATURE2_VEC_CRYPTO))
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define cpu_feature(x)		(x)
27*4882a593Smuzhiyun 
cpu_have_feature(unsigned int num)28*4882a593Smuzhiyun static inline bool cpu_have_feature(unsigned int num)
29*4882a593Smuzhiyun {
30*4882a593Smuzhiyun 	if (num < 32)
31*4882a593Smuzhiyun 		return !!(cur_cpu_spec->cpu_user_features & 1UL << num);
32*4882a593Smuzhiyun 	else
33*4882a593Smuzhiyun 		return !!(cur_cpu_spec->cpu_user_features2 & 1UL << (num - 32));
34*4882a593Smuzhiyun }
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #endif /* __ASM_POWERPC_CPUFEATURE_H */
37