Merge branch 'for-next/fpsimd' into for-next/core
authorWill Deacon <will@kernel.org>
Mon, 14 Mar 2022 19:04:22 +0000 (19:04 +0000)
committerWill Deacon <will@kernel.org>
Mon, 14 Mar 2022 19:04:22 +0000 (19:04 +0000)
* for-next/fpsimd:
  arm64: cpufeature: Warn if we attempt to read a zero width field
  arm64: cpufeature: Add missing .field_width for GIC system registers
  arm64: signal: nofpsimd: Do not allocate fp/simd context when not available
  arm64: cpufeature: Always specify and use a field width for capabilities
  arm64: Always use individual bits in CPACR floating point enables
  arm64: Define CPACR_EL1_FPEN similarly to other floating point controls

1  2 
arch/arm64/include/asm/cpufeature.h
arch/arm64/include/asm/sysreg.h
arch/arm64/kernel/cpufeature.c
arch/arm64/kernel/signal.c

Simple merge
  #define ZCR_ELx_LEN_SIZE      9
  #define ZCR_ELx_LEN_MASK      0x1ff
  
+ #define CPACR_EL1_FPEN_EL1EN  (BIT(20)) /* enable EL1 access */
+ #define CPACR_EL1_FPEN_EL0EN  (BIT(21)) /* enable EL0 access, if EL1EN set */
  #define CPACR_EL1_ZEN_EL1EN   (BIT(16)) /* enable EL1 access */
  #define CPACR_EL1_ZEN_EL0EN   (BIT(17)) /* enable EL0 access, if EL1EN set */
- #define CPACR_EL1_ZEN         (CPACR_EL1_ZEN_EL1EN | CPACR_EL1_ZEN_EL0EN)
  
 -/* TCR EL1 Bit Definitions */
 -#define SYS_TCR_EL1_TCMA1     (BIT(58))
 -#define SYS_TCR_EL1_TCMA0     (BIT(57))
 -
  /* GCR_EL1 Definitions */
  #define SYS_GCR_EL1_RRND      (BIT(16))
  #define SYS_GCR_EL1_EXCL_MASK 0xffffUL
@@@ -2147,8 -2157,10 +2162,9 @@@ static const struct arm64_cpu_capabilit
                .sys_reg = SYS_ID_AA64MMFR2_EL1,
                .sign = FTR_UNSIGNED,
                .field_pos = ID_AA64MMFR2_FWB_SHIFT,
+               .field_width = 4,
                .min_field_value = 1,
                .matches = has_cpuid_feature,
 -              .cpu_enable = cpu_has_fwb,
        },
        {
                .desc = "ARMv8.4 Translation Table Level",
                .matches = has_address_auth_cpucap,
        },
        {
 +              .desc = "Address authentication (architected QARMA3 algorithm)",
 +              .capability = ARM64_HAS_ADDRESS_AUTH_ARCH_QARMA3,
 +              .type = ARM64_CPUCAP_BOOT_CPU_FEATURE,
 +              .sys_reg = SYS_ID_AA64ISAR2_EL1,
 +              .sign = FTR_UNSIGNED,
 +              .field_pos = ID_AA64ISAR2_APA3_SHIFT,
++              .field_width = 4,
 +              .min_field_value = ID_AA64ISAR2_APA3_ARCHITECTED,
 +              .matches = has_address_auth_cpucap,
 +      },
 +      {
                .desc = "Address authentication (IMP DEF algorithm)",
                .capability = ARM64_HAS_ADDRESS_AUTH_IMP_DEF,
                .type = ARM64_CPUCAP_BOOT_CPU_FEATURE,
                .matches = has_cpuid_feature,
        },
        {
 +              .desc = "Generic authentication (architected QARMA3 algorithm)",
 +              .capability = ARM64_HAS_GENERIC_AUTH_ARCH_QARMA3,
 +              .type = ARM64_CPUCAP_SYSTEM_FEATURE,
 +              .sys_reg = SYS_ID_AA64ISAR2_EL1,
 +              .sign = FTR_UNSIGNED,
 +              .field_pos = ID_AA64ISAR2_GPA3_SHIFT,
++              .field_width = 4,
 +              .min_field_value = ID_AA64ISAR2_GPA3_ARCHITECTED,
 +              .matches = has_cpuid_feature,
 +      },
 +      {
                .desc = "Generic authentication (IMP DEF algorithm)",
                .capability = ARM64_HAS_GENERIC_AUTH_IMP_DEF,
                .type = ARM64_CPUCAP_SYSTEM_FEATURE,
  static const struct arm64_cpu_capabilities ptr_auth_hwcap_addr_matches[] = {
        {
                HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_APA_SHIFT,
-                                 FTR_UNSIGNED, ID_AA64ISAR1_APA_ARCHITECTED)
+                                 4, FTR_UNSIGNED,
+                                 ID_AA64ISAR1_APA_ARCHITECTED)
        },
        {
-                                 FTR_UNSIGNED, ID_AA64ISAR2_APA3_ARCHITECTED)
 +              HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_APA3_SHIFT,
++                                4, FTR_UNSIGNED, ID_AA64ISAR2_APA3_ARCHITECTED)
 +      },
 +      {
                HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_API_SHIFT,
-                                 FTR_UNSIGNED, ID_AA64ISAR1_API_IMP_DEF)
+                                 4, FTR_UNSIGNED, ID_AA64ISAR1_API_IMP_DEF)
        },
        {},
  };
  static const struct arm64_cpu_capabilities ptr_auth_hwcap_gen_matches[] = {
        {
                HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_GPA_SHIFT,
-                                 FTR_UNSIGNED, ID_AA64ISAR1_GPA_ARCHITECTED)
+                                 4, FTR_UNSIGNED, ID_AA64ISAR1_GPA_ARCHITECTED)
        },
        {
-                                 FTR_UNSIGNED, ID_AA64ISAR2_GPA3_ARCHITECTED)
 +              HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_GPA3_SHIFT,
++                                4, FTR_UNSIGNED, ID_AA64ISAR2_GPA3_ARCHITECTED)
 +      },
 +      {
                HWCAP_CPUID_MATCH(SYS_ID_AA64ISAR1_EL1, ID_AA64ISAR1_GPI_SHIFT,
-                                 FTR_UNSIGNED, ID_AA64ISAR1_GPI_IMP_DEF)
+                                 4, FTR_UNSIGNED, ID_AA64ISAR1_GPI_IMP_DEF)
        },
        {},
  };
@@@ -2519,12 -2523,11 +2557,12 @@@ static const struct arm64_cpu_capabilit
        HWCAP_MULTI_CAP(ptr_auth_hwcap_gen_matches, CAP_HWCAP, KERNEL_HWCAP_PACG),
  #endif
  #ifdef CONFIG_ARM64_MTE
-       HWCAP_CAP(SYS_ID_AA64PFR1_EL1, ID_AA64PFR1_MTE_SHIFT, FTR_UNSIGNED, ID_AA64PFR1_MTE, CAP_HWCAP, KERNEL_HWCAP_MTE),
-       HWCAP_CAP(SYS_ID_AA64PFR1_EL1, ID_AA64PFR1_MTE_SHIFT, FTR_UNSIGNED, ID_AA64PFR1_MTE_ASYMM, CAP_HWCAP, KERNEL_HWCAP_MTE3),
+       HWCAP_CAP(SYS_ID_AA64PFR1_EL1, ID_AA64PFR1_MTE_SHIFT, 4, FTR_UNSIGNED, ID_AA64PFR1_MTE, CAP_HWCAP, KERNEL_HWCAP_MTE),
++      HWCAP_CAP(SYS_ID_AA64PFR1_EL1, ID_AA64PFR1_MTE_SHIFT, 4, FTR_UNSIGNED, ID_AA64PFR1_MTE_ASYMM, CAP_HWCAP, KERNEL_HWCAP_MTE3),
  #endif /* CONFIG_ARM64_MTE */
-       HWCAP_CAP(SYS_ID_AA64MMFR0_EL1, ID_AA64MMFR0_ECV_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_ECV),
-       HWCAP_CAP(SYS_ID_AA64MMFR1_EL1, ID_AA64MMFR1_AFP_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_AFP),
-       HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_RPRES_SHIFT, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_RPRES),
+       HWCAP_CAP(SYS_ID_AA64MMFR0_EL1, ID_AA64MMFR0_ECV_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_ECV),
+       HWCAP_CAP(SYS_ID_AA64MMFR1_EL1, ID_AA64MMFR1_AFP_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_AFP),
+       HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_RPRES_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_RPRES),
        {},
  };
  
Simple merge