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