static inline bool system_supports_address_auth(void)
 {
        return IS_ENABLED(CONFIG_ARM64_PTR_AUTH) &&
-               (cpus_have_const_cap(ARM64_HAS_ADDRESS_AUTH_ARCH) ||
-                cpus_have_const_cap(ARM64_HAS_ADDRESS_AUTH_IMP_DEF));
+               cpus_have_const_cap(ARM64_HAS_ADDRESS_AUTH);
 }
 
 static inline bool system_supports_generic_auth(void)
 {
        return IS_ENABLED(CONFIG_ARM64_PTR_AUTH) &&
-               (cpus_have_const_cap(ARM64_HAS_GENERIC_AUTH_ARCH) ||
-                cpus_have_const_cap(ARM64_HAS_GENERIC_AUTH_IMP_DEF));
+               cpus_have_const_cap(ARM64_HAS_GENERIC_AUTH);
 }
 
 static inline bool system_uses_irq_prio_masking(void)
 
        sysreg_clear_set(sctlr_el1, 0, SCTLR_ELx_ENIA | SCTLR_ELx_ENIB |
                                       SCTLR_ELx_ENDA | SCTLR_ELx_ENDB);
 }
+
+static bool has_address_auth(const struct arm64_cpu_capabilities *entry,
+                            int __unused)
+{
+       return __system_matches_cap(ARM64_HAS_ADDRESS_AUTH_ARCH) ||
+              __system_matches_cap(ARM64_HAS_ADDRESS_AUTH_IMP_DEF);
+}
+
+static bool has_generic_auth(const struct arm64_cpu_capabilities *entry,
+                            int __unused)
+{
+       return __system_matches_cap(ARM64_HAS_GENERIC_AUTH_ARCH) ||
+              __system_matches_cap(ARM64_HAS_GENERIC_AUTH_IMP_DEF);
+}
 #endif /* CONFIG_ARM64_PTR_AUTH */
 
 #ifdef CONFIG_ARM64_E0PD
                .field_pos = ID_AA64ISAR1_APA_SHIFT,
                .min_field_value = ID_AA64ISAR1_APA_ARCHITECTED,
                .matches = has_cpuid_feature,
-               .cpu_enable = cpu_enable_address_auth,
        },
        {
                .desc = "Address authentication (IMP DEF algorithm)",
                .field_pos = ID_AA64ISAR1_API_SHIFT,
                .min_field_value = ID_AA64ISAR1_API_IMP_DEF,
                .matches = has_cpuid_feature,
+       },
+       {
+               .capability = ARM64_HAS_ADDRESS_AUTH,
+               .type = ARM64_CPUCAP_SYSTEM_FEATURE,
+               .matches = has_address_auth,
                .cpu_enable = cpu_enable_address_auth,
        },
        {
                .min_field_value = ID_AA64ISAR1_GPI_IMP_DEF,
                .matches = has_cpuid_feature,
        },
+       {
+               .capability = ARM64_HAS_GENERIC_AUTH,
+               .type = ARM64_CPUCAP_SYSTEM_FEATURE,
+               .matches = has_generic_auth,
+       },
 #endif /* CONFIG_ARM64_PTR_AUTH */
 #ifdef CONFIG_ARM64_PSEUDO_NMI
        {