@@ -325,6 +325,17 @@ static const struct arm64_ftr_bits ftr_id_mmfr4[] = {
325
325
ARM64_FTR_END ,
326
326
};
327
327
328
+ static const struct arm64_ftr_bits ftr_id_isar6 [] = {
329
+ ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , ID_ISAR6_I8MM_SHIFT , 4 , 0 ),
330
+ ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , ID_ISAR6_BF16_SHIFT , 4 , 0 ),
331
+ ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , ID_ISAR6_SPECRES_SHIFT , 4 , 0 ),
332
+ ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , ID_ISAR6_SB_SHIFT , 4 , 0 ),
333
+ ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , ID_ISAR6_FHM_SHIFT , 4 , 0 ),
334
+ ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , ID_ISAR6_DP_SHIFT , 4 , 0 ),
335
+ ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , ID_ISAR6_JSCVT_SHIFT , 4 , 0 ),
336
+ ARM64_FTR_END ,
337
+ };
338
+
328
339
static const struct arm64_ftr_bits ftr_id_pfr0 [] = {
329
340
ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , 12 , 4 , 0 ), /* State3 */
330
341
ARM64_FTR_BITS (FTR_HIDDEN , FTR_STRICT , FTR_LOWER_SAFE , 8 , 4 , 0 ), /* State2 */
@@ -408,6 +419,7 @@ static const struct __ftr_reg_entry {
408
419
ARM64_FTR_REG (SYS_ID_ISAR4_EL1 , ftr_generic_32bits ),
409
420
ARM64_FTR_REG (SYS_ID_ISAR5_EL1 , ftr_id_isar5 ),
410
421
ARM64_FTR_REG (SYS_ID_MMFR4_EL1 , ftr_id_mmfr4 ),
422
+ ARM64_FTR_REG (SYS_ID_ISAR6_EL1 , ftr_id_isar6 ),
411
423
412
424
/* Op1 = 0, CRn = 0, CRm = 3 */
413
425
ARM64_FTR_REG (SYS_MVFR0_EL1 , ftr_generic_32bits ),
@@ -612,6 +624,7 @@ void __init init_cpu_features(struct cpuinfo_arm64 *info)
612
624
init_cpu_ftr_reg (SYS_ID_ISAR3_EL1 , info -> reg_id_isar3 );
613
625
init_cpu_ftr_reg (SYS_ID_ISAR4_EL1 , info -> reg_id_isar4 );
614
626
init_cpu_ftr_reg (SYS_ID_ISAR5_EL1 , info -> reg_id_isar5 );
627
+ init_cpu_ftr_reg (SYS_ID_ISAR6_EL1 , info -> reg_id_isar6 );
615
628
init_cpu_ftr_reg (SYS_ID_MMFR0_EL1 , info -> reg_id_mmfr0 );
616
629
init_cpu_ftr_reg (SYS_ID_MMFR1_EL1 , info -> reg_id_mmfr1 );
617
630
init_cpu_ftr_reg (SYS_ID_MMFR2_EL1 , info -> reg_id_mmfr2 );
@@ -765,6 +778,8 @@ void update_cpu_features(int cpu,
765
778
info -> reg_id_isar4 , boot -> reg_id_isar4 );
766
779
taint |= check_update_ftr_reg (SYS_ID_ISAR5_EL1 , cpu ,
767
780
info -> reg_id_isar5 , boot -> reg_id_isar5 );
781
+ taint |= check_update_ftr_reg (SYS_ID_ISAR6_EL1 , cpu ,
782
+ info -> reg_id_isar6 , boot -> reg_id_isar6 );
768
783
769
784
/*
770
785
* Regardless of the value of the AuxReg field, the AIFSR, ADFSR, and
@@ -843,6 +858,7 @@ static u64 __read_sysreg_by_encoding(u32 sys_id)
843
858
read_sysreg_case (SYS_ID_ISAR3_EL1 );
844
859
read_sysreg_case (SYS_ID_ISAR4_EL1 );
845
860
read_sysreg_case (SYS_ID_ISAR5_EL1 );
861
+ read_sysreg_case (SYS_ID_ISAR6_EL1 );
846
862
read_sysreg_case (SYS_MVFR0_EL1 );
847
863
read_sysreg_case (SYS_MVFR1_EL1 );
848
864
read_sysreg_case (SYS_MVFR2_EL1 );
0 commit comments