xref: /rk3399_ARM-atf/docs/architecture_features.rst (revision 8e67e7107761bd49db01627b59ae25b29812d346)
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