@@ -1012,6 +1012,7 @@ enum fgt_group_id {
10121012 HDFGRTR_GROUP ,
10131013 HDFGWTR_GROUP ,
10141014 HFGITR_GROUP ,
1015+ HAFGRTR_GROUP ,
10151016
10161017 /* Must be last */
10171018 __NR_FGT_GROUP_IDS__
@@ -1689,6 +1690,49 @@ static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
16891690 SR_FGT (SYS_PMCR_EL0 , HDFGWTR , PMCR_EL0 , 1 ),
16901691 SR_FGT (SYS_PMSWINC_EL0 , HDFGWTR , PMSWINC_EL0 , 1 ),
16911692 SR_FGT (SYS_OSLAR_EL1 , HDFGWTR , OSLAR_EL1 , 1 ),
1693+ /*
1694+ * HAFGRTR_EL2
1695+ */
1696+ SR_FGT (SYS_AMEVTYPER1_EL0 (15 ), HAFGRTR , AMEVTYPER115_EL0 , 1 ),
1697+ SR_FGT (SYS_AMEVTYPER1_EL0 (14 ), HAFGRTR , AMEVTYPER114_EL0 , 1 ),
1698+ SR_FGT (SYS_AMEVTYPER1_EL0 (13 ), HAFGRTR , AMEVTYPER113_EL0 , 1 ),
1699+ SR_FGT (SYS_AMEVTYPER1_EL0 (12 ), HAFGRTR , AMEVTYPER112_EL0 , 1 ),
1700+ SR_FGT (SYS_AMEVTYPER1_EL0 (11 ), HAFGRTR , AMEVTYPER111_EL0 , 1 ),
1701+ SR_FGT (SYS_AMEVTYPER1_EL0 (10 ), HAFGRTR , AMEVTYPER110_EL0 , 1 ),
1702+ SR_FGT (SYS_AMEVTYPER1_EL0 (9 ), HAFGRTR , AMEVTYPER19_EL0 , 1 ),
1703+ SR_FGT (SYS_AMEVTYPER1_EL0 (8 ), HAFGRTR , AMEVTYPER18_EL0 , 1 ),
1704+ SR_FGT (SYS_AMEVTYPER1_EL0 (7 ), HAFGRTR , AMEVTYPER17_EL0 , 1 ),
1705+ SR_FGT (SYS_AMEVTYPER1_EL0 (6 ), HAFGRTR , AMEVTYPER16_EL0 , 1 ),
1706+ SR_FGT (SYS_AMEVTYPER1_EL0 (5 ), HAFGRTR , AMEVTYPER15_EL0 , 1 ),
1707+ SR_FGT (SYS_AMEVTYPER1_EL0 (4 ), HAFGRTR , AMEVTYPER14_EL0 , 1 ),
1708+ SR_FGT (SYS_AMEVTYPER1_EL0 (3 ), HAFGRTR , AMEVTYPER13_EL0 , 1 ),
1709+ SR_FGT (SYS_AMEVTYPER1_EL0 (2 ), HAFGRTR , AMEVTYPER12_EL0 , 1 ),
1710+ SR_FGT (SYS_AMEVTYPER1_EL0 (1 ), HAFGRTR , AMEVTYPER11_EL0 , 1 ),
1711+ SR_FGT (SYS_AMEVTYPER1_EL0 (0 ), HAFGRTR , AMEVTYPER10_EL0 , 1 ),
1712+ SR_FGT (SYS_AMEVCNTR1_EL0 (15 ), HAFGRTR , AMEVCNTR115_EL0 , 1 ),
1713+ SR_FGT (SYS_AMEVCNTR1_EL0 (14 ), HAFGRTR , AMEVCNTR114_EL0 , 1 ),
1714+ SR_FGT (SYS_AMEVCNTR1_EL0 (13 ), HAFGRTR , AMEVCNTR113_EL0 , 1 ),
1715+ SR_FGT (SYS_AMEVCNTR1_EL0 (12 ), HAFGRTR , AMEVCNTR112_EL0 , 1 ),
1716+ SR_FGT (SYS_AMEVCNTR1_EL0 (11 ), HAFGRTR , AMEVCNTR111_EL0 , 1 ),
1717+ SR_FGT (SYS_AMEVCNTR1_EL0 (10 ), HAFGRTR , AMEVCNTR110_EL0 , 1 ),
1718+ SR_FGT (SYS_AMEVCNTR1_EL0 (9 ), HAFGRTR , AMEVCNTR19_EL0 , 1 ),
1719+ SR_FGT (SYS_AMEVCNTR1_EL0 (8 ), HAFGRTR , AMEVCNTR18_EL0 , 1 ),
1720+ SR_FGT (SYS_AMEVCNTR1_EL0 (7 ), HAFGRTR , AMEVCNTR17_EL0 , 1 ),
1721+ SR_FGT (SYS_AMEVCNTR1_EL0 (6 ), HAFGRTR , AMEVCNTR16_EL0 , 1 ),
1722+ SR_FGT (SYS_AMEVCNTR1_EL0 (5 ), HAFGRTR , AMEVCNTR15_EL0 , 1 ),
1723+ SR_FGT (SYS_AMEVCNTR1_EL0 (4 ), HAFGRTR , AMEVCNTR14_EL0 , 1 ),
1724+ SR_FGT (SYS_AMEVCNTR1_EL0 (3 ), HAFGRTR , AMEVCNTR13_EL0 , 1 ),
1725+ SR_FGT (SYS_AMEVCNTR1_EL0 (2 ), HAFGRTR , AMEVCNTR12_EL0 , 1 ),
1726+ SR_FGT (SYS_AMEVCNTR1_EL0 (1 ), HAFGRTR , AMEVCNTR11_EL0 , 1 ),
1727+ SR_FGT (SYS_AMEVCNTR1_EL0 (0 ), HAFGRTR , AMEVCNTR10_EL0 , 1 ),
1728+ SR_FGT (SYS_AMCNTENCLR1_EL0 , HAFGRTR , AMCNTEN1 , 1 ),
1729+ SR_FGT (SYS_AMCNTENSET1_EL0 , HAFGRTR , AMCNTEN1 , 1 ),
1730+ SR_FGT (SYS_AMCNTENCLR0_EL0 , HAFGRTR , AMCNTEN0 , 1 ),
1731+ SR_FGT (SYS_AMCNTENSET0_EL0 , HAFGRTR , AMCNTEN0 , 1 ),
1732+ SR_FGT (SYS_AMEVCNTR0_EL0 (3 ), HAFGRTR , AMEVCNTR03_EL0 , 1 ),
1733+ SR_FGT (SYS_AMEVCNTR0_EL0 (2 ), HAFGRTR , AMEVCNTR02_EL0 , 1 ),
1734+ SR_FGT (SYS_AMEVCNTR0_EL0 (1 ), HAFGRTR , AMEVCNTR01_EL0 , 1 ),
1735+ SR_FGT (SYS_AMEVCNTR0_EL0 (0 ), HAFGRTR , AMEVCNTR00_EL0 , 1 ),
16921736};
16931737
16941738static union trap_config get_trap_config (u32 sysreg )
@@ -1909,6 +1953,10 @@ bool __check_nv_sr_forward(struct kvm_vcpu *vcpu)
19091953 val = sanitised_sys_reg (vcpu , HDFGWTR_EL2 );
19101954 break ;
19111955
1956+ case HAFGRTR_GROUP :
1957+ val = sanitised_sys_reg (vcpu , HAFGRTR_EL2 );
1958+ break ;
1959+
19121960 case HFGITR_GROUP :
19131961 val = sanitised_sys_reg (vcpu , HFGITR_EL2 );
19141962 switch (tc .fgf ) {
0 commit comments