13a1b0676SDimitris Papastamos /* 28ae6b1adSArvind Ram Prakash * Copyright (c) 2018-2025, Arm Limited and Contributors. All rights reserved. 33a1b0676SDimitris Papastamos * 43a1b0676SDimitris Papastamos * SPDX-License-Identifier: BSD-3-Clause 53a1b0676SDimitris Papastamos */ 63a1b0676SDimitris Papastamos 7c3cf06f1SAntonio Nino Diaz #ifndef ARM_ARCH_SVC_H 8c3cf06f1SAntonio Nino Diaz #define ARM_ARCH_SVC_H 93a1b0676SDimitris Papastamos 103a1b0676SDimitris Papastamos #define SMCCC_VERSION U(0x80000000) 113a1b0676SDimitris Papastamos #define SMCCC_ARCH_FEATURES U(0x80000001) 120e753437SManish V Badarkhe #define SMCCC_ARCH_SOC_ID U(0x80000002) 133a1b0676SDimitris Papastamos #define SMCCC_ARCH_WORKAROUND_1 U(0x80008000) 14b8a25bbbSDimitris Papastamos #define SMCCC_ARCH_WORKAROUND_2 U(0x80007FFF) 159b2510b6SBipin Ravi #define SMCCC_ARCH_WORKAROUND_3 U(0x80003FFF) 168db17052SBoyan Karatotev #define SMCCC_ARCH_FEATURE_AVAILABILITY U(0x80000003) 178ae6b1adSArvind Ram Prakash #define SMCCC_ARCH_WORKAROUND_4 U(0x80000004) 18b8a25bbbSDimitris Papastamos 190e753437SManish V Badarkhe #define SMCCC_GET_SOC_VERSION U(0) 200e753437SManish V Badarkhe #define SMCCC_GET_SOC_REVISION U(1) 21cb4ee3e4SArvind Ram Prakash #define SMCCC_GET_SOC_NAME U(2) 22cb4ee3e4SArvind Ram Prakash 23cb4ee3e4SArvind Ram Prakash #define SMCCC_SOC_NAME_LEN U(136) 240e753437SManish V Badarkhe 258db17052SBoyan Karatotev #ifndef __ASSEMBLER__ 268db17052SBoyan Karatotev #if ARCH_FEATURE_AVAILABILITY 278db17052SBoyan Karatotev #include <lib/cassert.h> 288db17052SBoyan Karatotev 298db17052SBoyan Karatotev #if ENABLE_FEAT_FGT2 308db17052SBoyan Karatotev #define SCR_FEAT_FGT2 SCR_FGTEN2_BIT 318db17052SBoyan Karatotev #else 328db17052SBoyan Karatotev #define SCR_FEAT_FGT2 (0) 338db17052SBoyan Karatotev #endif 348db17052SBoyan Karatotev 358db17052SBoyan Karatotev #if ENABLE_FEAT_FPMR 368db17052SBoyan Karatotev #define SCR_FEAT_FPMR SCR_EnFPM_BIT 378db17052SBoyan Karatotev #else 3857b23eaaSArvind Ram Prakash #define SCR_FEAT_FPMR (0) 398db17052SBoyan Karatotev #endif 408db17052SBoyan Karatotev 418db17052SBoyan Karatotev #if ENABLE_FEAT_D128 428db17052SBoyan Karatotev #define SCR_FEAT_D128 SCR_D128En_BIT 438db17052SBoyan Karatotev #else 448db17052SBoyan Karatotev #define SCR_FEAT_D128 (0) 458db17052SBoyan Karatotev #endif 468db17052SBoyan Karatotev 478db17052SBoyan Karatotev #if ENABLE_FEAT_S1PIE 488db17052SBoyan Karatotev #define SCR_FEAT_S1PIE SCR_PIEN_BIT 498db17052SBoyan Karatotev #else 508db17052SBoyan Karatotev #define SCR_FEAT_S1PIE (0) 518db17052SBoyan Karatotev #endif 528db17052SBoyan Karatotev 538db17052SBoyan Karatotev #if ENABLE_FEAT_SCTLR2 548db17052SBoyan Karatotev #define SCR_FEAT_SCTLR2 SCR_SCTLR2En_BIT 558db17052SBoyan Karatotev #else 568db17052SBoyan Karatotev #define SCR_FEAT_SCTLR2 (0) 578db17052SBoyan Karatotev #endif 588db17052SBoyan Karatotev 598db17052SBoyan Karatotev #if ENABLE_FEAT_TCR2 608db17052SBoyan Karatotev #define SCR_FEAT_TCR2 SCR_TCR2EN_BIT 618db17052SBoyan Karatotev #else 628db17052SBoyan Karatotev #define SCR_FEAT_TCR2 (0) 638db17052SBoyan Karatotev #endif 648db17052SBoyan Karatotev 658db17052SBoyan Karatotev #if ENABLE_FEAT_THE 668db17052SBoyan Karatotev #define SCR_FEAT_THE SCR_RCWMASKEn_BIT 678db17052SBoyan Karatotev #else 688db17052SBoyan Karatotev #define SCR_FEAT_THE (0) 698db17052SBoyan Karatotev #endif 708db17052SBoyan Karatotev 718db17052SBoyan Karatotev #if ENABLE_SME_FOR_NS 728db17052SBoyan Karatotev #define SCR_FEAT_SME SCR_ENTP2_BIT 738db17052SBoyan Karatotev #else 748db17052SBoyan Karatotev #define SCR_FEAT_SME (0) 758db17052SBoyan Karatotev #endif 768db17052SBoyan Karatotev 778db17052SBoyan Karatotev #if ENABLE_FEAT_GCS 788db17052SBoyan Karatotev #define SCR_FEAT_GCS SCR_GCSEn_BIT 798db17052SBoyan Karatotev #else 808db17052SBoyan Karatotev #define SCR_FEAT_GCS (0) 818db17052SBoyan Karatotev #endif 828db17052SBoyan Karatotev 838db17052SBoyan Karatotev #if ENABLE_FEAT_HCX 848db17052SBoyan Karatotev #define SCR_FEAT_HCX SCR_HXEn_BIT 858db17052SBoyan Karatotev #else 868db17052SBoyan Karatotev #define SCR_FEAT_HCX (0) 878db17052SBoyan Karatotev #endif 888db17052SBoyan Karatotev 898db17052SBoyan Karatotev #if ENABLE_FEAT_LS64_ACCDATA 908db17052SBoyan Karatotev #define SCR_FEAT_LS64_ACCDATA (SCR_ADEn_BIT | SCR_EnAS0_BIT) 918db17052SBoyan Karatotev #else 928db17052SBoyan Karatotev #define SCR_FEAT_LS64_ACCDATA (0) 938db17052SBoyan Karatotev #endif 948db17052SBoyan Karatotev 958db17052SBoyan Karatotev #if ENABLE_FEAT_AMUv1p1 968db17052SBoyan Karatotev #define SCR_FEAT_AMUv1p1 SCR_AMVOFFEN_BIT 978db17052SBoyan Karatotev #else 988db17052SBoyan Karatotev #define SCR_FEAT_AMUv1p1 (0) 998db17052SBoyan Karatotev #endif 1008db17052SBoyan Karatotev 101d33ff5e0SAndre Przywara #if ENABLE_FEAT_TWED 102d33ff5e0SAndre Przywara #define SCR_FEAT_TWED SCR_TWEDEn_BIT 103d33ff5e0SAndre Przywara #else 104d33ff5e0SAndre Przywara #define SCR_FEAT_TWED (0) 105d33ff5e0SAndre Przywara #endif 106d33ff5e0SAndre Przywara 1078db17052SBoyan Karatotev #if ENABLE_FEAT_ECV 1088db17052SBoyan Karatotev #define SCR_FEAT_ECV SCR_ECVEN_BIT 1098db17052SBoyan Karatotev #else 1108db17052SBoyan Karatotev #define SCR_FEAT_ECV (0) 1118db17052SBoyan Karatotev #endif 1128db17052SBoyan Karatotev 1138db17052SBoyan Karatotev #if ENABLE_FEAT_FGT 1148db17052SBoyan Karatotev #define SCR_FEAT_FGT SCR_FGTEN_BIT 1158db17052SBoyan Karatotev #else 1168db17052SBoyan Karatotev #define SCR_FEAT_FGT (0) 1178db17052SBoyan Karatotev #endif 1188db17052SBoyan Karatotev 1198db17052SBoyan Karatotev #if ENABLE_FEAT_MTE2 1208db17052SBoyan Karatotev #define SCR_FEAT_MTE2 SCR_ATA_BIT 1218db17052SBoyan Karatotev #else 1228db17052SBoyan Karatotev #define SCR_FEAT_MTE2 (0) 1238db17052SBoyan Karatotev #endif 1248db17052SBoyan Karatotev 1258db17052SBoyan Karatotev #if ENABLE_FEAT_CSV2_2 1268db17052SBoyan Karatotev #define SCR_FEAT_CSV2_2 SCR_EnSCXT_BIT 1278db17052SBoyan Karatotev #else 1288db17052SBoyan Karatotev #define SCR_FEAT_CSV2_2 (0) 1298db17052SBoyan Karatotev #endif 1308db17052SBoyan Karatotev 13104b80c18SAndre Przywara #if !RAS_TRAP_NS_ERR_REC_ACCESS 1328db17052SBoyan Karatotev #define SCR_FEAT_RAS SCR_TERR_BIT 1338db17052SBoyan Karatotev #else 1348db17052SBoyan Karatotev #define SCR_FEAT_RAS (0) 1358db17052SBoyan Karatotev #endif 1368db17052SBoyan Karatotev 1377e84f3cfSTushar Khandelwal #if ENABLE_FEAT_MEC 1387e84f3cfSTushar Khandelwal #define SCR_FEAT_MEC SCR_MECEn_BIT 1397e84f3cfSTushar Khandelwal #else 1407e84f3cfSTushar Khandelwal #define SCR_FEAT_MEC (0) 1417e84f3cfSTushar Khandelwal #endif 1427e84f3cfSTushar Khandelwal 143cc2523bbSAndre Przywara #if ENABLE_FEAT_AIE 144cc2523bbSAndre Przywara #define SCR_FEAT_AIE SCR_AIEn_BIT 145cc2523bbSAndre Przywara #else 146cc2523bbSAndre Przywara #define SCR_FEAT_AIE (0) 147cc2523bbSAndre Przywara #endif 148cc2523bbSAndre Przywara 149b3bcfd12SAndre Przywara #if ENABLE_FEAT_PFAR 150b3bcfd12SAndre Przywara #define SCR_FEAT_PFAR SCR_PFAREn_BIT 151b3bcfd12SAndre Przywara #else 152b3bcfd12SAndre Przywara #define SCR_FEAT_PFAR (0) 153b3bcfd12SAndre Przywara #endif 154b3bcfd12SAndre Przywara 155f396aec8SArvind Ram Prakash #if ENABLE_FEAT_IDTE3 156f396aec8SArvind Ram Prakash #define SCR_FEAT_IDTE3 (SCR_TID3_BIT | SCR_TID5_BIT) 157f396aec8SArvind Ram Prakash #else 158f396aec8SArvind Ram Prakash #define SCR_FEAT_IDTE3 (0) 159f396aec8SArvind Ram Prakash #endif 160f396aec8SArvind Ram Prakash 1618db17052SBoyan Karatotev #ifndef SCR_PLAT_FEATS 1628db17052SBoyan Karatotev #define SCR_PLAT_FEATS (0) 1638db17052SBoyan Karatotev #endif 1648db17052SBoyan Karatotev #ifndef SCR_PLAT_FLIPPED 1658db17052SBoyan Karatotev #define SCR_PLAT_FLIPPED (0) 1668db17052SBoyan Karatotev #endif 1678db17052SBoyan Karatotev #ifndef SCR_PLAT_IGNORED 1688db17052SBoyan Karatotev #define SCR_PLAT_IGNORED (0) 1698db17052SBoyan Karatotev #endif 1708db17052SBoyan Karatotev 1718db17052SBoyan Karatotev #ifndef CPTR_PLAT_FEATS 1728db17052SBoyan Karatotev #define CPTR_PLAT_FEATS (0) 1738db17052SBoyan Karatotev #endif 1748db17052SBoyan Karatotev #ifndef CPTR_PLAT_FLIPPED 1758db17052SBoyan Karatotev #define CPTR_PLAT_FLIPPED (0) 1768db17052SBoyan Karatotev #endif 1778db17052SBoyan Karatotev 1788db17052SBoyan Karatotev #ifndef MDCR_PLAT_FEATS 1798db17052SBoyan Karatotev #define MDCR_PLAT_FEATS (0) 1808db17052SBoyan Karatotev #endif 1818db17052SBoyan Karatotev #ifndef MDCR_PLAT_FLIPPED 1828db17052SBoyan Karatotev #define MDCR_PLAT_FLIPPED (0) 1838db17052SBoyan Karatotev #endif 1848db17052SBoyan Karatotev #ifndef MDCR_PLAT_IGNORED 1858db17052SBoyan Karatotev #define MDCR_PLAT_IGNORED (0) 1868db17052SBoyan Karatotev #endif 1878db17052SBoyan Karatotev /* 1888db17052SBoyan Karatotev * XYZ_EL3_FEATS - list all bits that are relevant for feature enablement. It's 1898db17052SBoyan Karatotev * a constant list based on what features are expected. This relies on the fact 1908db17052SBoyan Karatotev * that if the feature is in any way disabled, then the relevant bit will not be 1918db17052SBoyan Karatotev * written by context management. 1928db17052SBoyan Karatotev * 1938db17052SBoyan Karatotev * XYZ_EL3_FLIPPED - bits with an active 0, rather than the usual active 1. The 1948db17052SBoyan Karatotev * spec always uses active 1 to mean that the feature will not trap. 1958db17052SBoyan Karatotev * 1968db17052SBoyan Karatotev * XYZ_EL3_IGNORED - list of all bits that are not relevant for feature 1978db17052SBoyan Karatotev * enablement and should not be reported to lower ELs 1988db17052SBoyan Karatotev */ 1998db17052SBoyan Karatotev #define SCR_EL3_FEATS ( \ 2008db17052SBoyan Karatotev SCR_FEAT_FGT2 | \ 2018db17052SBoyan Karatotev SCR_FEAT_FPMR | \ 202a357d157SSona Mathew SCR_FEAT_MEC | \ 2038db17052SBoyan Karatotev SCR_FEAT_D128 | \ 2048db17052SBoyan Karatotev SCR_FEAT_S1PIE | \ 2058db17052SBoyan Karatotev SCR_FEAT_SCTLR2 | \ 2068db17052SBoyan Karatotev SCR_FEAT_TCR2 | \ 2078db17052SBoyan Karatotev SCR_FEAT_THE | \ 2088db17052SBoyan Karatotev SCR_FEAT_SME | \ 2098db17052SBoyan Karatotev SCR_FEAT_GCS | \ 2108db17052SBoyan Karatotev SCR_FEAT_HCX | \ 2118db17052SBoyan Karatotev SCR_FEAT_LS64_ACCDATA | \ 2128db17052SBoyan Karatotev SCR_FEAT_AMUv1p1 | \ 213d33ff5e0SAndre Przywara SCR_FEAT_TWED | \ 2148db17052SBoyan Karatotev SCR_FEAT_ECV | \ 2158db17052SBoyan Karatotev SCR_FEAT_FGT | \ 2168db17052SBoyan Karatotev SCR_FEAT_MTE2 | \ 2178db17052SBoyan Karatotev SCR_FEAT_CSV2_2 | \ 2188db17052SBoyan Karatotev SCR_APK_BIT | /* FEAT_Pauth */ \ 2198db17052SBoyan Karatotev SCR_FEAT_RAS | \ 220cc2523bbSAndre Przywara SCR_FEAT_AIE | \ 221b3bcfd12SAndre Przywara SCR_FEAT_PFAR | \ 222f396aec8SArvind Ram Prakash SCR_FEAT_IDTE3 | \ 2238db17052SBoyan Karatotev SCR_PLAT_FEATS) 2248db17052SBoyan Karatotev #define SCR_EL3_FLIPPED ( \ 2258db17052SBoyan Karatotev SCR_FEAT_RAS | \ 2268db17052SBoyan Karatotev SCR_PLAT_FLIPPED) 2278db17052SBoyan Karatotev #define SCR_EL3_IGNORED ( \ 2288db17052SBoyan Karatotev SCR_API_BIT | \ 2298db17052SBoyan Karatotev SCR_RW_BIT | \ 2308db17052SBoyan Karatotev SCR_SIF_BIT | \ 2318db17052SBoyan Karatotev SCR_HCE_BIT | \ 2328db17052SBoyan Karatotev SCR_FIQ_BIT | \ 2338db17052SBoyan Karatotev SCR_IRQ_BIT | \ 2348db17052SBoyan Karatotev SCR_NS_BIT | \ 235847c1115SSona Mathew SCR_NSE_BIT | \ 2368db17052SBoyan Karatotev SCR_RES1_BITS | \ 237*ee75a71eSJagdish Gediya SCR_EEL2_BIT | \ 2388db17052SBoyan Karatotev SCR_PLAT_IGNORED) 2398db17052SBoyan Karatotev CASSERT((SCR_EL3_FEATS & SCR_EL3_IGNORED) == 0, scr_feat_is_ignored); 2408db17052SBoyan Karatotev CASSERT((SCR_EL3_FLIPPED & SCR_EL3_FEATS) == SCR_EL3_FLIPPED, scr_flipped_not_a_feat); 2418db17052SBoyan Karatotev 2428db17052SBoyan Karatotev #if ENABLE_SYS_REG_TRACE_FOR_NS 2438db17052SBoyan Karatotev #define CPTR_SYS_REG_TRACE (TCPAC_BIT | TTA_BIT) 2448db17052SBoyan Karatotev #else 2458db17052SBoyan Karatotev #define CPTR_SYS_REG_TRACE (0) 2468db17052SBoyan Karatotev #endif 2478db17052SBoyan Karatotev 2488db17052SBoyan Karatotev #if ENABLE_FEAT_AMU 2498db17052SBoyan Karatotev #define CPTR_FEAT_AMU TAM_BIT 2508db17052SBoyan Karatotev #else 2518db17052SBoyan Karatotev #define CPTR_FEAT_AMU (0) 2528db17052SBoyan Karatotev #endif 2538db17052SBoyan Karatotev 2548db17052SBoyan Karatotev #if ENABLE_SME_FOR_NS 2558db17052SBoyan Karatotev #define CPTR_FEAT_SME ESM_BIT 2568db17052SBoyan Karatotev #else 2578db17052SBoyan Karatotev #define CPTR_FEAT_SME (0) 2588db17052SBoyan Karatotev #endif 2598db17052SBoyan Karatotev 2608db17052SBoyan Karatotev #if ENABLE_SVE_FOR_NS 2618db17052SBoyan Karatotev #define CPTR_FEAT_SVE CPTR_EZ_BIT 2628db17052SBoyan Karatotev #else 2638db17052SBoyan Karatotev #define CPTR_FEAT_SVE (0) 2648db17052SBoyan Karatotev #endif 2658db17052SBoyan Karatotev 2668db17052SBoyan Karatotev #define CPTR_EL3_FEATS ( \ 2678db17052SBoyan Karatotev CPTR_SYS_REG_TRACE | \ 2688db17052SBoyan Karatotev CPTR_FEAT_AMU | \ 2698db17052SBoyan Karatotev CPTR_FEAT_SME | \ 2708db17052SBoyan Karatotev TFP_BIT | \ 2718db17052SBoyan Karatotev CPTR_FEAT_SVE | \ 2728db17052SBoyan Karatotev CPTR_PLAT_FEATS) 2738db17052SBoyan Karatotev #define CPTR_EL3_FLIPPED ( \ 2748db17052SBoyan Karatotev CPTR_SYS_REG_TRACE | \ 2758db17052SBoyan Karatotev CPTR_FEAT_AMU | \ 2768db17052SBoyan Karatotev TFP_BIT | \ 2778db17052SBoyan Karatotev CPTR_PLAT_FLIPPED) 2788db17052SBoyan Karatotev CASSERT((CPTR_EL3_FLIPPED & CPTR_EL3_FEATS) == CPTR_EL3_FLIPPED, cptr_flipped_not_a_feat); 2798db17052SBoyan Karatotev 2808db17052SBoyan Karatotev /* 2818db17052SBoyan Karatotev * Some features enables are expressed with more than 1 bit in order to cater 2828db17052SBoyan Karatotev * for multi world enablement. In those cases (BRB, TRB, SPE) only the last bit 2838db17052SBoyan Karatotev * is used and reported. This (ab)uses the convenient fact that the last bit 2848db17052SBoyan Karatotev * always means "enabled for this world" when context switched correctly. 2858db17052SBoyan Karatotev * The per-world values have been adjusted such that this is always true. 2868db17052SBoyan Karatotev */ 2878db17052SBoyan Karatotev #if ENABLE_BRBE_FOR_NS 2888db17052SBoyan Karatotev #define MDCR_FEAT_BRBE MDCR_SBRBE(1UL) 2898db17052SBoyan Karatotev #else 2908db17052SBoyan Karatotev #define MDCR_FEAT_BRBE (0) 2918db17052SBoyan Karatotev #endif 2928db17052SBoyan Karatotev 2938db17052SBoyan Karatotev #if ENABLE_FEAT_FGT 2948db17052SBoyan Karatotev #define MDCR_FEAT_FGT MDCR_TDCC_BIT 2958db17052SBoyan Karatotev #else 2968db17052SBoyan Karatotev #define MDCR_FEAT_FGT (0) 2978db17052SBoyan Karatotev #endif 2988db17052SBoyan Karatotev 2998db17052SBoyan Karatotev #if ENABLE_TRBE_FOR_NS 300985b6a6bSBoyan Karatotev #define MDCR_FEAT_TRBE MDCR_NSTB_EN_BIT 3018db17052SBoyan Karatotev #else 3028db17052SBoyan Karatotev #define MDCR_FEAT_TRBE (0) 3038db17052SBoyan Karatotev #endif 3048db17052SBoyan Karatotev 3058db17052SBoyan Karatotev #if ENABLE_TRF_FOR_NS 3068db17052SBoyan Karatotev #define MDCR_FEAT_TRF MDCR_TTRF_BIT 3078db17052SBoyan Karatotev #else 3088db17052SBoyan Karatotev #define MDCR_FEAT_TRF (0) 3098db17052SBoyan Karatotev #endif 3108db17052SBoyan Karatotev 3118db17052SBoyan Karatotev #if ENABLE_SPE_FOR_NS 312985b6a6bSBoyan Karatotev #define MDCR_FEAT_SPE MDCR_NSPB_EN_BIT 3138db17052SBoyan Karatotev #else 3148db17052SBoyan Karatotev #define MDCR_FEAT_SPE (0) 3158db17052SBoyan Karatotev #endif 3168db17052SBoyan Karatotev 317482fbf81SGovindraj Raja #if ENABLE_FEAT_DEBUGV8P9 318482fbf81SGovindraj Raja #define MDCR_DEBUGV8P9 MDCR_EBWE_BIT 319482fbf81SGovindraj Raja #else 320482fbf81SGovindraj Raja #define MDCR_DEBUGV8P9 (0) 321482fbf81SGovindraj Raja #endif 322482fbf81SGovindraj Raja 323714a1a93SManish Pandey #if ENABLE_FEAT_EBEP 324714a1a93SManish Pandey #define MDCR_FEAT_EBEP MDCR_PMEE(MDCR_PMEE_CTRL_EL2) 325714a1a93SManish Pandey #else 326714a1a93SManish Pandey #define MDCR_FEAT_EBEP (0) 327714a1a93SManish Pandey #endif 328714a1a93SManish Pandey 3298db17052SBoyan Karatotev #define MDCR_EL3_FEATS ( \ 330482fbf81SGovindraj Raja MDCR_DEBUGV8P9 | \ 3318db17052SBoyan Karatotev MDCR_FEAT_BRBE | \ 3328db17052SBoyan Karatotev MDCR_FEAT_FGT | \ 3338db17052SBoyan Karatotev MDCR_FEAT_TRBE | \ 3348db17052SBoyan Karatotev MDCR_FEAT_TRF | \ 3358db17052SBoyan Karatotev MDCR_FEAT_SPE | \ 336714a1a93SManish Pandey MDCR_FEAT_EBEP | \ 3378db17052SBoyan Karatotev MDCR_TDOSA_BIT | \ 3388db17052SBoyan Karatotev MDCR_TDA_BIT | \ 339ba9e6a34SAndre Przywara MDCR_EnPM2_BIT | \ 3408db17052SBoyan Karatotev MDCR_TPM_BIT | /* FEAT_PMUv3 */ \ 3418db17052SBoyan Karatotev MDCR_PLAT_FEATS) 3428db17052SBoyan Karatotev #define MDCR_EL3_FLIPPED ( \ 3438db17052SBoyan Karatotev MDCR_FEAT_FGT | \ 3448db17052SBoyan Karatotev MDCR_FEAT_TRF | \ 3458db17052SBoyan Karatotev MDCR_TDOSA_BIT | \ 3468db17052SBoyan Karatotev MDCR_TDA_BIT | \ 3478db17052SBoyan Karatotev MDCR_TPM_BIT | \ 3488db17052SBoyan Karatotev MDCR_PLAT_FLIPPED) 3498db17052SBoyan Karatotev #define MDCR_EL3_IGNORED ( \ 3504fd9814fSJames Clark MDCR_EnPMS3_BIT | \ 3518db17052SBoyan Karatotev MDCR_EnPMSN_BIT | \ 3528db17052SBoyan Karatotev MDCR_SBRBE(2UL) | \ 3538db17052SBoyan Karatotev MDCR_MTPME_BIT | \ 3548db17052SBoyan Karatotev MDCR_NSTBE_BIT | \ 355985b6a6bSBoyan Karatotev MDCR_NSTB_SS_BIT | \ 3562bec665fSBoyan Karatotev MDCR_MCCD_BIT | \ 3572bec665fSBoyan Karatotev MDCR_SCCD_BIT | \ 3588db17052SBoyan Karatotev MDCR_SDD_BIT | \ 3598db17052SBoyan Karatotev MDCR_SPD32(3UL) | \ 360985b6a6bSBoyan Karatotev MDCR_NSPB_SS_BIT | \ 3618db17052SBoyan Karatotev MDCR_NSPBE_BIT | \ 3628db17052SBoyan Karatotev MDCR_PLAT_IGNORED) 3638db17052SBoyan Karatotev CASSERT((MDCR_EL3_FEATS & MDCR_EL3_IGNORED) == 0, mdcr_feat_is_ignored); 3648db17052SBoyan Karatotev CASSERT((MDCR_EL3_FLIPPED & MDCR_EL3_FEATS) == MDCR_EL3_FLIPPED, mdcr_flipped_not_a_feat); 3658db17052SBoyan Karatotev 3668db17052SBoyan Karatotev #define MPAM3_EL3_FEATS (MPAM3_EL3_TRAPLOWER_BIT) 3678db17052SBoyan Karatotev #define MPAM3_EL3_FLIPPED (MPAM3_EL3_TRAPLOWER_BIT) 3688db17052SBoyan Karatotev #define MPAM3_EL3_IGNORED (MPAM3_EL3_MPAMEN_BIT) 3698db17052SBoyan Karatotev CASSERT((MPAM3_EL3_FEATS & MPAM3_EL3_IGNORED) == 0, mpam3_feat_is_ignored); 3708db17052SBoyan Karatotev CASSERT((MPAM3_EL3_FLIPPED & MPAM3_EL3_FEATS) == MPAM3_EL3_FLIPPED, mpam3_flipped_not_a_feat); 3718db17052SBoyan Karatotev 3728db17052SBoyan Karatotev /* The hex representations of these registers' S3 encoding */ 3738db17052SBoyan Karatotev #define SCR_EL3_OPCODE U(0x1E1100) 3748db17052SBoyan Karatotev #define CPTR_EL3_OPCODE U(0x1E1140) 3758db17052SBoyan Karatotev #define MDCR_EL3_OPCODE U(0x1E1320) 3768db17052SBoyan Karatotev #define MPAM3_EL3_OPCODE U(0x1EA500) 3778db17052SBoyan Karatotev 3788db17052SBoyan Karatotev #endif /* ARCH_FEATURE_AVAILABILITY */ 3798db17052SBoyan Karatotev #endif /* __ASSEMBLER__ */ 380c3cf06f1SAntonio Nino Diaz #endif /* ARM_ARCH_SVC_H */ 381