@@ -220,6 +220,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
220
220
};
221
221
222
222
static const struct arm64_ftr_bits ftr_id_aa64isar2 [] = {
223
+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_NONSTRICT , FTR_LOWER_SAFE , ID_AA64ISAR2_EL1_LUT_SHIFT , 4 , 0 ),
223
224
ARM64_FTR_BITS (FTR_VISIBLE , FTR_NONSTRICT , FTR_LOWER_SAFE , ID_AA64ISAR2_EL1_CSSC_SHIFT , 4 , 0 ),
224
225
ARM64_FTR_BITS (FTR_VISIBLE , FTR_NONSTRICT , FTR_LOWER_SAFE , ID_AA64ISAR2_EL1_RPRFM_SHIFT , 4 , 0 ),
225
226
ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , ID_AA64ISAR2_EL1_CLRBHB_SHIFT , 4 , 0 ),
@@ -235,6 +236,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar2[] = {
235
236
};
236
237
237
238
static const struct arm64_ftr_bits ftr_id_aa64isar3 [] = {
239
+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_NONSTRICT , FTR_LOWER_SAFE , ID_AA64ISAR3_EL1_FAMINMAX_SHIFT , 4 , 0 ),
238
240
ARM64_FTR_END ,
239
241
};
240
242
@@ -303,6 +305,8 @@ static const struct arm64_ftr_bits ftr_id_aa64zfr0[] = {
303
305
static const struct arm64_ftr_bits ftr_id_aa64smfr0 [] = {
304
306
ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
305
307
FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_FA64_SHIFT , 1 , 0 ),
308
+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
309
+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_LUTv2_SHIFT , 1 , 0 ),
306
310
ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
307
311
FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_SMEver_SHIFT , 4 , 0 ),
308
312
ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
@@ -315,6 +319,10 @@ static const struct arm64_ftr_bits ftr_id_aa64smfr0[] = {
315
319
FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_B16B16_SHIFT , 1 , 0 ),
316
320
ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
317
321
FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_F16F16_SHIFT , 1 , 0 ),
322
+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
323
+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_F8F16_SHIFT , 1 , 0 ),
324
+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
325
+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_F8F32_SHIFT , 1 , 0 ),
318
326
ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
319
327
FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_I8I32_SHIFT , 4 , 0 ),
320
328
ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
@@ -325,10 +333,22 @@ static const struct arm64_ftr_bits ftr_id_aa64smfr0[] = {
325
333
FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_BI32I32_SHIFT , 1 , 0 ),
326
334
ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
327
335
FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_F32F32_SHIFT , 1 , 0 ),
336
+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
337
+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_SF8FMA_SHIFT , 1 , 0 ),
338
+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
339
+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_SF8DP4_SHIFT , 1 , 0 ),
340
+ ARM64_FTR_BITS (FTR_VISIBLE_IF_IS_ENABLED (CONFIG_ARM64_SME ),
341
+ FTR_STRICT , FTR_EXACT , ID_AA64SMFR0_EL1_SF8DP2_SHIFT , 1 , 0 ),
328
342
ARM64_FTR_END ,
329
343
};
330
344
331
345
static const struct arm64_ftr_bits ftr_id_aa64fpfr0 [] = {
346
+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8CVT_SHIFT , 1 , 0 ),
347
+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8FMA_SHIFT , 1 , 0 ),
348
+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8DP4_SHIFT , 1 , 0 ),
349
+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8DP2_SHIFT , 1 , 0 ),
350
+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8E4M3_SHIFT , 1 , 0 ),
351
+ ARM64_FTR_BITS (FTR_VISIBLE , FTR_STRICT , FTR_EXACT , ID_AA64FPFR0_EL1_F8E5M2_SHIFT , 1 , 0 ),
332
352
ARM64_FTR_END ,
333
353
};
334
354
@@ -2859,6 +2879,7 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
2859
2879
HWCAP_CAP (ID_AA64PFR0_EL1 , AdvSIMD , IMP , CAP_HWCAP , KERNEL_HWCAP_ASIMD ),
2860
2880
HWCAP_CAP (ID_AA64PFR0_EL1 , AdvSIMD , FP16 , CAP_HWCAP , KERNEL_HWCAP_ASIMDHP ),
2861
2881
HWCAP_CAP (ID_AA64PFR0_EL1 , DIT , IMP , CAP_HWCAP , KERNEL_HWCAP_DIT ),
2882
+ HWCAP_CAP (ID_AA64PFR2_EL1 , FPMR , IMP , CAP_HWCAP , KERNEL_HWCAP_FPMR ),
2862
2883
HWCAP_CAP (ID_AA64ISAR1_EL1 , DPB , IMP , CAP_HWCAP , KERNEL_HWCAP_DCPOP ),
2863
2884
HWCAP_CAP (ID_AA64ISAR1_EL1 , DPB , DPB2 , CAP_HWCAP , KERNEL_HWCAP_DCPODP ),
2864
2885
HWCAP_CAP (ID_AA64ISAR1_EL1 , JSCVT , IMP , CAP_HWCAP , KERNEL_HWCAP_JSCVT ),
@@ -2872,6 +2893,8 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
2872
2893
HWCAP_CAP (ID_AA64ISAR1_EL1 , BF16 , EBF16 , CAP_HWCAP , KERNEL_HWCAP_EBF16 ),
2873
2894
HWCAP_CAP (ID_AA64ISAR1_EL1 , DGH , IMP , CAP_HWCAP , KERNEL_HWCAP_DGH ),
2874
2895
HWCAP_CAP (ID_AA64ISAR1_EL1 , I8MM , IMP , CAP_HWCAP , KERNEL_HWCAP_I8MM ),
2896
+ HWCAP_CAP (ID_AA64ISAR2_EL1 , LUT , IMP , CAP_HWCAP , KERNEL_HWCAP_LUT ),
2897
+ HWCAP_CAP (ID_AA64ISAR3_EL1 , FAMINMAX , IMP , CAP_HWCAP , KERNEL_HWCAP_FAMINMAX ),
2875
2898
HWCAP_CAP (ID_AA64MMFR2_EL1 , AT , IMP , CAP_HWCAP , KERNEL_HWCAP_USCAT ),
2876
2899
#ifdef CONFIG_ARM64_SVE
2877
2900
HWCAP_CAP (ID_AA64PFR0_EL1 , SVE , IMP , CAP_HWCAP , KERNEL_HWCAP_SVE ),
@@ -2912,19 +2935,31 @@ static const struct arm64_cpu_capabilities arm64_elf_hwcaps[] = {
2912
2935
#ifdef CONFIG_ARM64_SME
2913
2936
HWCAP_CAP (ID_AA64PFR1_EL1 , SME , IMP , CAP_HWCAP , KERNEL_HWCAP_SME ),
2914
2937
HWCAP_CAP (ID_AA64SMFR0_EL1 , FA64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_FA64 ),
2938
+ HWCAP_CAP (ID_AA64SMFR0_EL1 , LUTv2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_LUTV2 ),
2915
2939
HWCAP_CAP (ID_AA64SMFR0_EL1 , SMEver , SME2p1 , CAP_HWCAP , KERNEL_HWCAP_SME2P1 ),
2916
2940
HWCAP_CAP (ID_AA64SMFR0_EL1 , SMEver , SME2 , CAP_HWCAP , KERNEL_HWCAP_SME2 ),
2917
2941
HWCAP_CAP (ID_AA64SMFR0_EL1 , I16I64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I64 ),
2918
2942
HWCAP_CAP (ID_AA64SMFR0_EL1 , F64F64 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F64F64 ),
2919
2943
HWCAP_CAP (ID_AA64SMFR0_EL1 , I16I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I16I32 ),
2920
2944
HWCAP_CAP (ID_AA64SMFR0_EL1 , B16B16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16B16 ),
2921
2945
HWCAP_CAP (ID_AA64SMFR0_EL1 , F16F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F16 ),
2946
+ HWCAP_CAP (ID_AA64SMFR0_EL1 , F8F16 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F16 ),
2947
+ HWCAP_CAP (ID_AA64SMFR0_EL1 , F8F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F8F32 ),
2922
2948
HWCAP_CAP (ID_AA64SMFR0_EL1 , I8I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_I8I32 ),
2923
2949
HWCAP_CAP (ID_AA64SMFR0_EL1 , F16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F16F32 ),
2924
2950
HWCAP_CAP (ID_AA64SMFR0_EL1 , B16F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_B16F32 ),
2925
2951
HWCAP_CAP (ID_AA64SMFR0_EL1 , BI32I32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_BI32I32 ),
2926
2952
HWCAP_CAP (ID_AA64SMFR0_EL1 , F32F32 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_F32F32 ),
2953
+ HWCAP_CAP (ID_AA64SMFR0_EL1 , SF8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8FMA ),
2954
+ HWCAP_CAP (ID_AA64SMFR0_EL1 , SF8DP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP4 ),
2955
+ HWCAP_CAP (ID_AA64SMFR0_EL1 , SF8DP2 , IMP , CAP_HWCAP , KERNEL_HWCAP_SME_SF8DP2 ),
2927
2956
#endif /* CONFIG_ARM64_SME */
2957
+ HWCAP_CAP (ID_AA64FPFR0_EL1 , F8CVT , IMP , CAP_HWCAP , KERNEL_HWCAP_F8CVT ),
2958
+ HWCAP_CAP (ID_AA64FPFR0_EL1 , F8FMA , IMP , CAP_HWCAP , KERNEL_HWCAP_F8FMA ),
2959
+ HWCAP_CAP (ID_AA64FPFR0_EL1 , F8DP4 , IMP , CAP_HWCAP , KERNEL_HWCAP_F8DP4 ),
2960
+ HWCAP_CAP (ID_AA64FPFR0_EL1 , F8DP2 , IMP , CAP_HWCAP , KERNEL_HWCAP_F8DP2 ),
2961
+ HWCAP_CAP (ID_AA64FPFR0_EL1 , F8E4M3 , IMP , CAP_HWCAP , KERNEL_HWCAP_F8E4M3 ),
2962
+ HWCAP_CAP (ID_AA64FPFR0_EL1 , F8E5M2 , IMP , CAP_HWCAP , KERNEL_HWCAP_F8E5M2 ),
2928
2963
{},
2929
2964
};
2930
2965
0 commit comments