]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
arm64/hwcap: Add hwcap for FEAT_LSFE
authorMark Brown <broonie@kernel.org>
Mon, 18 Aug 2025 19:21:18 +0000 (20:21 +0100)
committerWill Deacon <will@kernel.org>
Tue, 16 Sep 2025 18:55:11 +0000 (19:55 +0100)
FEAT_LSFE (Large System Float Extension), providing atomic floating point
memory operations, is optional from v9.5. This feature adds no new
architectural stare and we have no immediate use for it in the kernel so
simply provide a hwcap for it to support discovery by userspace.

Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Will Deacon <will@kernel.org>
Documentation/arch/arm64/elf_hwcaps.rst
arch/arm64/include/asm/hwcap.h
arch/arm64/include/uapi/asm/hwcap.h
arch/arm64/kernel/cpufeature.c
arch/arm64/kernel/cpuinfo.c

index f58ada4d6cb2fdd0bf0a68e736390d4d36effbef..a15df49568498fed4830cd1e9c66bd3edb71a5dd 100644 (file)
@@ -441,6 +441,10 @@ HWCAP3_MTE_FAR
 HWCAP3_MTE_STORE_ONLY
     Functionality implied by ID_AA64PFR2_EL1.MTESTOREONLY == 0b0001.
 
+HWCAP3_LSFE
+    Functionality implied by ID_AA64ISAR3_EL1.LSFE == 0b0001
+
+
 4. Unused AT_HWCAP bits
 -----------------------
 
index 13f94c8ddfc03b7d453adda39dfbc47e2b5e6b9d..6d567265467cccd1a38b9044d1729b2e97844487 100644 (file)
 #define __khwcap3_feature(x)           (const_ilog2(HWCAP3_ ## x) + 128)
 #define KERNEL_HWCAP_MTE_FAR           __khwcap3_feature(MTE_FAR)
 #define KERNEL_HWCAP_MTE_STORE_ONLY    __khwcap3_feature(MTE_STORE_ONLY)
+#define KERNEL_HWCAP_LSFE              __khwcap3_feature(LSFE)
 
 /*
  * This yields a mask that user programs can use to figure out what
index 72c78468b806b5400b8c487ac6af91ca3de63dbb..575564ecdb0b786fae1fbdc4da9d788f60eed353 100644 (file)
  */
 #define HWCAP3_MTE_FAR         (1UL << 0)
 #define HWCAP3_MTE_STORE_ONLY          (1UL << 1)
+#define HWCAP3_LSFE            (1UL << 2)
 
 #endif /* _UAPI__ASM_HWCAP_H */
index 9ad065f15f1d61b624dbd48e6d6a4c5db9e88bbb..b1219f14459f494523c11c666fe1fec08eb94865 100644 (file)
@@ -278,6 +278,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar2[] = {
 
 static const struct arm64_ftr_bits ftr_id_aa64isar3[] = {
        ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR3_EL1_FPRCVT_SHIFT, 4, 0),
+       ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR3_EL1_LSFE_SHIFT, 4, 0),
        ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR3_EL1_FAMINMAX_SHIFT, 4, 0),
        ARM64_FTR_END,
 };
@@ -3252,6 +3253,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
        HWCAP_CAP(ID_AA64ISAR1_EL1, I8MM, IMP, CAP_HWCAP, KERNEL_HWCAP_I8MM),
        HWCAP_CAP(ID_AA64ISAR2_EL1, LUT, IMP, CAP_HWCAP, KERNEL_HWCAP_LUT),
        HWCAP_CAP(ID_AA64ISAR3_EL1, FAMINMAX, IMP, CAP_HWCAP, KERNEL_HWCAP_FAMINMAX),
+       HWCAP_CAP(ID_AA64ISAR3_EL1, LSFE, IMP, CAP_HWCAP, KERNEL_HWCAP_LSFE),
        HWCAP_CAP(ID_AA64MMFR2_EL1, AT, IMP, CAP_HWCAP, KERNEL_HWCAP_USCAT),
 #ifdef CONFIG_ARM64_SVE
        HWCAP_CAP(ID_AA64PFR0_EL1, SVE, IMP, CAP_HWCAP, KERNEL_HWCAP_SVE),
index ba834909a28bd06ff5fb23a311006a32d01f3d99..c44e6d94f5deb11390937b27d99dd32595fec60d 100644 (file)
@@ -162,6 +162,7 @@ static const char *const hwcap_str[] = {
        [KERNEL_HWCAP_SME_SMOP4]        = "smesmop4",
        [KERNEL_HWCAP_MTE_FAR]          = "mtefar",
        [KERNEL_HWCAP_MTE_STORE_ONLY]   = "mtestoreonly",
+       [KERNEL_HWCAP_LSFE]             = "lsfe",
 };
 
 #ifdef CONFIG_COMPAT