xref: /rk3399_ARM-atf/include/lib/el3_runtime/context_el2.h (revision d6af23443179f6d2239c7f5f190f0d8828bd68cf)
1*d6af2344SJayanth Dodderi Chidanand /*
2*d6af2344SJayanth Dodderi Chidanand  * Copyright (c) 2024, Arm Limited and Contributors. All rights reserved.
3*d6af2344SJayanth Dodderi Chidanand  *
4*d6af2344SJayanth Dodderi Chidanand  * SPDX-License-Identifier: BSD-3-Clause
5*d6af2344SJayanth Dodderi Chidanand  */
6*d6af2344SJayanth Dodderi Chidanand 
7*d6af2344SJayanth Dodderi Chidanand #ifndef CONTEXT_EL2_H
8*d6af2344SJayanth Dodderi Chidanand #define CONTEXT_EL2_H
9*d6af2344SJayanth Dodderi Chidanand 
10*d6af2344SJayanth Dodderi Chidanand #ifndef __ASSEMBLER__
11*d6af2344SJayanth Dodderi Chidanand /*******************************************************************************
12*d6af2344SJayanth Dodderi Chidanand  * EL2 Registers:
13*d6af2344SJayanth Dodderi Chidanand  * AArch64 EL2 system register context structure for preserving the
14*d6af2344SJayanth Dodderi Chidanand  * architectural state during world switches.
15*d6af2344SJayanth Dodderi Chidanand  ******************************************************************************/
16*d6af2344SJayanth Dodderi Chidanand #if CTX_INCLUDE_EL2_REGS
17*d6af2344SJayanth Dodderi Chidanand typedef struct el2_common_regs {
18*d6af2344SJayanth Dodderi Chidanand 	uint64_t actlr_el2;
19*d6af2344SJayanth Dodderi Chidanand 	uint64_t afsr0_el2;
20*d6af2344SJayanth Dodderi Chidanand 	uint64_t afsr1_el2;
21*d6af2344SJayanth Dodderi Chidanand 	uint64_t amair_el2;
22*d6af2344SJayanth Dodderi Chidanand 	uint64_t cnthctl_el2;
23*d6af2344SJayanth Dodderi Chidanand 	uint64_t cntvoff_el2;
24*d6af2344SJayanth Dodderi Chidanand 	uint64_t cptr_el2;
25*d6af2344SJayanth Dodderi Chidanand 	uint64_t dbgvcr32_el2;
26*d6af2344SJayanth Dodderi Chidanand 	uint64_t elr_el2;
27*d6af2344SJayanth Dodderi Chidanand 	uint64_t esr_el2;
28*d6af2344SJayanth Dodderi Chidanand 	uint64_t far_el2;
29*d6af2344SJayanth Dodderi Chidanand 	uint64_t hacr_el2;
30*d6af2344SJayanth Dodderi Chidanand 	uint64_t hcr_el2;
31*d6af2344SJayanth Dodderi Chidanand 	uint64_t hpfar_el2;
32*d6af2344SJayanth Dodderi Chidanand 	uint64_t hstr_el2;
33*d6af2344SJayanth Dodderi Chidanand 	uint64_t icc_sre_el2;
34*d6af2344SJayanth Dodderi Chidanand 	uint64_t ich_hcr_el2;
35*d6af2344SJayanth Dodderi Chidanand 	uint64_t ich_vmcr_el2;
36*d6af2344SJayanth Dodderi Chidanand 	uint64_t mair_el2;
37*d6af2344SJayanth Dodderi Chidanand 	uint64_t mdcr_el2;
38*d6af2344SJayanth Dodderi Chidanand 	uint64_t pmscr_el2;
39*d6af2344SJayanth Dodderi Chidanand 	uint64_t sctlr_el2;
40*d6af2344SJayanth Dodderi Chidanand 	uint64_t spsr_el2;
41*d6af2344SJayanth Dodderi Chidanand 	uint64_t sp_el2;
42*d6af2344SJayanth Dodderi Chidanand 	uint64_t tcr_el2;
43*d6af2344SJayanth Dodderi Chidanand 	uint64_t tpidr_el2;
44*d6af2344SJayanth Dodderi Chidanand 	uint64_t ttbr0_el2;
45*d6af2344SJayanth Dodderi Chidanand 	uint64_t vbar_el2;
46*d6af2344SJayanth Dodderi Chidanand 	uint64_t vmpidr_el2;
47*d6af2344SJayanth Dodderi Chidanand 	uint64_t vpidr_el2;
48*d6af2344SJayanth Dodderi Chidanand 	uint64_t vtcr_el2;
49*d6af2344SJayanth Dodderi Chidanand 	uint64_t vttbr_el2;
50*d6af2344SJayanth Dodderi Chidanand } el2_common_regs_t;
51*d6af2344SJayanth Dodderi Chidanand 
52*d6af2344SJayanth Dodderi Chidanand typedef struct el2_mte_regs {
53*d6af2344SJayanth Dodderi Chidanand 	uint64_t tfsr_el2;
54*d6af2344SJayanth Dodderi Chidanand } el2_mte_regs_t;
55*d6af2344SJayanth Dodderi Chidanand 
56*d6af2344SJayanth Dodderi Chidanand typedef struct el2_fgt_regs {
57*d6af2344SJayanth Dodderi Chidanand 	uint64_t hdfgrtr_el2;
58*d6af2344SJayanth Dodderi Chidanand 	uint64_t hafgrtr_el2;
59*d6af2344SJayanth Dodderi Chidanand 	uint64_t hdfgwtr_el2;
60*d6af2344SJayanth Dodderi Chidanand 	uint64_t hfgitr_el2;
61*d6af2344SJayanth Dodderi Chidanand 	uint64_t hfgrtr_el2;
62*d6af2344SJayanth Dodderi Chidanand 	uint64_t hfgwtr_el2;
63*d6af2344SJayanth Dodderi Chidanand } el2_fgt_regs_t;
64*d6af2344SJayanth Dodderi Chidanand 
65*d6af2344SJayanth Dodderi Chidanand typedef struct el2_ecv_regs {
66*d6af2344SJayanth Dodderi Chidanand 	uint64_t cntpoff_el2;
67*d6af2344SJayanth Dodderi Chidanand } el2_ecv_regs_t;
68*d6af2344SJayanth Dodderi Chidanand 
69*d6af2344SJayanth Dodderi Chidanand typedef struct el2_vhe_regs {
70*d6af2344SJayanth Dodderi Chidanand 	uint64_t contextidr_el2;
71*d6af2344SJayanth Dodderi Chidanand 	uint64_t ttbr1_el2;
72*d6af2344SJayanth Dodderi Chidanand } el2_vhe_regs_t;
73*d6af2344SJayanth Dodderi Chidanand 
74*d6af2344SJayanth Dodderi Chidanand typedef struct el2_ras_regs {
75*d6af2344SJayanth Dodderi Chidanand 	uint64_t vdisr_el2;
76*d6af2344SJayanth Dodderi Chidanand 	uint64_t vsesr_el2;
77*d6af2344SJayanth Dodderi Chidanand } el2_ras_regs_t;
78*d6af2344SJayanth Dodderi Chidanand 
79*d6af2344SJayanth Dodderi Chidanand typedef struct el2_neve_regs {
80*d6af2344SJayanth Dodderi Chidanand 	uint64_t vncr_el2;
81*d6af2344SJayanth Dodderi Chidanand } el2_neve_regs_t;
82*d6af2344SJayanth Dodderi Chidanand 
83*d6af2344SJayanth Dodderi Chidanand typedef struct el2_trf_regs {
84*d6af2344SJayanth Dodderi Chidanand 	uint64_t trfcr_el2;
85*d6af2344SJayanth Dodderi Chidanand } el2_trf_regs_t;
86*d6af2344SJayanth Dodderi Chidanand 
87*d6af2344SJayanth Dodderi Chidanand typedef struct el2_csv2_regs {
88*d6af2344SJayanth Dodderi Chidanand 	uint64_t scxtnum_el2;
89*d6af2344SJayanth Dodderi Chidanand } el2_csv2_regs_t;
90*d6af2344SJayanth Dodderi Chidanand 
91*d6af2344SJayanth Dodderi Chidanand typedef struct el2_hcx_regs {
92*d6af2344SJayanth Dodderi Chidanand 	uint64_t hcrx_el2;
93*d6af2344SJayanth Dodderi Chidanand } el2_hcx_regs_t;
94*d6af2344SJayanth Dodderi Chidanand 
95*d6af2344SJayanth Dodderi Chidanand typedef struct el2_tcr2_regs {
96*d6af2344SJayanth Dodderi Chidanand 	uint64_t tcr2_el2;
97*d6af2344SJayanth Dodderi Chidanand } el2_tcr2_regs_t;
98*d6af2344SJayanth Dodderi Chidanand 
99*d6af2344SJayanth Dodderi Chidanand typedef struct el2_sxpoe_regs {
100*d6af2344SJayanth Dodderi Chidanand 	uint64_t por_el2;
101*d6af2344SJayanth Dodderi Chidanand } el2_sxpoe_regs_t;
102*d6af2344SJayanth Dodderi Chidanand 
103*d6af2344SJayanth Dodderi Chidanand typedef struct el2_sxpie_regs {
104*d6af2344SJayanth Dodderi Chidanand 	uint64_t pire0_el2;
105*d6af2344SJayanth Dodderi Chidanand 	uint64_t pir_el2;
106*d6af2344SJayanth Dodderi Chidanand } el2_sxpie_regs_t;
107*d6af2344SJayanth Dodderi Chidanand 
108*d6af2344SJayanth Dodderi Chidanand typedef struct el2_s2pie_regs {
109*d6af2344SJayanth Dodderi Chidanand 	uint64_t s2pir_el2;
110*d6af2344SJayanth Dodderi Chidanand } el2_s2pie_regs_t;
111*d6af2344SJayanth Dodderi Chidanand 
112*d6af2344SJayanth Dodderi Chidanand typedef struct el2_gcs_regs {
113*d6af2344SJayanth Dodderi Chidanand 	uint64_t gcscr_el2;
114*d6af2344SJayanth Dodderi Chidanand 	uint64_t gcspr_el2;
115*d6af2344SJayanth Dodderi Chidanand } el2_gcs_regs_t;
116*d6af2344SJayanth Dodderi Chidanand 
117*d6af2344SJayanth Dodderi Chidanand typedef struct el2_sysregs {
118*d6af2344SJayanth Dodderi Chidanand 
119*d6af2344SJayanth Dodderi Chidanand 	el2_common_regs_t common;
120*d6af2344SJayanth Dodderi Chidanand 
121*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_MTE
122*d6af2344SJayanth Dodderi Chidanand 	el2_mte_regs_t mte;
123*d6af2344SJayanth Dodderi Chidanand #endif
124*d6af2344SJayanth Dodderi Chidanand 
125*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_FGT
126*d6af2344SJayanth Dodderi Chidanand 	el2_fgt_regs_t fgt;
127*d6af2344SJayanth Dodderi Chidanand #endif
128*d6af2344SJayanth Dodderi Chidanand 
129*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_ECV
130*d6af2344SJayanth Dodderi Chidanand 	el2_ecv_regs_t ecv;
131*d6af2344SJayanth Dodderi Chidanand #endif
132*d6af2344SJayanth Dodderi Chidanand 
133*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_VHE
134*d6af2344SJayanth Dodderi Chidanand 	el2_vhe_regs_t vhe;
135*d6af2344SJayanth Dodderi Chidanand #endif
136*d6af2344SJayanth Dodderi Chidanand 
137*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_RAS
138*d6af2344SJayanth Dodderi Chidanand 	el2_ras_regs_t ras;
139*d6af2344SJayanth Dodderi Chidanand #endif
140*d6af2344SJayanth Dodderi Chidanand 
141*d6af2344SJayanth Dodderi Chidanand #if CTX_INCLUDE_NEVE_REGS
142*d6af2344SJayanth Dodderi Chidanand 	el2_neve_regs_t neve;
143*d6af2344SJayanth Dodderi Chidanand #endif
144*d6af2344SJayanth Dodderi Chidanand 
145*d6af2344SJayanth Dodderi Chidanand #if ENABLE_TRF_FOR_NS
146*d6af2344SJayanth Dodderi Chidanand 	el2_trf_regs_t trf;
147*d6af2344SJayanth Dodderi Chidanand #endif
148*d6af2344SJayanth Dodderi Chidanand 
149*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_CSV2_2
150*d6af2344SJayanth Dodderi Chidanand 	el2_csv2_regs_t csv2;
151*d6af2344SJayanth Dodderi Chidanand #endif
152*d6af2344SJayanth Dodderi Chidanand 
153*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_HCX
154*d6af2344SJayanth Dodderi Chidanand 	el2_hcx_regs_t hcx;
155*d6af2344SJayanth Dodderi Chidanand #endif
156*d6af2344SJayanth Dodderi Chidanand 
157*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_TCR2
158*d6af2344SJayanth Dodderi Chidanand 	el2_tcr2_regs_t tcr2;
159*d6af2344SJayanth Dodderi Chidanand #endif
160*d6af2344SJayanth Dodderi Chidanand 
161*d6af2344SJayanth Dodderi Chidanand #if (ENABLE_FEAT_S1POE || ENABLE_FEAT_S2POE)
162*d6af2344SJayanth Dodderi Chidanand 	el2_sxpoe_regs_t sxpoe;
163*d6af2344SJayanth Dodderi Chidanand #endif
164*d6af2344SJayanth Dodderi Chidanand 
165*d6af2344SJayanth Dodderi Chidanand #if (ENABLE_FEAT_S1PIE || ENABLE_FEAT_S2PIE)
166*d6af2344SJayanth Dodderi Chidanand 	el2_sxpie_regs_t sxpie;
167*d6af2344SJayanth Dodderi Chidanand #endif
168*d6af2344SJayanth Dodderi Chidanand 
169*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_S2PIE
170*d6af2344SJayanth Dodderi Chidanand 	el2_s2pie_regs_t s2pie;
171*d6af2344SJayanth Dodderi Chidanand #endif
172*d6af2344SJayanth Dodderi Chidanand 
173*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_GCS
174*d6af2344SJayanth Dodderi Chidanand 	el2_gcs_regs_t gcs;
175*d6af2344SJayanth Dodderi Chidanand #endif
176*d6af2344SJayanth Dodderi Chidanand 
177*d6af2344SJayanth Dodderi Chidanand } el2_sysregs_t;
178*d6af2344SJayanth Dodderi Chidanand 
179*d6af2344SJayanth Dodderi Chidanand /*
180*d6af2344SJayanth Dodderi Chidanand  * Macros to access members related to individual features of the el2_sysregs_t
181*d6af2344SJayanth Dodderi Chidanand  * structures.
182*d6af2344SJayanth Dodderi Chidanand  */
183*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_common(ctx, reg)		(((ctx)->common).reg)
184*d6af2344SJayanth Dodderi Chidanand 
185*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_common(ctx, reg, val)	((((ctx)->common).reg)	\
186*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
187*d6af2344SJayanth Dodderi Chidanand 
188*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_MTE
189*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_mte(ctx, reg)		(((ctx)->mte).reg)
190*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_mte(ctx, reg, val)	((((ctx)->mte).reg)	\
191*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
192*d6af2344SJayanth Dodderi Chidanand #else
193*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_mte(ctx, reg)		ULL(0)
194*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_mte(ctx, reg, val)
195*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_MTE */
196*d6af2344SJayanth Dodderi Chidanand 
197*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_FGT
198*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_fgt(ctx, reg)		(((ctx)->fgt).reg)
199*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_fgt(ctx, reg, val)	((((ctx)->fgt).reg)	\
200*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
201*d6af2344SJayanth Dodderi Chidanand #else
202*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_fgt(ctx, reg)		ULL(0)
203*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_fgt(ctx, reg, val)
204*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_FGT */
205*d6af2344SJayanth Dodderi Chidanand 
206*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_ECV
207*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_ecv(ctx, reg)		(((ctx)->ecv).reg)
208*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_ecv(ctx, reg, val)	((((ctx)->ecv).reg)	\
209*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
210*d6af2344SJayanth Dodderi Chidanand #else
211*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_ecv(ctx, reg)		ULL(0)
212*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_ecv(ctx, reg, val)
213*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_ECV */
214*d6af2344SJayanth Dodderi Chidanand 
215*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_VHE
216*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_vhe(ctx, reg)		(((ctx)->vhe).reg)
217*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_vhe(ctx, reg, val)	((((ctx)->vhe).reg)	\
218*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
219*d6af2344SJayanth Dodderi Chidanand #else
220*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_vhe(ctx, reg)		ULL(0)
221*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_vhe(ctx, reg, val)
222*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_VHE */
223*d6af2344SJayanth Dodderi Chidanand 
224*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_RAS
225*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_ras(ctx, reg)		(((ctx)->ras).reg)
226*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_ras(ctx, reg, val)	((((ctx)->ras).reg)	\
227*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
228*d6af2344SJayanth Dodderi Chidanand #else
229*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_ras(ctx, reg)		ULL(0)
230*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_ras(ctx, reg, val)
231*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_RAS */
232*d6af2344SJayanth Dodderi Chidanand 
233*d6af2344SJayanth Dodderi Chidanand #if CTX_INCLUDE_NEVE_REGS
234*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_neve(ctx, reg)		(((ctx)->neve).reg)
235*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_neve(ctx, reg, val)	((((ctx)->neve).reg)	\
236*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
237*d6af2344SJayanth Dodderi Chidanand #else
238*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_neve(ctx, reg)		ULL(0)
239*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_neve(ctx, reg, val)
240*d6af2344SJayanth Dodderi Chidanand #endif /* CTX_INCLUDE_NEVE_REGS */
241*d6af2344SJayanth Dodderi Chidanand 
242*d6af2344SJayanth Dodderi Chidanand #if ENABLE_TRF_FOR_NS
243*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_trf(ctx, reg)		(((ctx)->trf).reg)
244*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_trf(ctx, reg, val)	((((ctx)->trf).reg)	\
245*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
246*d6af2344SJayanth Dodderi Chidanand #else
247*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_trf(ctx, reg)		ULL(0)
248*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_trf(ctx, reg, val)
249*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_TRF_FOR_NS */
250*d6af2344SJayanth Dodderi Chidanand 
251*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_CSV2_2
252*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_csv2_2(ctx, reg)		(((ctx)->csv2).reg)
253*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_csv2_2(ctx, reg, val)	((((ctx)->csv2).reg)	\
254*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
255*d6af2344SJayanth Dodderi Chidanand #else
256*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_csv2_2(ctx, reg)		ULL(0)
257*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_csv2_2(ctx, reg, val)
258*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_CSV2_2 */
259*d6af2344SJayanth Dodderi Chidanand 
260*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_HCX
261*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_hcx(ctx, reg)		(((ctx)->hcx).reg)
262*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_hcx(ctx, reg, val)	((((ctx)->hcx).reg)	\
263*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
264*d6af2344SJayanth Dodderi Chidanand #else
265*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_hcx(ctx, reg)		ULL(0)
266*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_hcx(ctx, reg, val)
267*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_HCX */
268*d6af2344SJayanth Dodderi Chidanand 
269*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_TCR2
270*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_tcr2(ctx, reg)		(((ctx)->tcr2).reg)
271*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_tcr2(ctx, reg, val)	((((ctx)->tcr2).reg)	\
272*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
273*d6af2344SJayanth Dodderi Chidanand #else
274*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_tcr2(ctx, reg)		ULL(0)
275*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_tcr2(ctx, reg, val)
276*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_TCR2 */
277*d6af2344SJayanth Dodderi Chidanand 
278*d6af2344SJayanth Dodderi Chidanand #if (ENABLE_FEAT_S1POE || ENABLE_FEAT_S2POE)
279*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_sxpoe(ctx, reg)		(((ctx)->sxpoe).reg)
280*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_sxpoe(ctx, reg, val)	((((ctx)->sxpoe).reg)	\
281*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
282*d6af2344SJayanth Dodderi Chidanand #else
283*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_sxpoe(ctx, reg)		ULL(0)
284*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_sxpoe(ctx, reg, val)
285*d6af2344SJayanth Dodderi Chidanand #endif /*(ENABLE_FEAT_S1POE || ENABLE_FEAT_S2POE) */
286*d6af2344SJayanth Dodderi Chidanand 
287*d6af2344SJayanth Dodderi Chidanand #if (ENABLE_FEAT_S1PIE || ENABLE_FEAT_S2PIE)
288*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_sxpie(ctx, reg)		(((ctx)->sxpie).reg)
289*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_sxpie(ctx, reg, val)	((((ctx)->sxpie).reg)	\
290*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
291*d6af2344SJayanth Dodderi Chidanand #else
292*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_sxpie(ctx, reg)		ULL(0)
293*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_sxpie(ctx, reg, val)
294*d6af2344SJayanth Dodderi Chidanand #endif /*(ENABLE_FEAT_S1PIE || ENABLE_FEAT_S2PIE) */
295*d6af2344SJayanth Dodderi Chidanand 
296*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_S2PIE
297*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_s2pie(ctx, reg)		(((ctx)->s2pie).reg)
298*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_s2pie(ctx, reg, val)	((((ctx)->s2pie).reg)	\
299*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
300*d6af2344SJayanth Dodderi Chidanand #else
301*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_s2pie(ctx, reg)		ULL(0)
302*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_s2pie(ctx, reg, val)
303*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_S2PIE */
304*d6af2344SJayanth Dodderi Chidanand 
305*d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_GCS
306*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_gcs(ctx, reg)		(((ctx)->gcs).reg)
307*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_gcs(ctx, reg, val)	((((ctx)->gcs).reg)	\
308*d6af2344SJayanth Dodderi Chidanand 							= (uint64_t) (val))
309*d6af2344SJayanth Dodderi Chidanand #else
310*d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_gcs(ctx, reg)		ULL(0)
311*d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_gcs(ctx, reg, val)
312*d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_GCS */
313*d6af2344SJayanth Dodderi Chidanand 
314*d6af2344SJayanth Dodderi Chidanand #endif /* CTX_INCLUDE_EL2_REGS */
315*d6af2344SJayanth Dodderi Chidanand /******************************************************************************/
316*d6af2344SJayanth Dodderi Chidanand 
317*d6af2344SJayanth Dodderi Chidanand #endif /* __ASSEMBLER__ */
318*d6af2344SJayanth Dodderi Chidanand 
319*d6af2344SJayanth Dodderi Chidanand #endif /* CONTEXT_EL2_H */
320