diff options
author | Kevin Hilman <khilman@linaro.org> | 2015-12-10 17:09:33 -0800 |
---|---|---|
committer | Kevin Hilman <khilman@linaro.org> | 2015-12-10 17:09:33 -0800 |
commit | 9f41e6b222c4a04c7b46068df82842a6188b4a57 (patch) | |
tree | 66c636a716a29ce087d781744ab1710232f21764 /arch/arm64/include/asm/cpufeature.h | |
parent | 8eec3ec7b6576a80fbeda89beed8f9f667f9dc7b (diff) | |
parent | f45972d0017cff35d576e10f1e276f9f3991bea6 (diff) |
Merge branch 'v4.1/topic/PAN' into linux-linaro-lsk-v4.1lsk-v4.1-15.12
* v4.1/topic/PAN:
arm64: kernel: Add support for Privileged Access Never
arm64: kernel: Add optional CONFIG_ parameter to ALTERNATIVE()
arm64: alternative: Provide if/else/endif assembler macros
arm64: alternative: Work around .inst assembler bugs
arm64: alternative: Merge alternative-asm.h into alternative.h
arm64: Generalise msr_s/mrs_s operations
arm64: kernel: Add min_field_value and use '>=' for feature detection
arm64: kernel: Add cpufeature 'enable' callback
arm64: kernel: Add cpuid_feature_extract_field() for 4bit sign extension
arm64: kernel: Move config_sctlr_el1
arm64: lib: use pair accessors for copy_*_user routines
arm64: alternative: Introduce feature for GICv3 CPU interface
Diffstat (limited to 'arch/arm64/include/asm/cpufeature.h')
-rw-r--r-- | arch/arm64/include/asm/cpufeature.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h index 82cb9f98ba1a..d71140b76773 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -24,8 +24,10 @@ #define ARM64_WORKAROUND_CLEAN_CACHE 0 #define ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE 1 #define ARM64_WORKAROUND_845719 2 +#define ARM64_HAS_SYSREG_GIC_CPUIF 3 +#define ARM64_HAS_PAN 4 -#define ARM64_NCAPS 3 +#define ARM64_NCAPS 5 #ifndef __ASSEMBLY__ @@ -33,11 +35,17 @@ struct arm64_cpu_capabilities { const char *desc; u16 capability; bool (*matches)(const struct arm64_cpu_capabilities *); + void (*enable)(void); union { struct { /* To be used for erratum handling only */ u32 midr_model; u32 midr_range_min, midr_range_max; }; + + struct { /* Feature register checking */ + int field_pos; + int min_field_value; + }; }; }; @@ -64,6 +72,13 @@ static inline void cpus_set_cap(unsigned int num) __set_bit(num, cpu_hwcaps); } +static inline int __attribute_const__ cpuid_feature_extract_field(u64 features, + int field) +{ + return (s64)(features << (64 - 4 - field)) >> (64 - 4); +} + + void check_cpu_capabilities(const struct arm64_cpu_capabilities *caps, const char *info); void check_local_cpu_errata(void); |