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