| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| #ifndef __ASM_CPUCAPS_H |
| #define __ASM_CPUCAPS_H |
| |
| #include <asm/cpucap-defs.h> |
| |
| #ifndef __ASSEMBLY__ |
| #include <linux/types.h> |
| /* |
| * Check whether a cpucap is possible at compiletime. |
| */ |
| static __always_inline bool |
| cpucap_is_possible(const unsigned int cap) |
| { |
| compiletime_assert(__builtin_constant_p(cap), |
| "cap must be a constant"); |
| compiletime_assert(cap < ARM64_NCAPS, |
| "cap must be < ARM64_NCAPS"); |
| |
| switch (cap) { |
| case ARM64_HAS_PAN: |
| return IS_ENABLED(CONFIG_ARM64_PAN); |
| case ARM64_HAS_EPAN: |
| return IS_ENABLED(CONFIG_ARM64_EPAN); |
| case ARM64_SVE: |
| return IS_ENABLED(CONFIG_ARM64_SVE); |
| case ARM64_SME: |
| case ARM64_SME2: |
| case ARM64_SME_FA64: |
| return IS_ENABLED(CONFIG_ARM64_SME); |
| case ARM64_HAS_CNP: |
| return IS_ENABLED(CONFIG_ARM64_CNP); |
| case ARM64_HAS_ADDRESS_AUTH: |
| case ARM64_HAS_GENERIC_AUTH: |
| return IS_ENABLED(CONFIG_ARM64_PTR_AUTH); |
| case ARM64_HAS_GIC_PRIO_MASKING: |
| return IS_ENABLED(CONFIG_ARM64_PSEUDO_NMI); |
| case ARM64_MTE: |
| return IS_ENABLED(CONFIG_ARM64_MTE); |
| case ARM64_BTI: |
| return IS_ENABLED(CONFIG_ARM64_BTI); |
| case ARM64_HAS_TLB_RANGE: |
| return IS_ENABLED(CONFIG_ARM64_TLB_RANGE); |
| case ARM64_UNMAP_KERNEL_AT_EL0: |
| return IS_ENABLED(CONFIG_UNMAP_KERNEL_AT_EL0); |
| case ARM64_WORKAROUND_843419: |
| return IS_ENABLED(CONFIG_ARM64_ERRATUM_843419); |
| case ARM64_WORKAROUND_1742098: |
| return IS_ENABLED(CONFIG_ARM64_ERRATUM_1742098); |
| case ARM64_WORKAROUND_2645198: |
| return IS_ENABLED(CONFIG_ARM64_ERRATUM_2645198); |
| case ARM64_WORKAROUND_2658417: |
| return IS_ENABLED(CONFIG_ARM64_ERRATUM_2658417); |
| case ARM64_WORKAROUND_CAVIUM_23154: |
| return IS_ENABLED(CONFIG_CAVIUM_ERRATUM_23154); |
| case ARM64_WORKAROUND_NVIDIA_CARMEL_CNP: |
| return IS_ENABLED(CONFIG_NVIDIA_CARMEL_CNP_ERRATUM); |
| case ARM64_WORKAROUND_REPEAT_TLBI: |
| return IS_ENABLED(CONFIG_ARM64_WORKAROUND_REPEAT_TLBI); |
| case ARM64_WORKAROUND_SPECULATIVE_SSBS: |
| return IS_ENABLED(CONFIG_ARM64_ERRATUM_3194386); |
| } |
| |
| return true; |
| } |
| #endif /* __ASSEMBLY__ */ |
| |
| #endif /* __ASM_CPUCAPS_H */ |