1*f396aec8SArvind Ram Prakash /*
2*f396aec8SArvind Ram Prakash * Copyright (c) 2025, Arm Limited. All rights reserved.
3*f396aec8SArvind Ram Prakash *
4*f396aec8SArvind Ram Prakash * SPDX-License-Identifier: BSD-3-Clause
5*f396aec8SArvind Ram Prakash */
6*f396aec8SArvind Ram Prakash
7*f396aec8SArvind Ram Prakash #include <arch.h>
8*f396aec8SArvind Ram Prakash #include <arch_features.h>
9*f396aec8SArvind Ram Prakash #include <arch_helpers.h>
10*f396aec8SArvind Ram Prakash #include <context.h>
11*f396aec8SArvind Ram Prakash #include <lib/el3_runtime/context_mgmt.h>
12*f396aec8SArvind Ram Prakash #include <lib/el3_runtime/cpu_data.h>
13*f396aec8SArvind Ram Prakash #include <lib/extensions/idte3.h>
14*f396aec8SArvind Ram Prakash
idte3_init_percpu_once_regs(size_t security_state)15*f396aec8SArvind Ram Prakash void idte3_init_percpu_once_regs(size_t security_state)
16*f396aec8SArvind Ram Prakash {
17*f396aec8SArvind Ram Prakash assert(security_state < CPU_CONTEXT_NUM);
18*f396aec8SArvind Ram Prakash
19*f396aec8SArvind Ram Prakash percpu_idregs_t * const reg =
20*f396aec8SArvind Ram Prakash &get_cpu_data(idregs[security_state]);
21*f396aec8SArvind Ram Prakash
22*f396aec8SArvind Ram Prakash reg->id_aa64dfr0_el1 = read_id_aa64dfr0_el1();
23*f396aec8SArvind Ram Prakash reg->id_aa64dfr1_el1 = read_id_aa64dfr1_el1();
24*f396aec8SArvind Ram Prakash
25*f396aec8SArvind Ram Prakash update_feat_spe_idreg_field(security_state);
26*f396aec8SArvind Ram Prakash update_feat_brbe_idreg_field(security_state);
27*f396aec8SArvind Ram Prakash update_feat_trbe_idreg_field(security_state);
28*f396aec8SArvind Ram Prakash update_feat_trf_idreg_field(security_state);
29*f396aec8SArvind Ram Prakash update_feat_mtpmu_idreg_field(security_state);
30*f396aec8SArvind Ram Prakash update_feat_sebep_idreg_field(security_state);
31*f396aec8SArvind Ram Prakash update_feat_sys_reg_trace_idreg_field(security_state);
32*f396aec8SArvind Ram Prakash update_feat_debugv8p9_idreg_field(security_state);
33*f396aec8SArvind Ram Prakash update_feat_ebep_idreg_field(security_state);
34*f396aec8SArvind Ram Prakash }
35*f396aec8SArvind Ram Prakash
idte3_init_cached_idregs_per_world(size_t security_state)36*f396aec8SArvind Ram Prakash void idte3_init_cached_idregs_per_world(size_t security_state)
37*f396aec8SArvind Ram Prakash {
38*f396aec8SArvind Ram Prakash
39*f396aec8SArvind Ram Prakash assert(security_state < CPU_CONTEXT_NUM);
40*f396aec8SArvind Ram Prakash
41*f396aec8SArvind Ram Prakash per_world_context_t *per_world_ctx = &per_world_context[security_state];
42*f396aec8SArvind Ram Prakash perworld_idregs_t *reg = &(per_world_ctx->idregs);
43*f396aec8SArvind Ram Prakash
44*f396aec8SArvind Ram Prakash reg->id_aa64pfr0_el1 = read_id_aa64pfr0_el1();
45*f396aec8SArvind Ram Prakash reg->id_aa64pfr1_el1 = read_id_aa64pfr1_el1();
46*f396aec8SArvind Ram Prakash reg->id_aa64pfr2_el1 = read_id_aa64pfr2_el1();
47*f396aec8SArvind Ram Prakash reg->id_aa64smfr0_el1 = read_id_aa64smfr0_el1();
48*f396aec8SArvind Ram Prakash reg->id_aa64isar0_el1 = read_id_aa64isar0_el1();
49*f396aec8SArvind Ram Prakash reg->id_aa64isar1_el1 = read_id_aa64isar1_el1();
50*f396aec8SArvind Ram Prakash reg->id_aa64isar2_el1 = read_id_aa64isar2_el1();
51*f396aec8SArvind Ram Prakash reg->id_aa64isar3_el1 = read_id_aa64isar3_el1();
52*f396aec8SArvind Ram Prakash reg->id_aa64mmfr0_el1 = read_id_aa64mmfr0_el1();
53*f396aec8SArvind Ram Prakash reg->id_aa64mmfr1_el1 = read_id_aa64mmfr1_el1();
54*f396aec8SArvind Ram Prakash reg->id_aa64mmfr2_el1 = read_id_aa64mmfr2_el1();
55*f396aec8SArvind Ram Prakash reg->id_aa64mmfr3_el1 = read_id_aa64mmfr3_el1();
56*f396aec8SArvind Ram Prakash reg->id_aa64mmfr4_el1 = read_id_aa64mmfr4_el1();
57*f396aec8SArvind Ram Prakash
58*f396aec8SArvind Ram Prakash update_feat_pan_idreg_field(security_state);
59*f396aec8SArvind Ram Prakash update_feat_vhe_idreg_field(security_state);
60*f396aec8SArvind Ram Prakash update_feat_ttcnp_idreg_field(security_state);
61*f396aec8SArvind Ram Prakash update_feat_uao_idreg_field(security_state);
62*f396aec8SArvind Ram Prakash update_feat_pacqarma3_idreg_field(security_state);
63*f396aec8SArvind Ram Prakash update_feat_pauth_idreg_field(security_state);
64*f396aec8SArvind Ram Prakash update_feat_ttst_idreg_field(security_state);
65*f396aec8SArvind Ram Prakash update_feat_bti_idreg_field(security_state);
66*f396aec8SArvind Ram Prakash update_feat_mte2_idreg_field(security_state);
67*f396aec8SArvind Ram Prakash update_feat_ssbs_idreg_field(security_state);
68*f396aec8SArvind Ram Prakash update_feat_nmi_idreg_field(security_state);
69*f396aec8SArvind Ram Prakash update_feat_gcs_idreg_field(security_state);
70*f396aec8SArvind Ram Prakash update_feat_ebep_idreg_field(security_state);
71*f396aec8SArvind Ram Prakash update_feat_sel2_idreg_field(security_state);
72*f396aec8SArvind Ram Prakash update_feat_twed_idreg_field(security_state);
73*f396aec8SArvind Ram Prakash update_feat_fgt_idreg_field(security_state);
74*f396aec8SArvind Ram Prakash update_feat_ecv_idreg_field(security_state);
75*f396aec8SArvind Ram Prakash update_feat_rng_idreg_field(security_state);
76*f396aec8SArvind Ram Prakash update_feat_tcr2_idreg_field(security_state);
77*f396aec8SArvind Ram Prakash update_feat_s2poe_idreg_field(security_state);
78*f396aec8SArvind Ram Prakash update_feat_s1poe_idreg_field(security_state);
79*f396aec8SArvind Ram Prakash update_feat_s2pie_idreg_field(security_state);
80*f396aec8SArvind Ram Prakash update_feat_s1pie_idreg_field(security_state);
81*f396aec8SArvind Ram Prakash update_feat_amu_idreg_field(security_state);
82*f396aec8SArvind Ram Prakash update_feat_mpam_idreg_field(security_state);
83*f396aec8SArvind Ram Prakash update_feat_hcx_idreg_field(security_state);
84*f396aec8SArvind Ram Prakash update_feat_rng_trap_idreg_field(security_state);
85*f396aec8SArvind Ram Prakash update_feat_sb_idreg_field(security_state);
86*f396aec8SArvind Ram Prakash update_feat_csv2_2_idreg_field(security_state);
87*f396aec8SArvind Ram Prakash update_feat_sve_idreg_field(security_state);
88*f396aec8SArvind Ram Prakash update_feat_ras_idreg_field(security_state);
89*f396aec8SArvind Ram Prakash update_feat_dit_idreg_field(security_state);
90*f396aec8SArvind Ram Prakash update_feat_trbe_idreg_field(security_state);
91*f396aec8SArvind Ram Prakash update_feat_sme_idreg_field(security_state);
92*f396aec8SArvind Ram Prakash update_feat_fgt2_idreg_field(security_state);
93*f396aec8SArvind Ram Prakash update_feat_the_idreg_field(security_state);
94*f396aec8SArvind Ram Prakash update_feat_sctlr2_idreg_field(security_state);
95*f396aec8SArvind Ram Prakash update_feat_d128_idreg_field(security_state);
96*f396aec8SArvind Ram Prakash update_feat_ls64_accdata_idreg_field(security_state);
97*f396aec8SArvind Ram Prakash update_feat_fpmr_idreg_field(security_state);
98*f396aec8SArvind Ram Prakash update_feat_mops_idreg_field(security_state);
99*f396aec8SArvind Ram Prakash update_feat_fgwte3_idreg_field(security_state);
100*f396aec8SArvind Ram Prakash update_feat_cpa2_idreg_field(security_state);
101*f396aec8SArvind Ram Prakash update_feat_idte3_idreg_field(security_state);
102*f396aec8SArvind Ram Prakash }
103*f396aec8SArvind Ram Prakash
handle_idreg_trap(uint64_t esr_el3,cpu_context_t * ctx,u_register_t flags)104*f396aec8SArvind Ram Prakash int handle_idreg_trap(uint64_t esr_el3, cpu_context_t *ctx, u_register_t flags)
105*f396aec8SArvind Ram Prakash {
106*f396aec8SArvind Ram Prakash uint32_t iss = (uint32_t) ESR_ELx_ISS(esr_el3);
107*f396aec8SArvind Ram Prakash uint8_t rt = (uint8_t) ISS_SYS64_RT(iss);
108*f396aec8SArvind Ram Prakash uint8_t op0 = (uint8_t) ISS_SYS64_OP0(iss);
109*f396aec8SArvind Ram Prakash uint8_t op1 = (uint8_t) ISS_SYS64_OP1(iss);
110*f396aec8SArvind Ram Prakash uint8_t CRn = (uint8_t) ISS_SYS64_CRN(iss);
111*f396aec8SArvind Ram Prakash uint8_t CRm = (uint8_t) ISS_SYS64_CRM(iss);
112*f396aec8SArvind Ram Prakash uint8_t op2 = (uint8_t) ISS_SYS64_OP2(iss);
113*f396aec8SArvind Ram Prakash
114*f396aec8SArvind Ram Prakash u_register_t idreg = esr_el3 & ESR_EL3_SYSREG_MASK;
115*f396aec8SArvind Ram Prakash
116*f396aec8SArvind Ram Prakash u_register_t value = 0ULL;
117*f396aec8SArvind Ram Prakash size_t security_state = GET_SECURITY_STATE(flags);
118*f396aec8SArvind Ram Prakash percpu_idregs_t *percpu_reg = &(get_cpu_data(idregs[security_state]));
119*f396aec8SArvind Ram Prakash
120*f396aec8SArvind Ram Prakash per_world_context_t *per_world_ctx =
121*f396aec8SArvind Ram Prakash &per_world_context[get_cpu_context_index(security_state)];
122*f396aec8SArvind Ram Prakash perworld_idregs_t *perworld_reg = &(per_world_ctx->idregs);
123*f396aec8SArvind Ram Prakash
124*f396aec8SArvind Ram Prakash switch (idreg) {
125*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64PFR0_EL1:
126*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64pfr0_el1;
127*f396aec8SArvind Ram Prakash break;
128*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64PFR1_EL1:
129*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64pfr1_el1;
130*f396aec8SArvind Ram Prakash break;
131*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64PFR2_EL1:
132*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64pfr2_el1;
133*f396aec8SArvind Ram Prakash break;
134*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64SMFR0_EL1:
135*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64smfr0_el1;
136*f396aec8SArvind Ram Prakash break;
137*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64ISAR0_EL1:
138*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64isar0_el1;
139*f396aec8SArvind Ram Prakash break;
140*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64ISAR1_EL1:
141*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64isar1_el1;
142*f396aec8SArvind Ram Prakash break;
143*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64ISAR2_EL1:
144*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64isar2_el1;
145*f396aec8SArvind Ram Prakash break;
146*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64ISAR3_EL1:
147*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64isar3_el1;
148*f396aec8SArvind Ram Prakash break;
149*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64MMFR0_EL1:
150*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64mmfr0_el1;
151*f396aec8SArvind Ram Prakash break;
152*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64MMFR1_EL1:
153*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64mmfr1_el1;
154*f396aec8SArvind Ram Prakash break;
155*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64MMFR2_EL1:
156*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64mmfr2_el1;
157*f396aec8SArvind Ram Prakash break;
158*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64MMFR3_EL1:
159*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64mmfr3_el1;
160*f396aec8SArvind Ram Prakash break;
161*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64MMFR4_EL1:
162*f396aec8SArvind Ram Prakash value = perworld_reg->id_aa64mmfr4_el1;
163*f396aec8SArvind Ram Prakash break;
164*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64DFR0_EL1:
165*f396aec8SArvind Ram Prakash value = percpu_reg->id_aa64dfr0_el1;
166*f396aec8SArvind Ram Prakash break;
167*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64DFR1_EL1:
168*f396aec8SArvind Ram Prakash value = percpu_reg->id_aa64dfr1_el1;
169*f396aec8SArvind Ram Prakash break;
170*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64ZFR0_EL1:
171*f396aec8SArvind Ram Prakash value = read_id_aa64zfr0_el1();
172*f396aec8SArvind Ram Prakash break;
173*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64FPFR0_EL1:
174*f396aec8SArvind Ram Prakash value = read_id_aa64fpfr0_el1();
175*f396aec8SArvind Ram Prakash break;
176*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64DFR2_EL1:
177*f396aec8SArvind Ram Prakash value = read_id_aa64dfr2_el1();
178*f396aec8SArvind Ram Prakash break;
179*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64AFR0_EL1:
180*f396aec8SArvind Ram Prakash value = read_id_aa64afr0_el1();
181*f396aec8SArvind Ram Prakash break;
182*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AA64AFR1_EL1:
183*f396aec8SArvind Ram Prakash value = read_id_aa64afr1_el1();
184*f396aec8SArvind Ram Prakash break;
185*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_GMID_EL1:
186*f396aec8SArvind Ram Prakash value = read_gmid_el1();
187*f396aec8SArvind Ram Prakash break;
188*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_PFR0_EL1:
189*f396aec8SArvind Ram Prakash value = read_id_pfr0_el1();
190*f396aec8SArvind Ram Prakash break;
191*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_PFR1_EL1:
192*f396aec8SArvind Ram Prakash value = read_id_pfr1_el1();
193*f396aec8SArvind Ram Prakash break;
194*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_DFR0_EL1:
195*f396aec8SArvind Ram Prakash value = read_id_dfr0_el1();
196*f396aec8SArvind Ram Prakash break;
197*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_AFR0_EL1:
198*f396aec8SArvind Ram Prakash value = read_id_afr0_el1();
199*f396aec8SArvind Ram Prakash break;
200*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_PFR2_EL1:
201*f396aec8SArvind Ram Prakash value = read_id_pfr2_el1();
202*f396aec8SArvind Ram Prakash break;
203*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_DFR1_EL1:
204*f396aec8SArvind Ram Prakash value = read_id_dfr1_el1();
205*f396aec8SArvind Ram Prakash break;
206*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_MMFR0_EL1:
207*f396aec8SArvind Ram Prakash value = read_id_mmfr0_el1();
208*f396aec8SArvind Ram Prakash break;
209*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_MMFR1_EL1:
210*f396aec8SArvind Ram Prakash value = read_id_mmfr1_el1();
211*f396aec8SArvind Ram Prakash break;
212*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_MMFR2_EL1:
213*f396aec8SArvind Ram Prakash value = read_id_mmfr2_el1();
214*f396aec8SArvind Ram Prakash break;
215*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_MMFR3_EL1:
216*f396aec8SArvind Ram Prakash value = read_id_mmfr3_el1();
217*f396aec8SArvind Ram Prakash break;
218*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_MMFR4_EL1:
219*f396aec8SArvind Ram Prakash value = read_id_mmfr4_el1();
220*f396aec8SArvind Ram Prakash break;
221*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_MMFR5_EL1:
222*f396aec8SArvind Ram Prakash value = read_id_mmfr5_el1();
223*f396aec8SArvind Ram Prakash break;
224*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_ISAR0_EL1:
225*f396aec8SArvind Ram Prakash value = read_id_isar0_el1();
226*f396aec8SArvind Ram Prakash break;
227*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_ISAR1_EL1:
228*f396aec8SArvind Ram Prakash value = read_id_isar1_el1();
229*f396aec8SArvind Ram Prakash break;
230*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_ISAR2_EL1:
231*f396aec8SArvind Ram Prakash value = read_id_isar2_el1();
232*f396aec8SArvind Ram Prakash break;
233*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_ISAR3_EL1:
234*f396aec8SArvind Ram Prakash value = read_id_isar3_el1();
235*f396aec8SArvind Ram Prakash break;
236*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_ISAR4_EL1:
237*f396aec8SArvind Ram Prakash value = read_id_isar4_el1();
238*f396aec8SArvind Ram Prakash break;
239*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_ISAR5_EL1:
240*f396aec8SArvind Ram Prakash value = read_id_isar5_el1();
241*f396aec8SArvind Ram Prakash break;
242*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_ID_ISAR6_EL1:
243*f396aec8SArvind Ram Prakash value = read_id_isar6_el1();
244*f396aec8SArvind Ram Prakash break;
245*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_MVFR0_EL1:
246*f396aec8SArvind Ram Prakash value = read_mvfr0_el1();
247*f396aec8SArvind Ram Prakash break;
248*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_MVFR1_EL1:
249*f396aec8SArvind Ram Prakash value = read_mvfr1_el1();
250*f396aec8SArvind Ram Prakash break;
251*f396aec8SArvind Ram Prakash case ESR_EL3_IDREG_MVFR2_EL1:
252*f396aec8SArvind Ram Prakash value = read_mvfr2_el1();
253*f396aec8SArvind Ram Prakash break;
254*f396aec8SArvind Ram Prakash
255*f396aec8SArvind Ram Prakash /*
256*f396aec8SArvind Ram Prakash * Any ID register access that falls within the Group 3
257*f396aec8SArvind Ram Prakash * ID space (op0 == 3, op1 == 0, CRn == 0, CRm == {2-7}, op2 == {0-7})
258*f396aec8SArvind Ram Prakash * but is not explicitly handled here will return 0.
259*f396aec8SArvind Ram Prakash * This covers newly introduced ID registers that were previously
260*f396aec8SArvind Ram Prakash * reserved or unknown.
261*f396aec8SArvind Ram Prakash *
262*f396aec8SArvind Ram Prakash * When new ID registers are added in future revisions of
263*f396aec8SArvind Ram Prakash * the architecture, they must be explicitly handled in this
264*f396aec8SArvind Ram Prakash * switch statement to return their actual value instead of
265*f396aec8SArvind Ram Prakash * Res0.
266*f396aec8SArvind Ram Prakash */
267*f396aec8SArvind Ram Prakash default:
268*f396aec8SArvind Ram Prakash WARN("Unknown ID register: S%u_%u_C%u_C%u_%u is trapped\n",
269*f396aec8SArvind Ram Prakash op0, op1, CRn, CRm, op2);
270*f396aec8SArvind Ram Prakash value = 0UL;
271*f396aec8SArvind Ram Prakash }
272*f396aec8SArvind Ram Prakash
273*f396aec8SArvind Ram Prakash ctx->gpregs_ctx.ctx_regs[rt] = value;
274*f396aec8SArvind Ram Prakash return TRAP_RET_CONTINUE;
275*f396aec8SArvind Ram Prakash }
276*f396aec8SArvind Ram Prakash
idte3_enable(cpu_context_t * context)277*f396aec8SArvind Ram Prakash void idte3_enable(cpu_context_t *context)
278*f396aec8SArvind Ram Prakash {
279*f396aec8SArvind Ram Prakash u_register_t reg;
280*f396aec8SArvind Ram Prakash el3_state_t *state;
281*f396aec8SArvind Ram Prakash
282*f396aec8SArvind Ram Prakash state = get_el3state_ctx(context);
283*f396aec8SArvind Ram Prakash
284*f396aec8SArvind Ram Prakash /*
285*f396aec8SArvind Ram Prakash * Setting the TID3 & TID5 bits enables trapping for
286*f396aec8SArvind Ram Prakash * group 3 ID registers and group 5
287*f396aec8SArvind Ram Prakash * ID register - GMID_EL1.
288*f396aec8SArvind Ram Prakash */
289*f396aec8SArvind Ram Prakash
290*f396aec8SArvind Ram Prakash reg = read_ctx_reg(state, CTX_SCR_EL3);
291*f396aec8SArvind Ram Prakash reg |= (SCR_TID3_BIT | SCR_TID5_BIT);
292*f396aec8SArvind Ram Prakash write_ctx_reg(state, CTX_SCR_EL3, reg);
293*f396aec8SArvind Ram Prakash }
294