@@ -1388,6 +1388,24 @@ static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
13881388 SR_FGT (SYS_AIDR_EL1 , HFGRTR , AIDR_EL1 , 1 ),
13891389 SR_FGT (SYS_AFSR1_EL1 , HFGRTR , AFSR1_EL1 , 1 ),
13901390 SR_FGT (SYS_AFSR0_EL1 , HFGRTR , AFSR0_EL1 , 1 ),
1391+
1392+ /* HFGRTR2_EL2, HFGWTR2_EL2 */
1393+ SR_FGT (SYS_ACTLRALIAS_EL1 , HFGRTR2 , nACTLRALIAS_EL1 , 0 ),
1394+ SR_FGT (SYS_ACTLRMASK_EL1 , HFGRTR2 , nACTLRMASK_EL1 , 0 ),
1395+ SR_FGT (SYS_CPACRALIAS_EL1 , HFGRTR2 , nCPACRALIAS_EL1 , 0 ),
1396+ SR_FGT (SYS_CPACRMASK_EL1 , HFGRTR2 , nCPACRMASK_EL1 , 0 ),
1397+ SR_FGT (SYS_PFAR_EL1 , HFGRTR2 , nPFAR_EL1 , 0 ),
1398+ SR_FGT (SYS_RCWSMASK_EL1 , HFGRTR2 , nRCWSMASK_EL1 , 0 ),
1399+ SR_FGT (SYS_SCTLR2ALIAS_EL1 , HFGRTR2 , nSCTLRALIAS2_EL1 , 0 ),
1400+ SR_FGT (SYS_SCTLR2MASK_EL1 , HFGRTR2 , nSCTLR2MASK_EL1 , 0 ),
1401+ SR_FGT (SYS_SCTLRALIAS_EL1 , HFGRTR2 , nSCTLRALIAS_EL1 , 0 ),
1402+ SR_FGT (SYS_SCTLRMASK_EL1 , HFGRTR2 , nSCTLRMASK_EL1 , 0 ),
1403+ SR_FGT (SYS_TCR2ALIAS_EL1 , HFGRTR2 , nTCR2ALIAS_EL1 , 0 ),
1404+ SR_FGT (SYS_TCR2MASK_EL1 , HFGRTR2 , nTCR2MASK_EL1 , 0 ),
1405+ SR_FGT (SYS_TCRALIAS_EL1 , HFGRTR2 , nTCRALIAS_EL1 , 0 ),
1406+ SR_FGT (SYS_TCRMASK_EL1 , HFGRTR2 , nTCRMASK_EL1 , 0 ),
1407+ SR_FGT (SYS_ERXGSR_EL1 , HFGRTR2 , nERXGSR_EL1 , 0 ),
1408+
13911409 /* HFGITR_EL2 */
13921410 SR_FGT (OP_AT_S1E1A , HFGITR , ATS1E1A , 1 ),
13931411 SR_FGT (OP_COSP_RCTX , HFGITR , COSPRCTX , 1 ),
@@ -1497,6 +1515,11 @@ static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
14971515 SR_FGT (SYS_IC_IVAU , HFGITR , ICIVAU , 1 ),
14981516 SR_FGT (SYS_IC_IALLU , HFGITR , ICIALLU , 1 ),
14991517 SR_FGT (SYS_IC_IALLUIS , HFGITR , ICIALLUIS , 1 ),
1518+
1519+ /* HFGITR2_EL2 */
1520+ SR_FGT (SYS_DC_CIGDVAPS , HFGITR2 , nDCCIVAPS , 0 ),
1521+ SR_FGT (SYS_DC_CIVAPS , HFGITR2 , nDCCIVAPS , 0 ),
1522+
15001523 /* HDFGRTR_EL2 */
15011524 SR_FGT (SYS_PMBIDR_EL1 , HDFGRTR , PMBIDR_EL1 , 1 ),
15021525 SR_FGT (SYS_PMSNEVFR_EL1 , HDFGRTR , nPMSNEVFR_EL1 , 0 ),
@@ -1889,6 +1912,59 @@ static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
18891912 SR_FGT (SYS_DBGBCRn_EL1 (13 ), HDFGRTR , DBGBCRn_EL1 , 1 ),
18901913 SR_FGT (SYS_DBGBCRn_EL1 (14 ), HDFGRTR , DBGBCRn_EL1 , 1 ),
18911914 SR_FGT (SYS_DBGBCRn_EL1 (15 ), HDFGRTR , DBGBCRn_EL1 , 1 ),
1915+
1916+ /* HDFGRTR2_EL2 */
1917+ SR_FGT (SYS_MDSELR_EL1 , HDFGRTR2 , nMDSELR_EL1 , 0 ),
1918+ SR_FGT (SYS_MDSTEPOP_EL1 , HDFGRTR2 , nMDSTEPOP_EL1 , 0 ),
1919+ SR_FGT (SYS_PMCCNTSVR_EL1 , HDFGRTR2 , nPMSSDATA , 0 ),
1920+ SR_FGT_RANGE (SYS_PMEVCNTSVRn_EL1 (0 ),
1921+ SYS_PMEVCNTSVRn_EL1 (30 ),
1922+ HDFGRTR2 , nPMSSDATA , 0 ),
1923+ SR_FGT (SYS_PMICNTSVR_EL1 , HDFGRTR2 , nPMSSDATA , 0 ),
1924+ SR_FGT (SYS_PMECR_EL1 , HDFGRTR2 , nPMECR_EL1 , 0 ),
1925+ SR_FGT (SYS_PMIAR_EL1 , HDFGRTR2 , nPMIAR_EL1 , 0 ),
1926+ SR_FGT (SYS_PMICFILTR_EL0 , HDFGRTR2 , nPMICFILTR_EL0 , 0 ),
1927+ SR_FGT (SYS_PMICNTR_EL0 , HDFGRTR2 , nPMICNTR_EL0 , 0 ),
1928+ SR_FGT (SYS_PMSSCR_EL1 , HDFGRTR2 , nPMSSCR_EL1 , 0 ),
1929+ SR_FGT (SYS_PMUACR_EL1 , HDFGRTR2 , nPMUACR_EL1 , 0 ),
1930+ SR_FGT (SYS_SPMACCESSR_EL1 , HDFGRTR2 , nSPMACCESSR_EL1 , 0 ),
1931+ SR_FGT (SYS_SPMCFGR_EL1 , HDFGRTR2 , nSPMID , 0 ),
1932+ SR_FGT (SYS_SPMDEVARCH_EL1 , HDFGRTR2 , nSPMID , 0 ),
1933+ SR_FGT (SYS_SPMCGCRn_EL1 (0 ), HDFGRTR2 , nSPMID , 0 ),
1934+ SR_FGT (SYS_SPMCGCRn_EL1 (1 ), HDFGRTR2 , nSPMID , 0 ),
1935+ SR_FGT (SYS_SPMIIDR_EL1 , HDFGRTR2 , nSPMID , 0 ),
1936+ SR_FGT (SYS_SPMCNTENCLR_EL0 , HDFGRTR2 , nSPMCNTEN , 0 ),
1937+ SR_FGT (SYS_SPMCNTENSET_EL0 , HDFGRTR2 , nSPMCNTEN , 0 ),
1938+ SR_FGT (SYS_SPMCR_EL0 , HDFGRTR2 , nSPMCR_EL0 , 0 ),
1939+ SR_FGT (SYS_SPMDEVAFF_EL1 , HDFGRTR2 , nSPMDEVAFF_EL1 , 0 ),
1940+ /*
1941+ * We have up to 64 of these registers in ranges of 16, banked via
1942+ * SPMSELR_EL0.BANK. We're only concerned with the accessors here,
1943+ * not the architectural registers.
1944+ */
1945+ SR_FGT_RANGE (SYS_SPMEVCNTRn_EL0 (0 ),
1946+ SYS_SPMEVCNTRn_EL0 (15 ),
1947+ HDFGRTR2 , nSPMEVCNTRn_EL0 , 0 ),
1948+ SR_FGT_RANGE (SYS_SPMEVFILT2Rn_EL0 (0 ),
1949+ SYS_SPMEVFILT2Rn_EL0 (15 ),
1950+ HDFGRTR2 , nSPMEVTYPERn_EL0 , 0 ),
1951+ SR_FGT_RANGE (SYS_SPMEVFILTRn_EL0 (0 ),
1952+ SYS_SPMEVFILTRn_EL0 (15 ),
1953+ HDFGRTR2 , nSPMEVTYPERn_EL0 , 0 ),
1954+ SR_FGT_RANGE (SYS_SPMEVTYPERn_EL0 (0 ),
1955+ SYS_SPMEVTYPERn_EL0 (15 ),
1956+ HDFGRTR2 , nSPMEVTYPERn_EL0 , 0 ),
1957+ SR_FGT (SYS_SPMINTENCLR_EL1 , HDFGRTR2 , nSPMINTEN , 0 ),
1958+ SR_FGT (SYS_SPMINTENSET_EL1 , HDFGRTR2 , nSPMINTEN , 0 ),
1959+ SR_FGT (SYS_SPMOVSCLR_EL0 , HDFGRTR2 , nSPMOVS , 0 ),
1960+ SR_FGT (SYS_SPMOVSSET_EL0 , HDFGRTR2 , nSPMOVS , 0 ),
1961+ SR_FGT (SYS_SPMSCR_EL1 , HDFGRTR2 , nSPMSCR_EL1 , 0 ),
1962+ SR_FGT (SYS_SPMSELR_EL0 , HDFGRTR2 , nSPMSELR_EL0 , 0 ),
1963+ SR_FGT (SYS_TRCITECR_EL1 , HDFGRTR2 , nTRCITECR_EL1 , 0 ),
1964+ SR_FGT (SYS_PMBMAR_EL1 , HDFGRTR2 , nPMBMAR_EL1 , 0 ),
1965+ SR_FGT (SYS_PMSDSFR_EL1 , HDFGRTR2 , nPMSDSFR_EL1 , 0 ),
1966+ SR_FGT (SYS_TRBMPAM_EL1 , HDFGRTR2 , nTRBMPAM_EL1 , 0 ),
1967+
18921968 /*
18931969 * HDFGWTR_EL2
18941970 *
@@ -1899,12 +1975,19 @@ static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
18991975 * read-side mappings, and only the write-side mappings that
19001976 * differ from the read side, and the trap handler will pick
19011977 * the correct shadow register based on the access type.
1978+ *
1979+ * Same model applies to the FEAT_FGT2 registers.
19021980 */
19031981 SR_FGT (SYS_TRFCR_EL1 , HDFGWTR , TRFCR_EL1 , 1 ),
19041982 SR_FGT (SYS_TRCOSLAR , HDFGWTR , TRCOSLAR , 1 ),
19051983 SR_FGT (SYS_PMCR_EL0 , HDFGWTR , PMCR_EL0 , 1 ),
19061984 SR_FGT (SYS_PMSWINC_EL0 , HDFGWTR , PMSWINC_EL0 , 1 ),
19071985 SR_FGT (SYS_OSLAR_EL1 , HDFGWTR , OSLAR_EL1 , 1 ),
1986+
1987+ /* HDFGWTR2_EL2 */
1988+ SR_FGT (SYS_PMZR_EL0 , HDFGWTR2 , nPMZR_EL0 , 0 ),
1989+ SR_FGT (SYS_SPMZR_EL0 , HDFGWTR2 , nSPMEVCNTRn_EL0 , 0 ),
1990+
19081991 /*
19091992 * HAFGRTR_EL2
19101993 */
0 commit comments