Commit 338a835f authored by Joey Gouly's avatar Joey Gouly Committed by Catalin Marinas
Browse files

arm64: add FEAT_LRCPC3 HWCAP



FEAT_LRCPC3 adds more instructions to support the Release Consistency model.
Add a HWCAP so that userspace can make decisions about instructions it can use.

Signed-off-by: default avatarJoey Gouly <joey.gouly@arm.com>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20230919162757.2707023-2-joey.gouly@arm.com


[catalin.marinas@arm.com: change the HWCAP number]
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 3accaef1
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -311,6 +311,9 @@ HWCAP2_HBC
HWCAP2_SVE_B16B16
    Functionality implied by ID_AA64ZFR0_EL1.B16B16 == 0b0001.

HWCAP2_LRCPC3
    Functionality implied by ID_AA64ISAR1_EL1.LRCPC == 0b0011.

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

+1 −0
Original line number Diff line number Diff line
@@ -140,6 +140,7 @@
#define KERNEL_HWCAP_MOPS		__khwcap2_feature(MOPS)
#define KERNEL_HWCAP_HBC		__khwcap2_feature(HBC)
#define KERNEL_HWCAP_SVE_B16B16		__khwcap2_feature(SVE_B16B16)
#define KERNEL_HWCAP_LRCPC3		__khwcap2_feature(LRCPC3)

/*
 * This yields a mask that user programs can use to figure out what
+1 −0
Original line number Diff line number Diff line
@@ -105,5 +105,6 @@
#define HWCAP2_MOPS		(1UL << 43)
#define HWCAP2_HBC		(1UL << 44)
#define HWCAP2_SVE_B16B16	(1UL << 45)
#define HWCAP2_LRCPC3		(1UL << 46)

#endif /* _UAPI__ASM_HWCAP_H */
+1 −0
Original line number Diff line number Diff line
@@ -2809,6 +2809,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
	HWCAP_CAP(ID_AA64ISAR1_EL1, FCMA, IMP, CAP_HWCAP, KERNEL_HWCAP_FCMA),
	HWCAP_CAP(ID_AA64ISAR1_EL1, LRCPC, IMP, CAP_HWCAP, KERNEL_HWCAP_LRCPC),
	HWCAP_CAP(ID_AA64ISAR1_EL1, LRCPC, LRCPC2, CAP_HWCAP, KERNEL_HWCAP_ILRCPC),
	HWCAP_CAP(ID_AA64ISAR1_EL1, LRCPC, LRCPC3, CAP_HWCAP, KERNEL_HWCAP_LRCPC3),
	HWCAP_CAP(ID_AA64ISAR1_EL1, FRINTTS, IMP, CAP_HWCAP, KERNEL_HWCAP_FRINT),
	HWCAP_CAP(ID_AA64ISAR1_EL1, SB, IMP, CAP_HWCAP, KERNEL_HWCAP_SB),
	HWCAP_CAP(ID_AA64ISAR1_EL1, BF16, IMP, CAP_HWCAP, KERNEL_HWCAP_BF16),
+1 −0
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@ static const char *const hwcap_str[] = {
	[KERNEL_HWCAP_MOPS]		= "mops",
	[KERNEL_HWCAP_HBC]		= "hbc",
	[KERNEL_HWCAP_SVE_B16B16]	= "sveb16b16",
	[KERNEL_HWCAP_LRCPC3]		= "lrcpc3",
};

#ifdef CONFIG_COMPAT
Loading