@@ -1388,6 +1388,24 @@ static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
1388
1388
SR_FGT (SYS_AIDR_EL1 , HFGRTR , AIDR_EL1 , 1 ),
1389
1389
SR_FGT (SYS_AFSR1_EL1 , HFGRTR , AFSR1_EL1 , 1 ),
1390
1390
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
+
1391
1409
/* HFGITR_EL2 */
1392
1410
SR_FGT (OP_AT_S1E1A , HFGITR , ATS1E1A , 1 ),
1393
1411
SR_FGT (OP_COSP_RCTX , HFGITR , COSPRCTX , 1 ),
@@ -1497,6 +1515,11 @@ static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
1497
1515
SR_FGT (SYS_IC_IVAU , HFGITR , ICIVAU , 1 ),
1498
1516
SR_FGT (SYS_IC_IALLU , HFGITR , ICIALLU , 1 ),
1499
1517
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
+
1500
1523
/* HDFGRTR_EL2 */
1501
1524
SR_FGT (SYS_PMBIDR_EL1 , HDFGRTR , PMBIDR_EL1 , 1 ),
1502
1525
SR_FGT (SYS_PMSNEVFR_EL1 , HDFGRTR , nPMSNEVFR_EL1 , 0 ),
@@ -1889,6 +1912,59 @@ static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
1889
1912
SR_FGT (SYS_DBGBCRn_EL1 (13 ), HDFGRTR , DBGBCRn_EL1 , 1 ),
1890
1913
SR_FGT (SYS_DBGBCRn_EL1 (14 ), HDFGRTR , DBGBCRn_EL1 , 1 ),
1891
1914
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
+
1892
1968
/*
1893
1969
* HDFGWTR_EL2
1894
1970
*
@@ -1899,12 +1975,19 @@ static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
1899
1975
* read-side mappings, and only the write-side mappings that
1900
1976
* differ from the read side, and the trap handler will pick
1901
1977
* the correct shadow register based on the access type.
1978
+ *
1979
+ * Same model applies to the FEAT_FGT2 registers.
1902
1980
*/
1903
1981
SR_FGT (SYS_TRFCR_EL1 , HDFGWTR , TRFCR_EL1 , 1 ),
1904
1982
SR_FGT (SYS_TRCOSLAR , HDFGWTR , TRCOSLAR , 1 ),
1905
1983
SR_FGT (SYS_PMCR_EL0 , HDFGWTR , PMCR_EL0 , 1 ),
1906
1984
SR_FGT (SYS_PMSWINC_EL0 , HDFGWTR , PMSWINC_EL0 , 1 ),
1907
1985
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
+
1908
1991
/*
1909
1992
* HAFGRTR_EL2
1910
1993
*/
0 commit comments