Commit d12aada8 authored by Mark Brown's avatar Mark Brown Committed by Will Deacon
Browse files

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: default avatarMark Brown <broonie@kernel.org>
Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20221017152520.1039165-6-broonie@kernel.org


Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent 989d37fc
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -281,6 +281,9 @@ HWCAP2_CSSC
HWCAP2_RPRFM
HWCAP2_RPRFM
    Functionality implied by ID_AA64ISAR2_EL1.RPRFM == 0b0001.
    Functionality implied by ID_AA64ISAR2_EL1.RPRFM == 0b0001.


HWCAP2_SVE2P1
    Functionality implied by ID_AA64ZFR0_EL1.SVEver == 0b0010.

4. Unused AT_HWCAP bits
4. Unused AT_HWCAP bits
-----------------------
-----------------------


+1 −0
Original line number Original line Diff line number Diff line
@@ -52,6 +52,7 @@ model features for SVE is included in Appendix A.
	HWCAP2_SVEBITPERM
	HWCAP2_SVEBITPERM
	HWCAP2_SVESHA3
	HWCAP2_SVESHA3
	HWCAP2_SVESM4
	HWCAP2_SVESM4
	HWCAP2_SVE2P1


  This list may be extended over time as the SVE architecture evolves.
  This list may be extended over time as the SVE architecture evolves.


+1 −0
Original line number Original line Diff line number Diff line
@@ -122,6 +122,7 @@
#define KERNEL_HWCAP_SVE_EBF16		__khwcap2_feature(SVE_EBF16)
#define KERNEL_HWCAP_SVE_EBF16		__khwcap2_feature(SVE_EBF16)
#define KERNEL_HWCAP_CSSC		__khwcap2_feature(CSSC)
#define KERNEL_HWCAP_CSSC		__khwcap2_feature(CSSC)
#define KERNEL_HWCAP_RPRFM		__khwcap2_feature(RPRFM)
#define KERNEL_HWCAP_RPRFM		__khwcap2_feature(RPRFM)
#define KERNEL_HWCAP_SVE2P1		__khwcap2_feature(SVE2P1)


/*
/*
 * This yields a mask that user programs can use to figure out what
 * This yields a mask that user programs can use to figure out what
+1 −0
Original line number Original line Diff line number Diff line
@@ -95,5 +95,6 @@
#define HWCAP2_SVE_EBF16	(1UL << 33)
#define HWCAP2_SVE_EBF16	(1UL << 33)
#define HWCAP2_CSSC		(1UL << 34)
#define HWCAP2_CSSC		(1UL << 34)
#define HWCAP2_RPRFM		(1UL << 35)
#define HWCAP2_RPRFM		(1UL << 35)
#define HWCAP2_SVE2P1		(1UL << 36)


#endif /* _UAPI__ASM_HWCAP_H */
#endif /* _UAPI__ASM_HWCAP_H */
+1 −0
Original line number Original line Diff line number Diff line
@@ -2791,6 +2791,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
	HWCAP_CAP(SYS_ID_AA64MMFR2_EL1, ID_AA64MMFR2_EL1_AT_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_USCAT),
	HWCAP_CAP(SYS_ID_AA64MMFR2_EL1, ID_AA64MMFR2_EL1_AT_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_USCAT),
#ifdef CONFIG_ARM64_SVE
#ifdef CONFIG_ARM64_SVE
	HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_EL1_SVE_SHIFT, 4, FTR_UNSIGNED, ID_AA64PFR0_EL1_SVE_IMP, CAP_HWCAP, KERNEL_HWCAP_SVE),
	HWCAP_CAP(SYS_ID_AA64PFR0_EL1, ID_AA64PFR0_EL1_SVE_SHIFT, 4, FTR_UNSIGNED, ID_AA64PFR0_EL1_SVE_IMP, CAP_HWCAP, KERNEL_HWCAP_SVE),
	HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_SVEver_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_SVEver_SVE2p1, CAP_HWCAP, KERNEL_HWCAP_SVE2P1),
	HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_SVEver_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_SVEver_SVE2, CAP_HWCAP, KERNEL_HWCAP_SVE2),
	HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_SVEver_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_SVEver_SVE2, CAP_HWCAP, KERNEL_HWCAP_SVE2),
	HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_AES_IMP, CAP_HWCAP, KERNEL_HWCAP_SVEAES),
	HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_AES_IMP, CAP_HWCAP, KERNEL_HWCAP_SVEAES),
	HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_AES_PMULL128, CAP_HWCAP, KERNEL_HWCAP_SVEPMULL),
	HWCAP_CAP(SYS_ID_AA64ZFR0_EL1, ID_AA64ZFR0_EL1_AES_SHIFT, 4, FTR_UNSIGNED, ID_AA64ZFR0_EL1_AES_PMULL128, CAP_HWCAP, KERNEL_HWCAP_SVEPMULL),
Loading