Skip to content

Commit 5d5b4e8

Browse files
brooniectmarinas
authored andcommitted
arm64/sve: Report FEAT_SVE_B16B16 to userspace
SVE 2.1 introduced a new feature FEAT_SVE_B16B16 which adds instructions supporting the BFloat16 floating point format. Report this to userspace through the ID registers and hwcap. Reported-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/20230915-arm64-zfr-b16b16-el0-v1-1-f9aba807bdb5@kernel.org Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
1 parent 6465e26 commit 5d5b4e8

File tree

7 files changed

+16
-1
lines changed

7 files changed

+16
-1
lines changed

Documentation/arch/arm64/cpu-feature-registers.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ infrastructure:
268268
+------------------------------+---------+---------+
269269
| SHA3 | [35-32] | y |
270270
+------------------------------+---------+---------+
271+
| B16B16 | [27-24] | y |
272+
+------------------------------+---------+---------+
271273
| BF16 | [23-20] | y |
272274
+------------------------------+---------+---------+
273275
| BitPerm | [19-16] | y |

Documentation/arch/arm64/elf_hwcaps.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,9 @@ HWCAP2_MOPS
308308
HWCAP2_HBC
309309
Functionality implied by ID_AA64ISAR2_EL1.BC == 0b0001.
310310

311+
HWCAP2_SVE_B16B16
312+
Functionality implied by ID_AA64ZFR0_EL1.B16B16 == 0b0001.
313+
311314
4. Unused AT_HWCAP bits
312315
-----------------------
313316

arch/arm64/include/asm/hwcap.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@
139139
#define KERNEL_HWCAP_SME_F16F16 __khwcap2_feature(SME_F16F16)
140140
#define KERNEL_HWCAP_MOPS __khwcap2_feature(MOPS)
141141
#define KERNEL_HWCAP_HBC __khwcap2_feature(HBC)
142+
#define KERNEL_HWCAP_SVE_B16B16 __khwcap2_feature(SVE_B16B16)
142143

143144
/*
144145
* This yields a mask that user programs can use to figure out what

arch/arm64/include/uapi/asm/hwcap.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,6 @@
104104
#define HWCAP2_SME_F16F16 (1UL << 42)
105105
#define HWCAP2_MOPS (1UL << 43)
106106
#define HWCAP2_HBC (1UL << 44)
107+
#define HWCAP2_SVE_B16B16 (1UL << 45)
107108

108109
#endif /* _UAPI__ASM_HWCAP_H */

arch/arm64/kernel/cpufeature.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,8 @@ static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = {
278278
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_SM4_SHIFT, 4, 0),
279279
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
280280
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_SHA3_SHIFT, 4, 0),
281+
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
282+
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_B16B16_SHIFT, 4, 0),
281283
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
282284
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ZFR0_EL1_BF16_SHIFT, 4, 0),
283285
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
@@ -2821,6 +2823,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
28212823
HWCAP_CAP(ID_AA64ZFR0_EL1, AES, IMP, CAP_HWCAP, KERNEL_HWCAP_SVEAES),
28222824
HWCAP_CAP(ID_AA64ZFR0_EL1, AES, PMULL128, CAP_HWCAP, KERNEL_HWCAP_SVEPMULL),
28232825
HWCAP_CAP(ID_AA64ZFR0_EL1, BitPerm, IMP, CAP_HWCAP, KERNEL_HWCAP_SVEBITPERM),
2826+
HWCAP_CAP(ID_AA64ZFR0_EL1, B16B16, IMP, CAP_HWCAP, KERNEL_HWCAP_SVE_B16B16),
28242827
HWCAP_CAP(ID_AA64ZFR0_EL1, BF16, IMP, CAP_HWCAP, KERNEL_HWCAP_SVEBF16),
28252828
HWCAP_CAP(ID_AA64ZFR0_EL1, BF16, EBF16, CAP_HWCAP, KERNEL_HWCAP_SVE_EBF16),
28262829
HWCAP_CAP(ID_AA64ZFR0_EL1, SHA3, IMP, CAP_HWCAP, KERNEL_HWCAP_SVESHA3),

arch/arm64/kernel/cpuinfo.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ static const char *const hwcap_str[] = {
127127
[KERNEL_HWCAP_SME_F16F16] = "smef16f16",
128128
[KERNEL_HWCAP_MOPS] = "mops",
129129
[KERNEL_HWCAP_HBC] = "hbc",
130+
[KERNEL_HWCAP_SVE_B16B16] = "sveb16b16",
130131
};
131132

132133
#ifdef CONFIG_COMPAT

arch/arm64/tools/sysreg

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1026,7 +1026,11 @@ UnsignedEnum 35:32 SHA3
10261026
0b0000 NI
10271027
0b0001 IMP
10281028
EndEnum
1029-
Res0 31:24
1029+
Res0 31:28
1030+
UnsignedEnum 27:24 B16B16
1031+
0b0000 NI
1032+
0b0001 IMP
1033+
EndEnum
10301034
UnsignedEnum 23:20 BF16
10311035
0b0000 NI
10321036
0b0001 IMP

0 commit comments

Comments
 (0)