Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

arm64/hwcap: Add support for SVE 2.1

FEAT_SVE2p1 introduces a number of new SVE instructions. Since there is no
new architectural state added kernel support is simply a new hwcap which
lets userspace know that the feature is supported.

Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20221017152520.1039165-6-broonie@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>

authored by

Mark Brown and committed by
Will Deacon
d12aada8 989d37fc

+9
+3
Documentation/arm64/elf_hwcaps.rst
··· 281 281 HWCAP2_RPRFM 282 282 Functionality implied by ID_AA64ISAR2_EL1.RPRFM == 0b0001. 283 283 284 + HWCAP2_SVE2P1 285 + Functionality implied by ID_AA64ZFR0_EL1.SVEver == 0b0010. 286 + 284 287 4. Unused AT_HWCAP bits 285 288 ----------------------- 286 289
+1
Documentation/arm64/sve.rst
··· 52 52 HWCAP2_SVEBITPERM 53 53 HWCAP2_SVESHA3 54 54 HWCAP2_SVESM4 55 + HWCAP2_SVE2P1 55 56 56 57 This list may be extended over time as the SVE architecture evolves. 57 58
+1
arch/arm64/include/asm/hwcap.h
··· 122 122 #define KERNEL_HWCAP_SVE_EBF16 __khwcap2_feature(SVE_EBF16) 123 123 #define KERNEL_HWCAP_CSSC __khwcap2_feature(CSSC) 124 124 #define KERNEL_HWCAP_RPRFM __khwcap2_feature(RPRFM) 125 + #define KERNEL_HWCAP_SVE2P1 __khwcap2_feature(SVE2P1) 125 126 126 127 /* 127 128 * This yields a mask that user programs can use to figure out what
+1
arch/arm64/include/uapi/asm/hwcap.h
··· 95 95 #define HWCAP2_SVE_EBF16 (1UL << 33) 96 96 #define HWCAP2_CSSC (1UL << 34) 97 97 #define HWCAP2_RPRFM (1UL << 35) 98 + #define HWCAP2_SVE2P1 (1UL << 36) 98 99 99 100 #endif /* _UAPI__ASM_HWCAP_H */
+1
arch/arm64/kernel/cpufeature.c
··· 2791 2791 HWCAP_CAP(SYS_ID_AA64MMFR2_EL1, ID_AA64MMFR2_EL1_AT_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_USCAT), 2792 2792 #ifdef CONFIG_ARM64_SVE 2793 2793 HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_EL1_SVE_SHIFT, 4, FTR_UNSIGNED, ID_AA64PFR0_EL1_SVE_IMP, CAP_HWCAP, KERNEL_HWCAP_SVE), 2794 + HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_SVEver_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_SVEver_SVE2p1, CAP_HWCAP, KERNEL_HWCAP_SVE2P1), 2794 2795 HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_SVEver_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_SVEver_SVE2, CAP_HWCAP, KERNEL_HWCAP_SVE2), 2795 2796 HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_AES_IMP, CAP_HWCAP, KERNEL_HWCAP_SVEAES), 2796 2797 HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_AES_PMULL128, CAP_HWCAP, KERNEL_HWCAP_SVEPMULL),
+1
arch/arm64/kernel/cpuinfo.c
··· 118 118 [KERNEL_HWCAP_SVE_EBF16] = "sveebf16", 119 119 [KERNEL_HWCAP_CSSC] = "cssc", 120 120 [KERNEL_HWCAP_RPRFM] = "rprfm", 121 + [KERNEL_HWCAP_SVE2P1] = "sve2p1", 121 122 }; 122 123 123 124 #ifdef CONFIG_COMPAT
+1
arch/arm64/tools/sysreg
··· 210 210 Enum 3:0 SVEver 211 211 0b0000 IMP 212 212 0b0001 SVE2 213 + 0b0010 SVE2p1 213 214 EndEnum 214 215 EndSysreg 215 216