cpucaps.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 __ASSEMBLER__
  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_EPAN:
  19. return IS_ENABLED(CONFIG_ARM64_EPAN);
  20. case ARM64_SVE:
  21. return IS_ENABLED(CONFIG_ARM64_SVE);
  22. case ARM64_SME:
  23. case ARM64_SME2:
  24. case ARM64_SME_FA64:
  25. return IS_ENABLED(CONFIG_ARM64_SME);
  26. case ARM64_HAS_CNP:
  27. return IS_ENABLED(CONFIG_ARM64_CNP);
  28. case ARM64_HAS_ADDRESS_AUTH:
  29. case ARM64_HAS_GENERIC_AUTH:
  30. return IS_ENABLED(CONFIG_ARM64_PTR_AUTH);
  31. case ARM64_HAS_GIC_PRIO_MASKING:
  32. return IS_ENABLED(CONFIG_ARM64_PSEUDO_NMI);
  33. case ARM64_MTE:
  34. return IS_ENABLED(CONFIG_ARM64_MTE);
  35. case ARM64_BTI:
  36. return IS_ENABLED(CONFIG_ARM64_BTI);
  37. case ARM64_HAS_TLB_RANGE:
  38. return IS_ENABLED(CONFIG_ARM64_TLB_RANGE);
  39. case ARM64_HAS_S1POE:
  40. return IS_ENABLED(CONFIG_ARM64_POE);
  41. case ARM64_HAS_GCS:
  42. return IS_ENABLED(CONFIG_ARM64_GCS);
  43. case ARM64_HAFT:
  44. return IS_ENABLED(CONFIG_ARM64_HAFT);
  45. case ARM64_UNMAP_KERNEL_AT_EL0:
  46. return IS_ENABLED(CONFIG_UNMAP_KERNEL_AT_EL0);
  47. case ARM64_WORKAROUND_843419:
  48. return IS_ENABLED(CONFIG_ARM64_ERRATUM_843419);
  49. case ARM64_WORKAROUND_1742098:
  50. return IS_ENABLED(CONFIG_ARM64_ERRATUM_1742098);
  51. case ARM64_WORKAROUND_2645198:
  52. return IS_ENABLED(CONFIG_ARM64_ERRATUM_2645198);
  53. case ARM64_WORKAROUND_2658417:
  54. return IS_ENABLED(CONFIG_ARM64_ERRATUM_2658417);
  55. case ARM64_WORKAROUND_CAVIUM_23154:
  56. return IS_ENABLED(CONFIG_CAVIUM_ERRATUM_23154);
  57. case ARM64_WORKAROUND_NVIDIA_CARMEL_CNP:
  58. return IS_ENABLED(CONFIG_NVIDIA_CARMEL_CNP_ERRATUM);
  59. case ARM64_WORKAROUND_REPEAT_TLBI:
  60. return IS_ENABLED(CONFIG_ARM64_WORKAROUND_REPEAT_TLBI);
  61. case ARM64_WORKAROUND_SPECULATIVE_SSBS:
  62. return IS_ENABLED(CONFIG_ARM64_ERRATUM_3194386);
  63. case ARM64_MPAM:
  64. /*
  65. * KVM MPAM support doesn't rely on the host kernel supporting MPAM.
  66. */
  67. return true;
  68. case ARM64_HAS_PMUV3:
  69. return IS_ENABLED(CONFIG_HW_PERF_EVENTS);
  70. }
  71. return true;
  72. }
  73. #endif /* __ASSEMBLER__ */
  74. #endif /* __ASM_CPUCAPS_H */