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

arm64/hwcap: Add support for FEAT_RPRFM

FEAT_RPRFM adds a new range prefetch hint within the existing PRFM space
for range prefetch hinting. Add a new hwcap to allow userspace to discover
support for the new instruction.

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

authored by

Mark Brown and committed by
Will Deacon
939e4649 b0ab73a5

+13 -1
+3
Documentation/arm64/elf_hwcaps.rst
··· 278 278 HWCAP2_CSSC 279 279 Functionality implied by ID_AA64ISAR2_EL1.CSSC == 0b0001. 280 280 281 + HWCAP2_RPRFM 282 + Functionality implied by ID_AA64ISAR2_EL1.RPRFM == 0b0001. 283 + 281 284 4. Unused AT_HWCAP bits 282 285 ----------------------- 283 286
+1
arch/arm64/include/asm/hwcap.h
··· 121 121 #define KERNEL_HWCAP_EBF16 __khwcap2_feature(EBF16) 122 122 #define KERNEL_HWCAP_SVE_EBF16 __khwcap2_feature(SVE_EBF16) 123 123 #define KERNEL_HWCAP_CSSC __khwcap2_feature(CSSC) 124 + #define KERNEL_HWCAP_RPRFM __khwcap2_feature(RPRFM) 124 125 125 126 /* 126 127 * This yields a mask that user programs can use to figure out what
+1
arch/arm64/include/uapi/asm/hwcap.h
··· 94 94 #define HWCAP2_EBF16 (1UL << 32) 95 95 #define HWCAP2_SVE_EBF16 (1UL << 33) 96 96 #define HWCAP2_CSSC (1UL << 34) 97 + #define HWCAP2_RPRFM (1UL << 35) 97 98 98 99 #endif /* _UAPI__ASM_HWCAP_H */
+2
arch/arm64/kernel/cpufeature.c
··· 213 213 214 214 static const struct arm64_ftr_bits ftr_id_aa64isar2[] = { 215 215 ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_EL1_CSSC_SHIFT, 4, 0), 216 + ARM64_FTR_BITS(FTR_VISIBLE, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64ISAR2_EL1_RPRFM_SHIFT, 4, 0), 216 217 ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_HIGHER_SAFE, ID_AA64ISAR2_EL1_BC_SHIFT, 4, 0), 217 218 ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH), 218 219 FTR_STRICT, FTR_EXACT, ID_AA64ISAR2_EL1_APA3_SHIFT, 4, 0), ··· 2818 2817 HWCAP_CAP(SYS_ID_AA64MMFR0_EL1, ID_AA64MMFR0_EL1_ECV_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_ECV), 2819 2818 HWCAP_CAP(SYS_ID_AA64MMFR1_EL1, ID_AA64MMFR1_EL1_AFP_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_AFP), 2820 2819 HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_EL1_CSSC_SHIFT, 4, FTR_UNSIGNED, ID_AA64ISAR2_EL1_CSSC_IMP, CAP_HWCAP, KERNEL_HWCAP_CSSC), 2820 + HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_EL1_RPRFM_SHIFT, 4, FTR_UNSIGNED, ID_AA64ISAR2_EL1_RPRFM_IMP, CAP_HWCAP, KERNEL_HWCAP_RPRFM), 2821 2821 HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_EL1_RPRES_SHIFT, 4, FTR_UNSIGNED, 1, CAP_HWCAP, KERNEL_HWCAP_RPRES), 2822 2822 HWCAP_CAP(SYS_ID_AA64ISAR2_EL1, ID_AA64ISAR2_EL1_WFxT_SHIFT, 4, FTR_UNSIGNED, ID_AA64ISAR2_EL1_WFxT_IMP, CAP_HWCAP, KERNEL_HWCAP_WFXT), 2823 2823 #ifdef CONFIG_ARM64_SME
+1
arch/arm64/kernel/cpuinfo.c
··· 117 117 [KERNEL_HWCAP_EBF16] = "ebf16", 118 118 [KERNEL_HWCAP_SVE_EBF16] = "sveebf16", 119 119 [KERNEL_HWCAP_CSSC] = "cssc", 120 + [KERNEL_HWCAP_RPRFM] = "rprfm", 120 121 }; 121 122 122 123 #ifdef CONFIG_COMPAT
+5 -1
arch/arm64/tools/sysreg
··· 489 489 0b0000 NI 490 490 0b0001 IMP 491 491 EndEnum 492 - Res0 51:28 492 + Enum 51:48 RPRFM 493 + 0b0000 NI 494 + 0b0001 IMP 495 + EndEnum 496 + Res0 47:28 493 497 Enum 27:24 PAC_frac 494 498 0b0000 NI 495 499 0b0001 IMP