xref: /rk3399_ARM-atf/include/services/arm_arch_svc.h (revision af247ec0cbb22c8ff1bf2c29559b10d853895b4d)
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