15548ab9bSManish PandeyArchitecture Features 25548ab9bSManish Pandey===================== 35548ab9bSManish Pandey 45548ab9bSManish PandeyThe Arm architecture evolves through versioning, with new architectural features being introduced 5714a1a93SManish Pandeyalmost every year listed in `Feature_description`_. While most of these features require no control 6714a1a93SManish Pandeyat EL3, some demand explicit configuration of EL3 control registers to enable their use at lower 7714a1a93SManish PandeyException Levels. For features with EL3 controls, it is relatively straightforward to examine the 8714a1a93SManish Pandeycode and determine whether TF-A support them. However, for features that are transparent to EL3, it 9714a1a93SManish Pandeyis more challenging to confirm whether they have been analyzed and verified as not requiring changes 10714a1a93SManish Pandeyin TF-A. 115548ab9bSManish Pandey 125548ab9bSManish PandeyThis document serves as a central reference point to track and clarify the support status of 135548ab9bSManish Pandeyarchitectural features within TF-A. 145548ab9bSManish Pandey 155548ab9bSManish PandeyThis document organizes features according to the yearly updates, while the specific architecture 165548ab9bSManish Pandeyversions (8.X, 9.X) to which they apply can be found in `Feature_description`_ 175548ab9bSManish Pandey 185548ab9bSManish Pandey.. note:: 195548ab9bSManish Pandey 205548ab9bSManish Pandey **Status legend** — 215548ab9bSManish Pandey 225548ab9bSManish Pandey * ``OK``: TF-A has explicit support; 235548ab9bSManish Pandey * ``NA``: Transparent from EL3 (no EL3 changes required); 245548ab9bSManish Pandey * ``NO``: Analyzed but decided not to implement; 255548ab9bSManish Pandey * ``WIP``: Implementation in progress; 265548ab9bSManish Pandey * *(empty)*: Not analyzed. 275548ab9bSManish Pandey 285548ab9bSManish Pandey2025 Extensions 295548ab9bSManish Pandey--------------- 305548ab9bSManish Pandey 315548ab9bSManish Pandey+-------------------------+--------+ 325548ab9bSManish Pandey| Feature | Status | 335548ab9bSManish Pandey+=========================+========+ 345548ab9bSManish Pandey| FEAT_GCIE | | 355548ab9bSManish Pandey+-------------------------+--------+ 365548ab9bSManish Pandey| FEAT_GCIE_LEGACY | | 375548ab9bSManish Pandey+-------------------------+--------+ 385548ab9bSManish Pandey| FEAT_F16F32DOT | | 395548ab9bSManish Pandey+-------------------------+--------+ 405548ab9bSManish Pandey| FEAT_F16F32MM | | 415548ab9bSManish Pandey+-------------------------+--------+ 425548ab9bSManish Pandey| FEAT_F16MM | | 435548ab9bSManish Pandey+-------------------------+--------+ 445548ab9bSManish Pandey| FEAT_SVE_B16MM | | 455548ab9bSManish Pandey+-------------------------+--------+ 465548ab9bSManish Pandey| FEAT_SME2p3 | | 475548ab9bSManish Pandey+-------------------------+--------+ 485548ab9bSManish Pandey| FEAT_MTE_EIRG | NA | 495548ab9bSManish Pandey+-------------------------+--------+ 505548ab9bSManish Pandey| FEAT_MTETC | | 515548ab9bSManish Pandey+-------------------------+--------+ 525548ab9bSManish Pandey| FEAT_SVE2p3 | | 535548ab9bSManish Pandey+-------------------------+--------+ 545548ab9bSManish Pandey| FEAT_SCR2 | | 555548ab9bSManish Pandey+-------------------------+--------+ 565548ab9bSManish Pandey| FEAT_LSCP | | 575548ab9bSManish Pandey+-------------------------+--------+ 585548ab9bSManish Pandey| FEAT_MPAMv2_VID | | 595548ab9bSManish Pandey+-------------------------+--------+ 605548ab9bSManish Pandey| FEAT_MPAMv2_MSC | | 615548ab9bSManish Pandey+-------------------------+--------+ 625548ab9bSManish Pandey| FEAT_MPAMv2_MSC_MON_SEC | | 635548ab9bSManish Pandey+-------------------------+--------+ 645548ab9bSManish Pandey| FEAT_MPAMv2_ALT_ID | | 655548ab9bSManish Pandey+-------------------------+--------+ 665548ab9bSManish Pandey| FEAT_MPAMv2 | | 675548ab9bSManish Pandey+-------------------------+--------+ 685548ab9bSManish Pandey| FEAT_FDIT | | 695548ab9bSManish Pandey+-------------------------+--------+ 705548ab9bSManish Pandey| FEAT_CMH | | 715548ab9bSManish Pandey+-------------------------+--------+ 725548ab9bSManish Pandey| FEAT_EAESR | | 735548ab9bSManish Pandey+-------------------------+--------+ 745548ab9bSManish Pandey| FEAT_TLBID | | 755548ab9bSManish Pandey+-------------------------+--------+ 765548ab9bSManish Pandey| FEAT_SRMASK2 | | 775548ab9bSManish Pandey+-------------------------+--------+ 785548ab9bSManish Pandey| FEAT_BBML3 | | 795548ab9bSManish Pandey+-------------------------+--------+ 805548ab9bSManish Pandey| FEAT_NV3 | | 815548ab9bSManish Pandey+-------------------------+--------+ 825548ab9bSManish Pandey| FEAT_PAuth_EnhCtl | | 835548ab9bSManish Pandey+-------------------------+--------+ 845548ab9bSManish Pandey| FEAT_LORRL | | 855548ab9bSManish Pandey+-------------------------+--------+ 865548ab9bSManish Pandey 875548ab9bSManish Pandey2024 Extensions 885548ab9bSManish Pandey--------------- 895548ab9bSManish Pandey 905548ab9bSManish Pandey+-----------------------+--------+ 915548ab9bSManish Pandey| Feature | Status | 925548ab9bSManish Pandey+=======================+========+ 935548ab9bSManish Pandey| FEAT_PMUv3_EXTPMN | | 945548ab9bSManish Pandey+-----------------------+--------+ 955548ab9bSManish Pandey| FEAT_SPEv1p5 | | 965548ab9bSManish Pandey+-----------------------+--------+ 975548ab9bSManish Pandey| FEAT_SPE_EXC | | 985548ab9bSManish Pandey+-----------------------+--------+ 995548ab9bSManish Pandey| FEAT_SPE_nVM | | 1005548ab9bSManish Pandey+-----------------------+--------+ 1015548ab9bSManish Pandey| FEAT_TRBEv1p1 | | 1025548ab9bSManish Pandey+-----------------------+--------+ 1035548ab9bSManish Pandey| FEAT_TRBE_EXC | | 1045548ab9bSManish Pandey+-----------------------+--------+ 1055548ab9bSManish Pandey| FEAT_SME_MOP4 | | 1065548ab9bSManish Pandey+-----------------------+--------+ 1075548ab9bSManish Pandey| FEAT_SME_TMOP | | 1085548ab9bSManish Pandey+-----------------------+--------+ 1095548ab9bSManish Pandey| FEAT_PoPS | | 1105548ab9bSManish Pandey+-----------------------+--------+ 1115548ab9bSManish Pandey| FEAT_SME2p2 | | 1125548ab9bSManish Pandey+-----------------------+--------+ 1135548ab9bSManish Pandey| FEAT_CMPBR | | 1145548ab9bSManish Pandey+-----------------------+--------+ 1155548ab9bSManish Pandey| FEAT_SSVE_AES | | 1165548ab9bSManish Pandey+-----------------------+--------+ 1175548ab9bSManish Pandey| FEAT_RME_GPC3 | WIP | 1185548ab9bSManish Pandey+-----------------------+--------+ 1195548ab9bSManish Pandey| FEAT_RME_GDI | WIP | 1205548ab9bSManish Pandey+-----------------------+--------+ 1215548ab9bSManish Pandey| FEAT_SVE2p2 | | 1225548ab9bSManish Pandey+-----------------------+--------+ 1235548ab9bSManish Pandey| FEAT_SSVE_BitPerm | | 1245548ab9bSManish Pandey+-----------------------+--------+ 1255548ab9bSManish Pandey| FEAT_SSVE_FEXPA | | 1265548ab9bSManish Pandey+-----------------------+--------+ 1275548ab9bSManish Pandey| FEAT_SVE_AES2 | | 1285548ab9bSManish Pandey+-----------------------+--------+ 1295548ab9bSManish Pandey| FEAT_LSFE | | 1305548ab9bSManish Pandey+-----------------------+--------+ 1315548ab9bSManish Pandey| FEAT_FPRCVT | | 1325548ab9bSManish Pandey+-----------------------+--------+ 1335548ab9bSManish Pandey| FEAT_SVE_F16F32MM | | 1345548ab9bSManish Pandey+-----------------------+--------+ 1355548ab9bSManish Pandey| FEAT_F8F16MM | | 1365548ab9bSManish Pandey+-----------------------+--------+ 1375548ab9bSManish Pandey| FEAT_F8F32MM | | 1385548ab9bSManish Pandey+-----------------------+--------+ 1395548ab9bSManish Pandey| FEAT_SVE_BFSCALE | | 1405548ab9bSManish Pandey+-----------------------+--------+ 1415548ab9bSManish Pandey| FEAT_OCCMO | | 1425548ab9bSManish Pandey+-----------------------+--------+ 1435548ab9bSManish Pandey| FEAT_LS64WB | | 1445548ab9bSManish Pandey+-----------------------+--------+ 1455548ab9bSManish Pandey| FEAT_AMU_EXTACR | | 1465548ab9bSManish Pandey+-----------------------+--------+ 1475548ab9bSManish Pandey| FEAT_MPAM_MSC_DOMAINS | | 1485548ab9bSManish Pandey+-----------------------+--------+ 1495548ab9bSManish Pandey| FEAT_MPAM_MSC_DCTRL | | 1505548ab9bSManish Pandey+-----------------------+--------+ 1515548ab9bSManish Pandey| FEAT_MPAM_PE_BW_CTRL | OK | 1525548ab9bSManish Pandey+-----------------------+--------+ 1535548ab9bSManish Pandey| FEAT_PCDPHINT | | 1545548ab9bSManish Pandey+-----------------------+--------+ 1555548ab9bSManish Pandey| FEAT_SRMASK | | 1565548ab9bSManish Pandey+-----------------------+--------+ 1575548ab9bSManish Pandey| FEAT_IDTE3 | WIP | 1585548ab9bSManish Pandey+-----------------------+--------+ 1595548ab9bSManish Pandey| FEAT_UINJ | WIP | 1605548ab9bSManish Pandey+-----------------------+--------+ 1615548ab9bSManish Pandey| FEAT_NV2p1 | | 1625548ab9bSManish Pandey+-----------------------+--------+ 1635548ab9bSManish Pandey| FEAT_LSUI | | 1645548ab9bSManish Pandey+-----------------------+--------+ 1655548ab9bSManish Pandey 1665548ab9bSManish Pandey2023 Extensions 1675548ab9bSManish Pandey--------------- 1685548ab9bSManish Pandey 1695548ab9bSManish Pandey+-------------------+--------+ 1705548ab9bSManish Pandey| Feature | Status | 1715548ab9bSManish Pandey+===================+========+ 1725548ab9bSManish Pandey| FEAT_E2H0 | NA | 1735548ab9bSManish Pandey+-------------------+--------+ 1745548ab9bSManish Pandey| FEAT_SME_LUTv2 | NA | 1755548ab9bSManish Pandey+-------------------+--------+ 1765548ab9bSManish Pandey| FEAT_LUT | NA | 1775548ab9bSManish Pandey+-------------------+--------+ 1785548ab9bSManish Pandey| FEAT_FAMINMAX | NA | 1795548ab9bSManish Pandey+-------------------+--------+ 1805548ab9bSManish Pandey| FEAT_FPMR | OK | 1815548ab9bSManish Pandey+-------------------+--------+ 1825548ab9bSManish Pandey| FEAT_FP8 | NA | 1835548ab9bSManish Pandey+-------------------+--------+ 1845548ab9bSManish Pandey| FEAT_FP8FMA | NA | 1855548ab9bSManish Pandey+-------------------+--------+ 1865548ab9bSManish Pandey| FEAT_SSVE_FP8FMA | NA | 1875548ab9bSManish Pandey+-------------------+--------+ 1885548ab9bSManish Pandey| FEAT_FP8DOT4 | NA | 1895548ab9bSManish Pandey+-------------------+--------+ 1905548ab9bSManish Pandey| FEAT_SSVE_FP8DOT4 | NA | 1915548ab9bSManish Pandey+-------------------+--------+ 1925548ab9bSManish Pandey| FEAT_FP8DOT2 | NA | 1935548ab9bSManish Pandey+-------------------+--------+ 1945548ab9bSManish Pandey| FEAT_SSVE_FP8DOT2 | NA | 1955548ab9bSManish Pandey+-------------------+--------+ 1965548ab9bSManish Pandey| FEAT_SME_F8F16 | NA | 1975548ab9bSManish Pandey+-------------------+--------+ 1985548ab9bSManish Pandey| FEAT_SME_F8F32 | NA | 1995548ab9bSManish Pandey+-------------------+--------+ 2005548ab9bSManish Pandey| FEAT_CPA | NA | 2015548ab9bSManish Pandey+-------------------+--------+ 2025548ab9bSManish Pandey| FEAT_CPA2 | OK | 2035548ab9bSManish Pandey+-------------------+--------+ 2045548ab9bSManish Pandey| FEAT_STEP2 | | 2055548ab9bSManish Pandey+-------------------+--------+ 2065548ab9bSManish Pandey| FEAT_BWE2 | NA | 2075548ab9bSManish Pandey+-------------------+--------+ 2085548ab9bSManish Pandey| FEAT_SPE_FPF | NA | 2095548ab9bSManish Pandey+-------------------+--------+ 2105548ab9bSManish Pandey| FEAT_SPE_EFT | NA | 2115548ab9bSManish Pandey+-------------------+--------+ 2125548ab9bSManish Pandey| FEAT_PMUv3_TH2 | NA | 2135548ab9bSManish Pandey+-------------------+--------+ 2145548ab9bSManish Pandey| FEAT_SPMU2 | NA | 2155548ab9bSManish Pandey+-------------------+--------+ 2165548ab9bSManish Pandey| FEAT_E3DSE | | 2175548ab9bSManish Pandey+-------------------+--------+ 2185548ab9bSManish Pandey| FEAT_PMUv3_SME | NA | 2195548ab9bSManish Pandey+-------------------+--------+ 2205548ab9bSManish Pandey| FEAT_SPE_SME | NA | 2215548ab9bSManish Pandey+-------------------+--------+ 2225548ab9bSManish Pandey| FEAT_SPE_ALTCLK | NA | 2235548ab9bSManish Pandey+-------------------+--------+ 2245548ab9bSManish Pandey| FEAT_HDBSS | | 2255548ab9bSManish Pandey+-------------------+--------+ 2265548ab9bSManish Pandey| FEAT_HACDBS | | 2275548ab9bSManish Pandey+-------------------+--------+ 2285548ab9bSManish Pandey| FEAT_TLBIW | NA | 2295548ab9bSManish Pandey+-------------------+--------+ 2305548ab9bSManish Pandey| FEAT_ASID2 | NA | 2315548ab9bSManish Pandey+-------------------+--------+ 2325548ab9bSManish Pandey| FEAT_RME_GPC2 | WIP | 2335548ab9bSManish Pandey+-------------------+--------+ 2345548ab9bSManish Pandey| FEAT_FGWTE3 | OK | 2355548ab9bSManish Pandey+-------------------+--------+ 2365548ab9bSManish Pandey| FEAT_PAuth_LR | OK | 2375548ab9bSManish Pandey+-------------------+--------+ 2385548ab9bSManish Pandey| FEAT_ETS3 | NA | 2395548ab9bSManish Pandey+-------------------+--------+ 2405548ab9bSManish Pandey 2415548ab9bSManish Pandey2022 Extensions 2425548ab9bSManish Pandey--------------- 2435548ab9bSManish Pandey 2445548ab9bSManish Pandey+--------------------------+--------+ 2455548ab9bSManish Pandey| Feature | Status | 2465548ab9bSManish Pandey+==========================+========+ 2475548ab9bSManish Pandey| FEAT_BWE | | 2485548ab9bSManish Pandey+--------------------------+--------+ 2495548ab9bSManish Pandey| FEAT_ADERR | | 2505548ab9bSManish Pandey+--------------------------+--------+ 2515548ab9bSManish Pandey| FEAT_ANERR | | 2525548ab9bSManish Pandey+--------------------------+--------+ 2535548ab9bSManish Pandey| FEAT_DoubleFault2 | | 2545548ab9bSManish Pandey+--------------------------+--------+ 2555548ab9bSManish Pandey| FEAT_PFAR | OK | 2565548ab9bSManish Pandey+--------------------------+--------+ 2575548ab9bSManish Pandey| FEAT_RASv2 | | 2585548ab9bSManish Pandey+--------------------------+--------+ 2595548ab9bSManish Pandey| FEAT_CSSC | | 2605548ab9bSManish Pandey+--------------------------+--------+ 2615548ab9bSManish Pandey| FEAT_RPRFM | | 2625548ab9bSManish Pandey+--------------------------+--------+ 2635548ab9bSManish Pandey| FEAT_PRFMSLC | | 2645548ab9bSManish Pandey+--------------------------+--------+ 2655548ab9bSManish Pandey| FEAT_SPECRES2 | | 2665548ab9bSManish Pandey+--------------------------+--------+ 267714a1a93SManish Pandey| FEAT_CLRBHB | Ok | 2685548ab9bSManish Pandey+--------------------------+--------+ 2695548ab9bSManish Pandey| FEAT_ECBHB | NA | 2705548ab9bSManish Pandey+--------------------------+--------+ 2715548ab9bSManish Pandey| FEAT_SME2p1 | | 2725548ab9bSManish Pandey+--------------------------+--------+ 2735548ab9bSManish Pandey| FEAT_SME_F16F16 | | 2745548ab9bSManish Pandey+--------------------------+--------+ 2755548ab9bSManish Pandey| FEAT_SVE_B16B16 | | 2765548ab9bSManish Pandey+--------------------------+--------+ 2775548ab9bSManish Pandey| FEAT_SME_B16B16 | | 2785548ab9bSManish Pandey+--------------------------+--------+ 2795548ab9bSManish Pandey| FEAT_FGT2 | OK | 2805548ab9bSManish Pandey+--------------------------+--------+ 2815548ab9bSManish Pandey| FEAT_MTE4 | NA | 2825548ab9bSManish Pandey+--------------------------+--------+ 2835548ab9bSManish Pandey| FEAT_MTE_CANONICAL_TAGS | NA | 2845548ab9bSManish Pandey+--------------------------+--------+ 2855548ab9bSManish Pandey| FEAT_MTE_NO_ADDRESS_TAGS | NA | 2865548ab9bSManish Pandey+--------------------------+--------+ 2875548ab9bSManish Pandey| FEAT_MTE_TAGGED_FAR | | 2885548ab9bSManish Pandey+--------------------------+--------+ 2895548ab9bSManish Pandey| FEAT_MTE_PERM | NA | 2905548ab9bSManish Pandey+--------------------------+--------+ 2915548ab9bSManish Pandey| FEAT_MTE_STORE_ONLY | NA | 2925548ab9bSManish Pandey+--------------------------+--------+ 2935548ab9bSManish Pandey| FEAT_ITE | | 2945548ab9bSManish Pandey+--------------------------+--------+ 2955548ab9bSManish Pandey| FEAT_TRBE_EXT | | 2965548ab9bSManish Pandey+--------------------------+--------+ 2975548ab9bSManish Pandey| FEAT_TRBE_MPAM | | 2985548ab9bSManish Pandey+--------------------------+--------+ 2995548ab9bSManish Pandey| FEAT_ETEv1p3 | | 3005548ab9bSManish Pandey+--------------------------+--------+ 3015548ab9bSManish Pandey| FEAT_GCS | OK | 3025548ab9bSManish Pandey+--------------------------+--------+ 3035548ab9bSManish Pandey| FEAT_CHK | | 3045548ab9bSManish Pandey+--------------------------+--------+ 3055548ab9bSManish Pandey| FEAT_SPE_DPFZS | | 3065548ab9bSManish Pandey+--------------------------+--------+ 3075548ab9bSManish Pandey| FEAT_SPE_CRR | | 3085548ab9bSManish Pandey+--------------------------+--------+ 309714a1a93SManish Pandey| FEAT_EBEP | OK | 3105548ab9bSManish Pandey+--------------------------+--------+ 3115548ab9bSManish Pandey| FEAT_SEBEP | OK | 3125548ab9bSManish Pandey+--------------------------+--------+ 3135548ab9bSManish Pandey| FEAT_PMUv3_SS | | 3145548ab9bSManish Pandey+--------------------------+--------+ 3155548ab9bSManish Pandey| FEAT_SPMU | | 3165548ab9bSManish Pandey+--------------------------+--------+ 3175548ab9bSManish Pandey| FEAT_PMUv3_ICNTR | | 3185548ab9bSManish Pandey+--------------------------+--------+ 3195548ab9bSManish Pandey| FEAT_PMUv3p9 | | 3205548ab9bSManish Pandey+--------------------------+--------+ 3215548ab9bSManish Pandey| FEAT_SVE2p1 | | 3225548ab9bSManish Pandey+--------------------------+--------+ 3235548ab9bSManish Pandey| FEAT_Debugv8p9 | OK | 3245548ab9bSManish Pandey+--------------------------+--------+ 3255548ab9bSManish Pandey| FEAT_ABLE | | 3265548ab9bSManish Pandey+--------------------------+--------+ 3275548ab9bSManish Pandey| FEAT_PCSRv8p9 | | 3285548ab9bSManish Pandey+--------------------------+--------+ 3295548ab9bSManish Pandey| FEAT_LRCPC3 | | 3305548ab9bSManish Pandey+--------------------------+--------+ 3315548ab9bSManish Pandey| FEAT_SPEv1p4 | | 3325548ab9bSManish Pandey+--------------------------+--------+ 3335548ab9bSManish Pandey| FEAT_SPE_FDS | | 3345548ab9bSManish Pandey+--------------------------+--------+ 3355548ab9bSManish Pandey| FEAT_PMUv3_EDGE | | 3365548ab9bSManish Pandey+--------------------------+--------+ 3375548ab9bSManish Pandey| FEAT_D128 | OK | 3385548ab9bSManish Pandey+--------------------------+--------+ 3395548ab9bSManish Pandey| FEAT_AIE | OK | 3405548ab9bSManish Pandey+--------------------------+--------+ 3415548ab9bSManish Pandey| FEAT_S1PIE | OK | 3425548ab9bSManish Pandey+--------------------------+--------+ 3435548ab9bSManish Pandey| FEAT_ATS1A | | 3445548ab9bSManish Pandey+--------------------------+--------+ 3455548ab9bSManish Pandey| FEAT_S1POE | OK | 3465548ab9bSManish Pandey+--------------------------+--------+ 3475548ab9bSManish Pandey| FEAT_S2PIE | OK | 3485548ab9bSManish Pandey+--------------------------+--------+ 3495548ab9bSManish Pandey| FEAT_S2POE | OK | 3505548ab9bSManish Pandey+--------------------------+--------+ 3515548ab9bSManish Pandey| FEAT_SYSREG128 | OK | 3525548ab9bSManish Pandey+--------------------------+--------+ 3535548ab9bSManish Pandey| FEAT_SYSINSTR128 | | 3545548ab9bSManish Pandey+--------------------------+--------+ 3555548ab9bSManish Pandey| FEAT_LSE128 | | 3565548ab9bSManish Pandey+--------------------------+--------+ 3575548ab9bSManish Pandey| FEAT_HAFT | | 3585548ab9bSManish Pandey+--------------------------+--------+ 3595548ab9bSManish Pandey| FEAT_THE | OK | 3605548ab9bSManish Pandey+--------------------------+--------+ 3615548ab9bSManish Pandey| FEAT_LVA3 | | 3625548ab9bSManish Pandey+--------------------------+--------+ 3635548ab9bSManish Pandey| FEAT_MTE_ASYNC | | 3645548ab9bSManish Pandey+--------------------------+--------+ 3655548ab9bSManish Pandey| FEAT_EDHSR | | 3665548ab9bSManish Pandey+--------------------------+--------+ 3675548ab9bSManish Pandey| FEAT_AMU_EXT64 | | 3685548ab9bSManish Pandey+--------------------------+--------+ 3695548ab9bSManish Pandey 3705548ab9bSManish Pandey 3715548ab9bSManish Pandey2021 Extensions 3725548ab9bSManish Pandey--------------- 3735548ab9bSManish Pandey 3745548ab9bSManish Pandey+------------------+--------+ 3755548ab9bSManish Pandey| Feature | Status | 3765548ab9bSManish Pandey+==================+========+ 3775548ab9bSManish Pandey| FEAT_SME2 | OK | 3785548ab9bSManish Pandey+------------------+--------+ 3795548ab9bSManish Pandey| FEAT_MEC | OK | 3805548ab9bSManish Pandey+------------------+--------+ 3815548ab9bSManish Pandey| FEAT_BRBEv1p1 | WIP | 3825548ab9bSManish Pandey+------------------+--------+ 3835548ab9bSManish Pandey| FEAT_CMOW | NA | 3845548ab9bSManish Pandey+------------------+--------+ 3855548ab9bSManish Pandey| FEAT_Debugv8p8 | NA | 3865548ab9bSManish Pandey+------------------+--------+ 3875548ab9bSManish Pandey| FEAT_HBC | NA | 3885548ab9bSManish Pandey+------------------+--------+ 3895548ab9bSManish Pandey| FEAT_MOPS | OK | 3905548ab9bSManish Pandey+------------------+--------+ 3915548ab9bSManish Pandey| FEAT_NMI | OK | 3925548ab9bSManish Pandey+------------------+--------+ 3935548ab9bSManish Pandey| FEAT_SPEv1p3 | NA | 3945548ab9bSManish Pandey+------------------+--------+ 3955548ab9bSManish Pandey| FEAT_TIDCP1 | NA | 3965548ab9bSManish Pandey+------------------+--------+ 3975548ab9bSManish Pandey| FEAT_PMUv3_TH | NA | 3985548ab9bSManish Pandey+------------------+--------+ 3995548ab9bSManish Pandey| FEAT_PMUv3p8 | NA | 4005548ab9bSManish Pandey+------------------+--------+ 4015548ab9bSManish Pandey| FEAT_SCTLR2 | OK | 4025548ab9bSManish Pandey+------------------+--------+ 4035548ab9bSManish Pandey| FEAT_TCR2 | OK | 4045548ab9bSManish Pandey+------------------+--------+ 4055548ab9bSManish Pandey| FEAT_PMUv3_EXT64 | NA | 4065548ab9bSManish Pandey+------------------+--------+ 4075548ab9bSManish Pandey 4085548ab9bSManish Pandey 4095548ab9bSManish Pandey2020 Extensions 4105548ab9bSManish Pandey--------------- 4115548ab9bSManish Pandey 4125548ab9bSManish Pandey+---------------------+--------+ 4135548ab9bSManish Pandey| Feature | Status | 4145548ab9bSManish Pandey+=====================+========+ 4155548ab9bSManish Pandey| FEAT_EBF16 | NA | 4165548ab9bSManish Pandey+---------------------+--------+ 4175548ab9bSManish Pandey| FEAT_ETEv1p1 | NA | 4185548ab9bSManish Pandey+---------------------+--------+ 4195548ab9bSManish Pandey| FEAT_HCX | OK | 4205548ab9bSManish Pandey+---------------------+--------+ 4215548ab9bSManish Pandey| FEAT_PAN3 | OK | 4225548ab9bSManish Pandey+---------------------+--------+ 4235548ab9bSManish Pandey| FEAT_WFxT | NA | 4245548ab9bSManish Pandey+---------------------+--------+ 4255548ab9bSManish Pandey| FEAT_XS | NO | 4265548ab9bSManish Pandey+---------------------+--------+ 4275548ab9bSManish Pandey| FEAT_AFP | NA | 4285548ab9bSManish Pandey+---------------------+--------+ 4295548ab9bSManish Pandey| FEAT_RPRES | NA | 4305548ab9bSManish Pandey+---------------------+--------+ 4315548ab9bSManish Pandey| FEAT_LPA2 | NO | 4325548ab9bSManish Pandey+---------------------+--------+ 4335548ab9bSManish Pandey| FEAT_LS64 | NA | 4345548ab9bSManish Pandey+---------------------+--------+ 4355548ab9bSManish Pandey| FEAT_LS64_V | NA | 4365548ab9bSManish Pandey+---------------------+--------+ 4375548ab9bSManish Pandey| FEAT_LS64_ACCDATA | OK | 4385548ab9bSManish Pandey+---------------------+--------+ 4395548ab9bSManish Pandey| FEAT_MTE3 | NA | 4405548ab9bSManish Pandey+---------------------+--------+ 4415548ab9bSManish Pandey| FEAT_MTE_ASYM_FAULT | NA | 4425548ab9bSManish Pandey+---------------------+--------+ 4435548ab9bSManish Pandey| FEAT_SPEv1p2 | OK | 4445548ab9bSManish Pandey+---------------------+--------+ 4455548ab9bSManish Pandey| FEAT_SPE_FnE | NA | 4465548ab9bSManish Pandey+---------------------+--------+ 4475548ab9bSManish Pandey| FEAT_SPE_PBT | OK | 4485548ab9bSManish Pandey+---------------------+--------+ 4495548ab9bSManish Pandey| FEAT_PMUv3p7 | OK | 4505548ab9bSManish Pandey+---------------------+--------+ 4515548ab9bSManish Pandey 452*8e67e710SBoyan KaratotevThe ``ENABLE_FEAT`` mechanism 453*8e67e710SBoyan Karatotev----------------------------- 454*8e67e710SBoyan Karatotev 455*8e67e710SBoyan KaratotevThe Arm architecture defines several architecture extension features, named 456*8e67e710SBoyan KaratotevFEAT_xxx in the architecure manual. Some of those features require setup code in 457*8e67e710SBoyan Karatotevhigher exception levels, other features might be used by TF-A code itself. 458*8e67e710SBoyan Karatotev 459*8e67e710SBoyan KaratotevMost of the feature flags defined in the TF-A build system are allowed to take 460*8e67e710SBoyan Karatotevthe values 0, 1 or 2, with the following meaning: 461*8e67e710SBoyan Karatotev 462*8e67e710SBoyan Karatotev:: 463*8e67e710SBoyan Karatotev 464*8e67e710SBoyan Karatotev ENABLE_FEAT_* = 0: Feature is unconditionally disabled at compile time. 465*8e67e710SBoyan Karatotev ENABLE_FEAT_* = 1: Feature is unconditionally enabled at compile time. 466*8e67e710SBoyan Karatotev ENABLE_FEAT_* = 2: Feature support is compiled in, but only enabled if the 467*8e67e710SBoyan Karatotev feature present at runtime. 468*8e67e710SBoyan Karatotev 469*8e67e710SBoyan KaratotevWhen setting the flag to 0, the feature is disabled during compilation, and the 470*8e67e710SBoyan Karatotevcompiler's optimization stage and the linker will try to remove as much of this 471*8e67e710SBoyan Karatotevcode as possible. 472*8e67e710SBoyan Karatotev 473*8e67e710SBoyan KaratotevIf it is defined to 1, the code will use the feature unconditionally, so the CPU 474*8e67e710SBoyan Karatotevis expected to support that feature. The FEATURE_DETECTION debug feature, if 475*8e67e710SBoyan Karatotevenabled, will verify this. 476*8e67e710SBoyan Karatotev 477*8e67e710SBoyan KaratotevIf the feature flag is set to 2, support for the feature will be compiled in, 478*8e67e710SBoyan Karatotevbut its existence will be checked at runtime, so it works on CPUs with or 479*8e67e710SBoyan Karatotevwithout the feature. This is mostly useful for platforms which either support 480*8e67e710SBoyan Karatotevmultiple different CPUs, or where the CPU is configured at runtime, like in 481*8e67e710SBoyan Karatotevemulators. 482*8e67e710SBoyan Karatotev 483*8e67e710SBoyan KaratotevAdding support for a new feature 484*8e67e710SBoyan Karatotev-------------------------------- 485*8e67e710SBoyan Karatotev 486*8e67e710SBoyan KaratotevAdding support for a feature is required when: 487*8e67e710SBoyan Karatotev 488*8e67e710SBoyan Karatoteva) a feature is added to the architecture and it includes controls at EL3 489*8e67e710SBoyan Karatotev 490*8e67e710SBoyan Karatotevb) a feature is to be used by EL3 itself 491*8e67e710SBoyan Karatotev 492*8e67e710SBoyan Karatotevc) EL3 wants to hide a feature from lower ELs (eg. with ``FEAT_IDTE3``) 493*8e67e710SBoyan Karatotev 494*8e67e710SBoyan KaratotevThe following is a checklist with guidance on what to do to add a new feature, 495*8e67e710SBoyan Karatotevin this case a fictional ``FEAT_ABC``. This is not an exhaustive list on how to 496*8e67e710SBoyan Karatotevdo this, so please consult with previous such patches and/or maintainers. Please 497*8e67e710SBoyan Karatotevconsult the Arm ARM on any specifics about the feature itself. 498*8e67e710SBoyan Karatotev 499*8e67e710SBoyan Karatotev- Add a feature flag to the build system. 500*8e67e710SBoyan Karatotev 501*8e67e710SBoyan Karatotev - The flag's name should be in the form ``ENABLE_FEAT_ABC``. 502*8e67e710SBoyan Karatotev 503*8e67e710SBoyan Karatotev - Add it to the ``assert_numerics`` and ``add_defines`` lists in the 504*8e67e710SBoyan Karatotev ``Makefile``. 505*8e67e710SBoyan Karatotev 506*8e67e710SBoyan Karatotev - Add a default of ``0`` for it in ``make_helpers/arch_features.mk``. If the 507*8e67e710SBoyan Karatotev feature is listed as mandatory from a certain revision of the architecture, 508*8e67e710SBoyan Karatotev add it to the appropriate list at the top of the same file. 509*8e67e710SBoyan Karatotev 510*8e67e710SBoyan Karatotev - Add any constraints in ``make_helpers/constraints.mk``. This will usually be 511*8e67e710SBoyan Karatotev other features which this feature depends on or is incompatible with and can 512*8e67e710SBoyan Karatotev be found in the main description of the feature in the Arm ARM. 513*8e67e710SBoyan Karatotev 514*8e67e710SBoyan Karatotev- Add the feature accessor functions in ``include/arch/aarch64/arch_features.h``. 515*8e67e710SBoyan Karatotev 516*8e67e710SBoyan Karatotev A pair of functions must be defined in the form of ``is_feat_abc_present()`` 517*8e67e710SBoyan Karatotev and ``is_feat_abc_supported()``. Please use the provided macros to define 518*8e67e710SBoyan Karatotev these. 519*8e67e710SBoyan Karatotev 520*8e67e710SBoyan Karatotev - The ``_supported`` variant is the one that should usually be used. If common 521*8e67e710SBoyan Karatotev code is to use it, a corresponding AArch32 version should be provided. It 522*8e67e710SBoyan Karatotev should return ``false`` if AArch32 is not to be supported. 523*8e67e710SBoyan Karatotev 524*8e67e710SBoyan Karatotev - In rare occasions, the feature must be checked in assembly. A 525*8e67e710SBoyan Karatotev ``is_feat_abc_present_asm`` macro must be added to 526*8e67e710SBoyan Karatotev ``include/lib/cpus/aarch64/cpu_macros.S``. 527*8e67e710SBoyan Karatotev 528*8e67e710SBoyan Karatotev- Register the feature in ``common/feat_detect.c``. 529*8e67e710SBoyan Karatotev 530*8e67e710SBoyan Karatotev- Add support for the feature. This will be very feature specific and exact code 531*8e67e710SBoyan Karatotev will depend on why support is being added. Usually, support will be a few 532*8e67e710SBoyan Karatotev lines in ``lib/el3_runtime/aarch64/context_mgmt.c``. Some common things to do 533*8e67e710SBoyan Karatotev include: 534*8e67e710SBoyan Karatotev 535*8e67e710SBoyan Karatotev - If support requires more extensive code sequences, consider adding them to a 536*8e67e710SBoyan Karatotev file in ``lib/extensions/abc/``. Functions in this file must be named 537*8e67e710SBoyan Karatotev similar to other features. Those are likely to be ``abc_enable()``, 538*8e67e710SBoyan Karatotev ``abc_enable_el3()``, or ``abc_disable()``. Naming depends on the call site. 539*8e67e710SBoyan Karatotev 540*8e67e710SBoyan Karatotev - If the feature introduces ``SCR_EL3``, ``MDCR_EL3``, or ``CPTR_EL3`` controls 541*8e67e710SBoyan Karatotev for lower ELs, access must be enabled for at least NS world, preferably all 542*8e67e710SBoyan Karatotev worlds by setting/clearing the bit in the context copy of this register. 543*8e67e710SBoyan Karatotev 544*8e67e710SBoyan Karatotev - If the feature introduces any control bits in ``SCR_EL3``, ``MDCR_EL3``, 545*8e67e710SBoyan Karatotev ``CPTR_EL3``, or ``MPAM3_EL3``, those must be added to the appropriate list 546*8e67e710SBoyan Karatotev in ``include/services/arm_arch_svc.h`` to register with 547*8e67e710SBoyan Karatotev ``ARCH_FEATURE_AVAILABILITY``. This must also be done in the 548*8e67e710SBoyan Karatotev ``test_smccc_arch_feature_availability`` test in TFTF, otherwise CI will 549*8e67e710SBoyan Karatotev fail. 550*8e67e710SBoyan Karatotev 551*8e67e710SBoyan Karatotev - If the feature comes with registers, those should be context switched if 552*8e67e710SBoyan Karatotev enabling the feature for multiple worlds. 553*8e67e710SBoyan Karatotev 554*8e67e710SBoyan Karatotev - Consider whether the feature introduces any potential side channels and how 555*8e67e710SBoyan Karatotev to close them. 556*8e67e710SBoyan Karatotev 557*8e67e710SBoyan Karatotev- Add documentation in ``docs/getting_started/build-options.rst``. This should 558*8e67e710SBoyan Karatotev include a brief description of what the enablement does, what values the flag 559*8e67e710SBoyan Karatotev can take, the default, and that it conforms to the ``ENABLE_FEAT`` mechanism. 560*8e67e710SBoyan Karatotev Adding feature enablement that does not conform to this mechanism is only done 561*8e67e710SBoyan Karatotev in exceptional cases. 562*8e67e710SBoyan Karatotev 563*8e67e710SBoyan Karatotev- Enable the feature for the FVP platform in ``plat/arm/board/fvp/platform.mk``, 564*8e67e710SBoyan Karatotev setting it to ``2`` (``FEAT_STATE_CHECKED``). 565*8e67e710SBoyan Karatotev 566*8e67e710SBoyan Karatotev- If the feature is optional, enable it in CI in the "allconfig" fragments. 567*8e67e710SBoyan Karatotev Those are currently ``run_config/fvp-aemv8a.all.bmcov``, 568*8e67e710SBoyan Karatotev ``run_config/fvp-spm.all.bmcov``, ``run_config/fvp-spm.all``, and 569*8e67e710SBoyan Karatotev ``run_config/fvp-aemv8a.all``. Mandatory features are expected to be covered 570*8e67e710SBoyan Karatotev by the architecture revision passed to the model. 571*8e67e710SBoyan Karatotev 572*8e67e710SBoyan Karatotev- Optionally, although recommended, is to add a test in TFTF. This should only 573*8e67e710SBoyan Karatotev be done if there are observable effects from lower ELs like register traps. It 574*8e67e710SBoyan Karatotev is not necessary to add a test for functionality that does not have EL3 575*8e67e710SBoyan Karatotev involvement (eg. whether a new instruction that cannot trap works). 576*8e67e710SBoyan Karatotev 5775548ab9bSManish Pandey.. _Feature_description: https://developer.arm.com/documentation/109697/latest/ 578