cpucaps.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. #ifndef __ASM_CPUCAPS_H
  3. #define __ASM_CPUCAPS_H
  4. #include <asm/cpucap-defs.h>
  5. #ifndef __ASSEMBLY__
  6. #include <linux/types.h>
  7. /*
  8. * Check whether a cpucap is possible at compiletime.
  9. */
  10. static __always_inline bool
  11. cpucap_is_possible(const unsigned int cap)
  12. {
  13. compiletime_assert(__builtin_constant_p(cap),
  14. "cap must be a constant");
  15. compiletime_assert(cap < ARM64_NCAPS,
  16. "cap must be < ARM64_NCAPS");
  17. switch (cap) {
  18. case ARM64_HAS_PAN:
  19. return IS_ENABLED(CONFIG_ARM64_PAN);
  20. case ARM64_HAS_EPAN:
  21. return IS_ENABLED(CONFIG_ARM64_EPAN);
  22. case ARM64_SVE:
  23. return IS_ENABLED(CONFIG_ARM64_SVE);
  24. case ARM64_SME:
  25. case ARM64_SME2:
  26. case ARM64_SME_FA64:
  27. return IS_ENABLED(CONFIG_ARM64_SME);
  28. case ARM64_HAS_CNP:
  29. return IS_ENABLED(CONFIG_ARM64_CNP);
  30. case ARM64_HAS_ADDRESS_AUTH:
  31. case ARM64_HAS_GENERIC_AUTH:
  32. return IS_ENABLED(CONFIG_ARM64_PTR_AUTH);
  33. case ARM64_HAS_GIC_PRIO_MASKING:
  34. return IS_ENABLED(CONFIG_ARM64_PSEUDO_NMI);
  35. case ARM64_MTE:
  36. return IS_ENABLED(CONFIG_ARM64_MTE);
  37. case ARM64_BTI:
  38. return IS_ENABLED(CONFIG_ARM64_BTI);
  39. case ARM64_HAS_TLB_RANGE:
  40. return IS_ENABLED(CONFIG_ARM64_TLB_RANGE);
  41. case ARM64_UNMAP_KERNEL_AT_EL0:
  42. return IS_ENABLED(CONFIG_UNMAP_KERNEL_AT_EL0);
  43. case ARM64_WORKAROUND_843419:
  44. return IS_ENABLED(CONFIG_ARM64_ERRATUM_843419);
  45. case ARM64_WORKAROUND_1742098:
  46. return IS_ENABLED(CONFIG_ARM64_ERRATUM_1742098);
  47. case ARM64_WORKAROUND_2645198:
  48. return IS_ENABLED(CONFIG_ARM64_ERRATUM_2645198);
  49. case ARM64_WORKAROUND_2658417:
  50. return IS_ENABLED(CONFIG_ARM64_ERRATUM_2658417);
  51. case ARM64_WORKAROUND_CAVIUM_23154:
  52. return IS_ENABLED(CONFIG_CAVIUM_ERRATUM_23154);
  53. case ARM64_WORKAROUND_NVIDIA_CARMEL_CNP:
  54. return IS_ENABLED(CONFIG_NVIDIA_CARMEL_CNP_ERRATUM);
  55. case ARM64_WORKAROUND_REPEAT_TLBI:
  56. return IS_ENABLED(CONFIG_ARM64_WORKAROUND_REPEAT_TLBI);
  57. case ARM64_WORKAROUND_SPECULATIVE_SSBS:
  58. return IS_ENABLED(CONFIG_ARM64_ERRATUM_3194386);
  59. }
  60. return true;
  61. }
  62. #endif /* __ASSEMBLY__ */
  63. #endif /* __ASM_CPUCAPS_H */