1d6af2344SJayanth Dodderi Chidanand /* 2*41ae0473SSona Mathew * Copyright (c) 2025, 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 1030655136SGovindraj Raja #include <lib/extensions/sysreg128.h> 1130655136SGovindraj Raja 12d6af2344SJayanth Dodderi Chidanand #ifndef __ASSEMBLER__ 1330655136SGovindraj Raja 14d6af2344SJayanth Dodderi Chidanand /******************************************************************************* 15d6af2344SJayanth Dodderi Chidanand * EL2 Registers: 16d6af2344SJayanth Dodderi Chidanand * AArch64 EL2 system register context structure for preserving the 17d6af2344SJayanth Dodderi Chidanand * architectural state during world switches. 18d6af2344SJayanth Dodderi Chidanand ******************************************************************************/ 19d6af2344SJayanth Dodderi Chidanand typedef struct el2_common_regs { 20d6af2344SJayanth Dodderi Chidanand uint64_t actlr_el2; 21d6af2344SJayanth Dodderi Chidanand uint64_t afsr0_el2; 22d6af2344SJayanth Dodderi Chidanand uint64_t afsr1_el2; 23d6af2344SJayanth Dodderi Chidanand uint64_t amair_el2; 24d6af2344SJayanth Dodderi Chidanand uint64_t cnthctl_el2; 25d6af2344SJayanth Dodderi Chidanand uint64_t cntvoff_el2; 26d6af2344SJayanth Dodderi Chidanand uint64_t cptr_el2; 27d6af2344SJayanth Dodderi Chidanand uint64_t dbgvcr32_el2; 28d6af2344SJayanth Dodderi Chidanand uint64_t elr_el2; 29d6af2344SJayanth Dodderi Chidanand uint64_t esr_el2; 30d6af2344SJayanth Dodderi Chidanand uint64_t far_el2; 31d6af2344SJayanth Dodderi Chidanand uint64_t hacr_el2; 32d6af2344SJayanth Dodderi Chidanand uint64_t hcr_el2; 33d6af2344SJayanth Dodderi Chidanand uint64_t hpfar_el2; 34d6af2344SJayanth Dodderi Chidanand uint64_t hstr_el2; 35d6af2344SJayanth Dodderi Chidanand uint64_t icc_sre_el2; 36d6af2344SJayanth Dodderi Chidanand uint64_t ich_hcr_el2; 37d6af2344SJayanth Dodderi Chidanand uint64_t ich_vmcr_el2; 38d6af2344SJayanth Dodderi Chidanand uint64_t mair_el2; 39d6af2344SJayanth Dodderi Chidanand uint64_t mdcr_el2; 40d6af2344SJayanth Dodderi Chidanand uint64_t pmscr_el2; 41d6af2344SJayanth Dodderi Chidanand uint64_t sctlr_el2; 42d6af2344SJayanth Dodderi Chidanand uint64_t spsr_el2; 43d6af2344SJayanth Dodderi Chidanand uint64_t sp_el2; 44d6af2344SJayanth Dodderi Chidanand uint64_t tcr_el2; 45d6af2344SJayanth Dodderi Chidanand uint64_t tpidr_el2; 46d6af2344SJayanth Dodderi Chidanand uint64_t vbar_el2; 47d6af2344SJayanth Dodderi Chidanand uint64_t vmpidr_el2; 48d6af2344SJayanth Dodderi Chidanand uint64_t vpidr_el2; 49d6af2344SJayanth Dodderi Chidanand uint64_t vtcr_el2; 5030655136SGovindraj Raja sysreg_t vttbr_el2; 5130655136SGovindraj Raja sysreg_t ttbr0_el2; 52d6af2344SJayanth Dodderi Chidanand } el2_common_regs_t; 53d6af2344SJayanth Dodderi Chidanand 54a796d5aaSJayanth Dodderi Chidanand typedef struct el2_mte2_regs { 55d6af2344SJayanth Dodderi Chidanand uint64_t tfsr_el2; 56a796d5aaSJayanth Dodderi Chidanand } el2_mte2_regs_t; 57d6af2344SJayanth Dodderi Chidanand 58d6af2344SJayanth Dodderi Chidanand typedef struct el2_fgt_regs { 59d6af2344SJayanth Dodderi Chidanand uint64_t hdfgrtr_el2; 60d6af2344SJayanth Dodderi Chidanand uint64_t hafgrtr_el2; 61d6af2344SJayanth Dodderi Chidanand uint64_t hdfgwtr_el2; 62d6af2344SJayanth Dodderi Chidanand uint64_t hfgitr_el2; 63d6af2344SJayanth Dodderi Chidanand uint64_t hfgrtr_el2; 64d6af2344SJayanth Dodderi Chidanand uint64_t hfgwtr_el2; 65d6af2344SJayanth Dodderi Chidanand } el2_fgt_regs_t; 66d6af2344SJayanth Dodderi Chidanand 6733e6aaacSArvind Ram Prakash typedef struct el2_fgt2_regs { 6833e6aaacSArvind Ram Prakash uint64_t hdfgrtr2_el2; 6933e6aaacSArvind Ram Prakash uint64_t hdfgwtr2_el2; 7033e6aaacSArvind Ram Prakash uint64_t hfgitr2_el2; 7133e6aaacSArvind Ram Prakash uint64_t hfgrtr2_el2; 7233e6aaacSArvind Ram Prakash uint64_t hfgwtr2_el2; 7333e6aaacSArvind Ram Prakash } el2_fgt2_regs_t; 7433e6aaacSArvind Ram Prakash 75d6af2344SJayanth Dodderi Chidanand typedef struct el2_ecv_regs { 76d6af2344SJayanth Dodderi Chidanand uint64_t cntpoff_el2; 77d6af2344SJayanth Dodderi Chidanand } el2_ecv_regs_t; 78d6af2344SJayanth Dodderi Chidanand 79d6af2344SJayanth Dodderi Chidanand typedef struct el2_vhe_regs { 80d6af2344SJayanth Dodderi Chidanand uint64_t contextidr_el2; 8130655136SGovindraj Raja sysreg_t ttbr1_el2; 82d6af2344SJayanth Dodderi Chidanand } el2_vhe_regs_t; 83d6af2344SJayanth Dodderi Chidanand 84d6af2344SJayanth Dodderi Chidanand typedef struct el2_ras_regs { 85d6af2344SJayanth Dodderi Chidanand uint64_t vdisr_el2; 86d6af2344SJayanth Dodderi Chidanand uint64_t vsesr_el2; 87d6af2344SJayanth Dodderi Chidanand } el2_ras_regs_t; 88d6af2344SJayanth Dodderi Chidanand 89d6af2344SJayanth Dodderi Chidanand typedef struct el2_neve_regs { 90d6af2344SJayanth Dodderi Chidanand uint64_t vncr_el2; 91d6af2344SJayanth Dodderi Chidanand } el2_neve_regs_t; 92d6af2344SJayanth Dodderi Chidanand 93d6af2344SJayanth Dodderi Chidanand typedef struct el2_trf_regs { 94d6af2344SJayanth Dodderi Chidanand uint64_t trfcr_el2; 95d6af2344SJayanth Dodderi Chidanand } el2_trf_regs_t; 96d6af2344SJayanth Dodderi Chidanand 97d6af2344SJayanth Dodderi Chidanand typedef struct el2_csv2_regs { 98d6af2344SJayanth Dodderi Chidanand uint64_t scxtnum_el2; 99d6af2344SJayanth Dodderi Chidanand } el2_csv2_regs_t; 100d6af2344SJayanth Dodderi Chidanand 101d6af2344SJayanth Dodderi Chidanand typedef struct el2_hcx_regs { 102d6af2344SJayanth Dodderi Chidanand uint64_t hcrx_el2; 103d6af2344SJayanth Dodderi Chidanand } el2_hcx_regs_t; 104d6af2344SJayanth Dodderi Chidanand 105d6af2344SJayanth Dodderi Chidanand typedef struct el2_tcr2_regs { 106d6af2344SJayanth Dodderi Chidanand uint64_t tcr2_el2; 107d6af2344SJayanth Dodderi Chidanand } el2_tcr2_regs_t; 108d6af2344SJayanth Dodderi Chidanand 109d6af2344SJayanth Dodderi Chidanand typedef struct el2_sxpoe_regs { 110d6af2344SJayanth Dodderi Chidanand uint64_t por_el2; 111d6af2344SJayanth Dodderi Chidanand } el2_sxpoe_regs_t; 112d6af2344SJayanth Dodderi Chidanand 113d6af2344SJayanth Dodderi Chidanand typedef struct el2_sxpie_regs { 114d6af2344SJayanth Dodderi Chidanand uint64_t pire0_el2; 115d6af2344SJayanth Dodderi Chidanand uint64_t pir_el2; 116d6af2344SJayanth Dodderi Chidanand } el2_sxpie_regs_t; 117d6af2344SJayanth Dodderi Chidanand 118d6af2344SJayanth Dodderi Chidanand typedef struct el2_s2pie_regs { 119d6af2344SJayanth Dodderi Chidanand uint64_t s2pir_el2; 120d6af2344SJayanth Dodderi Chidanand } el2_s2pie_regs_t; 121d6af2344SJayanth Dodderi Chidanand 122d6af2344SJayanth Dodderi Chidanand typedef struct el2_gcs_regs { 123d6af2344SJayanth Dodderi Chidanand uint64_t gcscr_el2; 124d6af2344SJayanth Dodderi Chidanand uint64_t gcspr_el2; 125d6af2344SJayanth Dodderi Chidanand } el2_gcs_regs_t; 126d6af2344SJayanth Dodderi Chidanand 1277d930c7eSJayanth Dodderi Chidanand typedef struct el2_mpam_regs { 1287d930c7eSJayanth Dodderi Chidanand uint64_t mpam2_el2; 1297d930c7eSJayanth Dodderi Chidanand uint64_t mpamhcr_el2; 1307d930c7eSJayanth Dodderi Chidanand uint64_t mpamvpm0_el2; 1317d930c7eSJayanth Dodderi Chidanand uint64_t mpamvpm1_el2; 1327d930c7eSJayanth Dodderi Chidanand uint64_t mpamvpm2_el2; 1337d930c7eSJayanth Dodderi Chidanand uint64_t mpamvpm3_el2; 1347d930c7eSJayanth Dodderi Chidanand uint64_t mpamvpm4_el2; 1357d930c7eSJayanth Dodderi Chidanand uint64_t mpamvpm5_el2; 1367d930c7eSJayanth Dodderi Chidanand uint64_t mpamvpm6_el2; 1377d930c7eSJayanth Dodderi Chidanand uint64_t mpamvpm7_el2; 1387d930c7eSJayanth Dodderi Chidanand uint64_t mpamvpmv_el2; 1397d930c7eSJayanth Dodderi Chidanand } el2_mpam_regs_t; 1407d930c7eSJayanth Dodderi Chidanand 1414ec4e545SJayanth Dodderi Chidanand typedef struct el2_sctlr2_regs { 1424ec4e545SJayanth Dodderi Chidanand uint64_t sctlr2_el2; 1434ec4e545SJayanth Dodderi Chidanand } el2_sctlr2_regs_t; 1444ec4e545SJayanth Dodderi Chidanand 145*41ae0473SSona Mathew typedef struct el2_brbe_regs { 146*41ae0473SSona Mathew uint64_t brbcr_el2; 147*41ae0473SSona Mathew } el2_brbe_regs_t; 148*41ae0473SSona Mathew 149d6af2344SJayanth Dodderi Chidanand typedef struct el2_sysregs { 150d6af2344SJayanth Dodderi Chidanand 151d6af2344SJayanth Dodderi Chidanand el2_common_regs_t common; 152d6af2344SJayanth Dodderi Chidanand 153a796d5aaSJayanth Dodderi Chidanand #if ENABLE_FEAT_MTE2 154a796d5aaSJayanth Dodderi Chidanand el2_mte2_regs_t mte2; 155d6af2344SJayanth Dodderi Chidanand #endif 156d6af2344SJayanth Dodderi Chidanand 157d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_FGT 158d6af2344SJayanth Dodderi Chidanand el2_fgt_regs_t fgt; 159d6af2344SJayanth Dodderi Chidanand #endif 160d6af2344SJayanth Dodderi Chidanand 16133e6aaacSArvind Ram Prakash #if ENABLE_FEAT_FGT2 16233e6aaacSArvind Ram Prakash el2_fgt2_regs_t fgt2; 16333e6aaacSArvind Ram Prakash #endif 16433e6aaacSArvind Ram Prakash 165d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_ECV 166d6af2344SJayanth Dodderi Chidanand el2_ecv_regs_t ecv; 167d6af2344SJayanth Dodderi Chidanand #endif 168d6af2344SJayanth Dodderi Chidanand 169d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_VHE 170d6af2344SJayanth Dodderi Chidanand el2_vhe_regs_t vhe; 171d6af2344SJayanth Dodderi Chidanand #endif 172d6af2344SJayanth Dodderi Chidanand 173d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_RAS 174d6af2344SJayanth Dodderi Chidanand el2_ras_regs_t ras; 175d6af2344SJayanth Dodderi Chidanand #endif 176d6af2344SJayanth Dodderi Chidanand 177d6af2344SJayanth Dodderi Chidanand #if CTX_INCLUDE_NEVE_REGS 178d6af2344SJayanth Dodderi Chidanand el2_neve_regs_t neve; 179d6af2344SJayanth Dodderi Chidanand #endif 180d6af2344SJayanth Dodderi Chidanand 181d6af2344SJayanth Dodderi Chidanand #if ENABLE_TRF_FOR_NS 182d6af2344SJayanth Dodderi Chidanand el2_trf_regs_t trf; 183d6af2344SJayanth Dodderi Chidanand #endif 184d6af2344SJayanth Dodderi Chidanand 185d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_CSV2_2 186d6af2344SJayanth Dodderi Chidanand el2_csv2_regs_t csv2; 187d6af2344SJayanth Dodderi Chidanand #endif 188d6af2344SJayanth Dodderi Chidanand 189d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_HCX 190d6af2344SJayanth Dodderi Chidanand el2_hcx_regs_t hcx; 191d6af2344SJayanth Dodderi Chidanand #endif 192d6af2344SJayanth Dodderi Chidanand 193d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_TCR2 194d6af2344SJayanth Dodderi Chidanand el2_tcr2_regs_t tcr2; 195d6af2344SJayanth Dodderi Chidanand #endif 196d6af2344SJayanth Dodderi Chidanand 197d6af2344SJayanth Dodderi Chidanand #if (ENABLE_FEAT_S1POE || ENABLE_FEAT_S2POE) 198d6af2344SJayanth Dodderi Chidanand el2_sxpoe_regs_t sxpoe; 199d6af2344SJayanth Dodderi Chidanand #endif 200d6af2344SJayanth Dodderi Chidanand 201d6af2344SJayanth Dodderi Chidanand #if (ENABLE_FEAT_S1PIE || ENABLE_FEAT_S2PIE) 202d6af2344SJayanth Dodderi Chidanand el2_sxpie_regs_t sxpie; 203d6af2344SJayanth Dodderi Chidanand #endif 204d6af2344SJayanth Dodderi Chidanand 205d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_S2PIE 206d6af2344SJayanth Dodderi Chidanand el2_s2pie_regs_t s2pie; 207d6af2344SJayanth Dodderi Chidanand #endif 208d6af2344SJayanth Dodderi Chidanand 209d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_GCS 210d6af2344SJayanth Dodderi Chidanand el2_gcs_regs_t gcs; 211d6af2344SJayanth Dodderi Chidanand #endif 212d6af2344SJayanth Dodderi Chidanand 2137d930c7eSJayanth Dodderi Chidanand #if CTX_INCLUDE_MPAM_REGS 2147d930c7eSJayanth Dodderi Chidanand el2_mpam_regs_t mpam; 2157d930c7eSJayanth Dodderi Chidanand #endif 2167d930c7eSJayanth Dodderi Chidanand 2174ec4e545SJayanth Dodderi Chidanand #if ENABLE_FEAT_SCTLR2 2184ec4e545SJayanth Dodderi Chidanand el2_sctlr2_regs_t sctlr2; 2194ec4e545SJayanth Dodderi Chidanand #endif 2204ec4e545SJayanth Dodderi Chidanand 221*41ae0473SSona Mathew #if ENABLE_BRBE_FOR_NS 222*41ae0473SSona Mathew el2_brbe_regs_t brbe; 223*41ae0473SSona Mathew #endif 224*41ae0473SSona Mathew 225d6af2344SJayanth Dodderi Chidanand } el2_sysregs_t; 226d6af2344SJayanth Dodderi Chidanand 227d6af2344SJayanth Dodderi Chidanand /* 228d6af2344SJayanth Dodderi Chidanand * Macros to access members related to individual features of the el2_sysregs_t 229d6af2344SJayanth Dodderi Chidanand * structures. 230d6af2344SJayanth Dodderi Chidanand */ 231d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_common(ctx, reg) (((ctx)->common).reg) 232d6af2344SJayanth Dodderi Chidanand 233d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_common(ctx, reg, val) ((((ctx)->common).reg) \ 234d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 235d6af2344SJayanth Dodderi Chidanand 2366595f4cbSIgor Podgainõi #define write_el2_ctx_common_sysreg128(ctx, reg, val) ((((ctx)->common).reg) \ 23730655136SGovindraj Raja = (sysreg_t) (val)) 23830655136SGovindraj Raja 239a796d5aaSJayanth Dodderi Chidanand #if ENABLE_FEAT_MTE2 240a796d5aaSJayanth Dodderi Chidanand #define read_el2_ctx_mte2(ctx, reg) (((ctx)->mte2).reg) 241a796d5aaSJayanth Dodderi Chidanand #define write_el2_ctx_mte2(ctx, reg, val) ((((ctx)->mte2).reg) \ 242d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 243d6af2344SJayanth Dodderi Chidanand #else 244a796d5aaSJayanth Dodderi Chidanand #define read_el2_ctx_mte2(ctx, reg) ULL(0) 245a796d5aaSJayanth Dodderi Chidanand #define write_el2_ctx_mte2(ctx, reg, val) 246a796d5aaSJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_MTE2 */ 247d6af2344SJayanth Dodderi Chidanand 248d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_FGT 249d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_fgt(ctx, reg) (((ctx)->fgt).reg) 250d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_fgt(ctx, reg, val) ((((ctx)->fgt).reg) \ 251d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 252d6af2344SJayanth Dodderi Chidanand #else 253d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_fgt(ctx, reg) ULL(0) 254d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_fgt(ctx, reg, val) 255d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_FGT */ 256d6af2344SJayanth Dodderi Chidanand 25733e6aaacSArvind Ram Prakash #if ENABLE_FEAT_FGT2 25833e6aaacSArvind Ram Prakash #define read_el2_ctx_fgt2(ctx, reg) (((ctx)->fgt2).reg) 25933e6aaacSArvind Ram Prakash #define write_el2_ctx_fgt2(ctx, reg, val) ((((ctx)->fgt2).reg) \ 26033e6aaacSArvind Ram Prakash = (uint64_t) (val)) 26133e6aaacSArvind Ram Prakash #else 26233e6aaacSArvind Ram Prakash #define read_el2_ctx_fgt2(ctx, reg) ULL(0) 26333e6aaacSArvind Ram Prakash #define write_el2_ctx_fgt2(ctx, reg, val) 26433e6aaacSArvind Ram Prakash #endif /* ENABLE_FEAT_FGT */ 26533e6aaacSArvind Ram Prakash 266d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_ECV 267d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_ecv(ctx, reg) (((ctx)->ecv).reg) 268d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_ecv(ctx, reg, val) ((((ctx)->ecv).reg) \ 269d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 270d6af2344SJayanth Dodderi Chidanand #else 271d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_ecv(ctx, reg) ULL(0) 272d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_ecv(ctx, reg, val) 273d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_ECV */ 274d6af2344SJayanth Dodderi Chidanand 275d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_VHE 276d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_vhe(ctx, reg) (((ctx)->vhe).reg) 277d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_vhe(ctx, reg, val) ((((ctx)->vhe).reg) \ 278d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 27930655136SGovindraj Raja #define write_el2_ctx_vhe_sysreg128(ctx, reg, val) ((((ctx)->vhe).reg) \ 28030655136SGovindraj Raja = (sysreg_t) (val)) 281d6af2344SJayanth Dodderi Chidanand #else 282d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_vhe(ctx, reg) ULL(0) 283d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_vhe(ctx, reg, val) 2846595f4cbSIgor Podgainõi #define write_el2_ctx_vhe_sysreg128(ctx, reg, val) 285d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_VHE */ 286d6af2344SJayanth Dodderi Chidanand 287d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_RAS 288d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_ras(ctx, reg) (((ctx)->ras).reg) 289d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_ras(ctx, reg, val) ((((ctx)->ras).reg) \ 290d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 291d6af2344SJayanth Dodderi Chidanand #else 292d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_ras(ctx, reg) ULL(0) 293d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_ras(ctx, reg, val) 294d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_RAS */ 295d6af2344SJayanth Dodderi Chidanand 296d6af2344SJayanth Dodderi Chidanand #if CTX_INCLUDE_NEVE_REGS 297d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_neve(ctx, reg) (((ctx)->neve).reg) 298d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_neve(ctx, reg, val) ((((ctx)->neve).reg) \ 299d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 300d6af2344SJayanth Dodderi Chidanand #else 301d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_neve(ctx, reg) ULL(0) 302d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_neve(ctx, reg, val) 303d6af2344SJayanth Dodderi Chidanand #endif /* CTX_INCLUDE_NEVE_REGS */ 304d6af2344SJayanth Dodderi Chidanand 305d6af2344SJayanth Dodderi Chidanand #if ENABLE_TRF_FOR_NS 306d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_trf(ctx, reg) (((ctx)->trf).reg) 307d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_trf(ctx, reg, val) ((((ctx)->trf).reg) \ 308d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 309d6af2344SJayanth Dodderi Chidanand #else 310d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_trf(ctx, reg) ULL(0) 311d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_trf(ctx, reg, val) 312d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_TRF_FOR_NS */ 313d6af2344SJayanth Dodderi Chidanand 314d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_CSV2_2 315d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_csv2_2(ctx, reg) (((ctx)->csv2).reg) 316d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_csv2_2(ctx, reg, val) ((((ctx)->csv2).reg) \ 317d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 318d6af2344SJayanth Dodderi Chidanand #else 319d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_csv2_2(ctx, reg) ULL(0) 320d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_csv2_2(ctx, reg, val) 321d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_CSV2_2 */ 322d6af2344SJayanth Dodderi Chidanand 323d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_HCX 324d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_hcx(ctx, reg) (((ctx)->hcx).reg) 325d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_hcx(ctx, reg, val) ((((ctx)->hcx).reg) \ 326d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 327d6af2344SJayanth Dodderi Chidanand #else 328d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_hcx(ctx, reg) ULL(0) 329d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_hcx(ctx, reg, val) 330d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_HCX */ 331d6af2344SJayanth Dodderi Chidanand 332d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_TCR2 333d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_tcr2(ctx, reg) (((ctx)->tcr2).reg) 334d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_tcr2(ctx, reg, val) ((((ctx)->tcr2).reg) \ 335d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 336d6af2344SJayanth Dodderi Chidanand #else 337d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_tcr2(ctx, reg) ULL(0) 338d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_tcr2(ctx, reg, val) 339d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_TCR2 */ 340d6af2344SJayanth Dodderi Chidanand 341d6af2344SJayanth Dodderi Chidanand #if (ENABLE_FEAT_S1POE || ENABLE_FEAT_S2POE) 342d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_sxpoe(ctx, reg) (((ctx)->sxpoe).reg) 343d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_sxpoe(ctx, reg, val) ((((ctx)->sxpoe).reg) \ 344d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 345d6af2344SJayanth Dodderi Chidanand #else 346d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_sxpoe(ctx, reg) ULL(0) 347d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_sxpoe(ctx, reg, val) 348d6af2344SJayanth Dodderi Chidanand #endif /*(ENABLE_FEAT_S1POE || ENABLE_FEAT_S2POE) */ 349d6af2344SJayanth Dodderi Chidanand 350d6af2344SJayanth Dodderi Chidanand #if (ENABLE_FEAT_S1PIE || ENABLE_FEAT_S2PIE) 351d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_sxpie(ctx, reg) (((ctx)->sxpie).reg) 352d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_sxpie(ctx, reg, val) ((((ctx)->sxpie).reg) \ 353d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 354d6af2344SJayanth Dodderi Chidanand #else 355d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_sxpie(ctx, reg) ULL(0) 356d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_sxpie(ctx, reg, val) 357d6af2344SJayanth Dodderi Chidanand #endif /*(ENABLE_FEAT_S1PIE || ENABLE_FEAT_S2PIE) */ 358d6af2344SJayanth Dodderi Chidanand 359d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_S2PIE 360d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_s2pie(ctx, reg) (((ctx)->s2pie).reg) 361d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_s2pie(ctx, reg, val) ((((ctx)->s2pie).reg) \ 362d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 363d6af2344SJayanth Dodderi Chidanand #else 364d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_s2pie(ctx, reg) ULL(0) 365d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_s2pie(ctx, reg, val) 366d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_S2PIE */ 367d6af2344SJayanth Dodderi Chidanand 368d6af2344SJayanth Dodderi Chidanand #if ENABLE_FEAT_GCS 369d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_gcs(ctx, reg) (((ctx)->gcs).reg) 370d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_gcs(ctx, reg, val) ((((ctx)->gcs).reg) \ 371d6af2344SJayanth Dodderi Chidanand = (uint64_t) (val)) 372d6af2344SJayanth Dodderi Chidanand #else 373d6af2344SJayanth Dodderi Chidanand #define read_el2_ctx_gcs(ctx, reg) ULL(0) 374d6af2344SJayanth Dodderi Chidanand #define write_el2_ctx_gcs(ctx, reg, val) 375d6af2344SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_GCS */ 376d6af2344SJayanth Dodderi Chidanand 3777d930c7eSJayanth Dodderi Chidanand #if CTX_INCLUDE_MPAM_REGS 3787d930c7eSJayanth Dodderi Chidanand #define read_el2_ctx_mpam(ctx, reg) (((ctx)->mpam).reg) 3797d930c7eSJayanth Dodderi Chidanand #define write_el2_ctx_mpam(ctx, reg, val) ((((ctx)->mpam).reg) \ 3807d930c7eSJayanth Dodderi Chidanand = (uint64_t) (val)) 3817d930c7eSJayanth Dodderi Chidanand #else 3827d930c7eSJayanth Dodderi Chidanand #define read_el2_ctx_mpam(ctx, reg) ULL(0) 3837d930c7eSJayanth Dodderi Chidanand #define write_el2_ctx_mpam(ctx, reg, val) 3847d930c7eSJayanth Dodderi Chidanand #endif /* CTX_INCLUDE_MPAM_REGS */ 3857d930c7eSJayanth Dodderi Chidanand 3864ec4e545SJayanth Dodderi Chidanand #if ENABLE_FEAT_SCTLR2 3874ec4e545SJayanth Dodderi Chidanand #define read_el2_ctx_sctlr2(ctx, reg) (((ctx)->sctlr2).reg) 3884ec4e545SJayanth Dodderi Chidanand #define write_el2_ctx_sctlr2(ctx, reg, val) ((((ctx)->sctlr2).reg) \ 3894ec4e545SJayanth Dodderi Chidanand = (uint64_t) (val)) 3904ec4e545SJayanth Dodderi Chidanand #else 3914ec4e545SJayanth Dodderi Chidanand #define read_el2_ctx_sctlr2(ctx, reg) ULL(0) 3924ec4e545SJayanth Dodderi Chidanand #define write_el2_ctx_sctlr2(ctx, reg, val) 3934ec4e545SJayanth Dodderi Chidanand #endif /* ENABLE_FEAT_SCTLR2 */ 3944ec4e545SJayanth Dodderi Chidanand 395*41ae0473SSona Mathew #if ENABLE_BRBE_FOR_NS 396*41ae0473SSona Mathew #define read_el2_ctx_brbe(ctx, reg) (((ctx)->brbe).reg) 397*41ae0473SSona Mathew #define write_el2_ctx_brbe(ctx, reg, val) ((((ctx)->brbe).reg) \ 398*41ae0473SSona Mathew = (uint64_t) (val)) 399*41ae0473SSona Mathew #else 400*41ae0473SSona Mathew #define read_el2_ctx_brbe(ctx, reg) ULL(0) 401*41ae0473SSona Mathew #define write_el2_ctx_brbe(ctx, reg, val) 402*41ae0473SSona Mathew #endif /* ENABLE_BRBE_FOR_NS */ 403*41ae0473SSona Mathew 404d6af2344SJayanth Dodderi Chidanand /******************************************************************************/ 405d6af2344SJayanth Dodderi Chidanand 406d6af2344SJayanth Dodderi Chidanand #endif /* __ASSEMBLER__ */ 407d6af2344SJayanth Dodderi Chidanand 408d6af2344SJayanth Dodderi Chidanand #endif /* CONTEXT_EL2_H */ 409