blob: 8e816f036b5a3ffdbe1504db03bb6f50c221eb7e [file] [log] [blame]
Achin Gupta4f6ad662013-10-25 09:08:21 +01001/*
Dan Handleye83b0ca2014-01-14 18:17:09 +00002 * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
Achin Gupta4f6ad662013-10-25 09:08:21 +01003 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * Redistributions of source code must retain the above copyright notice, this
8 * list of conditions and the following disclaimer.
9 *
10 * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 *
14 * Neither the name of ARM nor the names of its contributors may be used
15 * to endorse or promote products derived from this software without specific
16 * prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#include <arch_helpers.h>
Andrew Thoelke38bde412014-03-18 13:46:55 +000032#include <asm_macros.S>
Achin Gupta4f6ad662013-10-25 09:08:21 +010033
Achin Gupta4f6ad662013-10-25 09:08:21 +010034 .globl read_vbar_el1
35 .globl read_vbar_el2
36 .globl read_vbar_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +010037 .globl write_vbar_el1
38 .globl write_vbar_el2
39 .globl write_vbar_el3
40
Achin Gupta4f6ad662013-10-25 09:08:21 +010041 .globl read_sctlr_el1
42 .globl read_sctlr_el2
43 .globl read_sctlr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +010044 .globl write_sctlr_el1
45 .globl write_sctlr_el2
46 .globl write_sctlr_el3
47
Achin Gupta4f6ad662013-10-25 09:08:21 +010048 .globl read_actlr_el1
49 .globl read_actlr_el2
50 .globl read_actlr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +010051 .globl write_actlr_el1
52 .globl write_actlr_el2
53 .globl write_actlr_el3
54
Achin Gupta4f6ad662013-10-25 09:08:21 +010055 .globl read_esr_el1
56 .globl read_esr_el2
57 .globl read_esr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +010058 .globl write_esr_el1
59 .globl write_esr_el2
60 .globl write_esr_el3
61
Achin Gupta4f6ad662013-10-25 09:08:21 +010062 .globl read_afsr0_el1
63 .globl read_afsr0_el2
64 .globl read_afsr0_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +010065 .globl write_afsr0_el1
66 .globl write_afsr0_el2
67 .globl write_afsr0_el3
68
Achin Gupta4f6ad662013-10-25 09:08:21 +010069 .globl read_afsr1_el1
70 .globl read_afsr1_el2
71 .globl read_afsr1_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +010072 .globl write_afsr1_el1
73 .globl write_afsr1_el2
74 .globl write_afsr1_el3
75
Achin Gupta4f6ad662013-10-25 09:08:21 +010076 .globl read_far_el1
77 .globl read_far_el2
78 .globl read_far_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +010079 .globl write_far_el1
80 .globl write_far_el2
81 .globl write_far_el3
82
Achin Gupta4f6ad662013-10-25 09:08:21 +010083 .globl read_mair_el1
84 .globl read_mair_el2
85 .globl read_mair_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +010086 .globl write_mair_el1
87 .globl write_mair_el2
88 .globl write_mair_el3
89
Achin Gupta4f6ad662013-10-25 09:08:21 +010090 .globl read_amair_el1
91 .globl read_amair_el2
92 .globl read_amair_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +010093 .globl write_amair_el1
94 .globl write_amair_el2
95 .globl write_amair_el3
96
Achin Gupta4f6ad662013-10-25 09:08:21 +010097 .globl read_rvbar_el1
98 .globl read_rvbar_el2
99 .globl read_rvbar_el3
100
Achin Gupta4f6ad662013-10-25 09:08:21 +0100101 .globl read_rmr_el1
102 .globl read_rmr_el2
103 .globl read_rmr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100104 .globl write_rmr_el1
105 .globl write_rmr_el2
106 .globl write_rmr_el3
107
Achin Gupta4f6ad662013-10-25 09:08:21 +0100108 .globl read_tcr_el1
109 .globl read_tcr_el2
110 .globl read_tcr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100111 .globl write_tcr_el1
112 .globl write_tcr_el2
113 .globl write_tcr_el3
114
Achin Gupta4f6ad662013-10-25 09:08:21 +0100115 .globl read_cptr_el2
116 .globl read_cptr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100117 .globl write_cptr_el2
118 .globl write_cptr_el3
119
Achin Gupta4f6ad662013-10-25 09:08:21 +0100120 .globl read_ttbr0_el1
121 .globl read_ttbr0_el2
122 .globl read_ttbr0_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100123 .globl write_ttbr0_el1
124 .globl write_ttbr0_el2
125 .globl write_ttbr0_el3
126
Achin Gupta4f6ad662013-10-25 09:08:21 +0100127 .globl read_ttbr1_el1
128 .globl read_ttbr1_el2
129 .globl write_ttbr1
130 .globl write_ttbr1_el1
131 .globl write_ttbr1_el2
132
133 .globl read_cpacr
134 .globl write_cpacr
135
136 .globl read_cntfrq
137 .globl write_cntfrq
138
139 .globl read_cpuectlr
140 .globl write_cpuectlr
141
142 .globl read_cnthctl_el2
143 .globl write_cnthctl_el2
144
145 .globl read_cntfrq_el0
146 .globl write_cntfrq_el0
147
148 .globl read_scr
149 .globl write_scr
150
151 .globl read_hcr
152 .globl write_hcr
153
154 .globl read_midr
155 .globl read_mpidr
156
157 .globl read_current_el
158 .globl read_id_pfr1_el1
159 .globl read_id_aa64pfr0_el1
160
161#if SUPPORT_VFP
162 .globl enable_vfp
163 .globl read_fpexc
164 .globl write_fpexc
165#endif
166
167
Andrew Thoelke38bde412014-03-18 13:46:55 +0000168func read_current_el
Achin Gupta4f6ad662013-10-25 09:08:21 +0100169 mrs x0, CurrentEl
170 ret
171
172
Andrew Thoelke38bde412014-03-18 13:46:55 +0000173func read_id_pfr1_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100174 mrs x0, id_pfr1_el1
175 ret
176
177
Andrew Thoelke38bde412014-03-18 13:46:55 +0000178func read_id_aa64pfr0_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100179 mrs x0, id_aa64pfr0_el1
180 ret
181
182
183 /* -----------------------------------------------------
184 * VBAR accessors
185 * -----------------------------------------------------
186 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000187func read_vbar_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100188 mrs x0, vbar_el1
189 ret
190
191
Andrew Thoelke38bde412014-03-18 13:46:55 +0000192func read_vbar_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100193 mrs x0, vbar_el2
194 ret
195
196
Andrew Thoelke38bde412014-03-18 13:46:55 +0000197func read_vbar_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100198 mrs x0, vbar_el3
199 ret
200
201
Andrew Thoelke38bde412014-03-18 13:46:55 +0000202func write_vbar_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100203 msr vbar_el1, x0
204 isb
205 ret
206
207
Andrew Thoelke38bde412014-03-18 13:46:55 +0000208func write_vbar_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100209 msr vbar_el2, x0
210 isb
211 ret
212
213
Andrew Thoelke38bde412014-03-18 13:46:55 +0000214func write_vbar_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100215 msr vbar_el3, x0
216 isb
217 ret
218
219
220 /* -----------------------------------------------------
221 * AFSR0 accessors
222 * -----------------------------------------------------
223 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000224func read_afsr0_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100225 mrs x0, afsr0_el1
226 ret
227
228
Andrew Thoelke38bde412014-03-18 13:46:55 +0000229func read_afsr0_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100230 mrs x0, afsr0_el2
231 ret
232
233
Andrew Thoelke38bde412014-03-18 13:46:55 +0000234func read_afsr0_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100235 mrs x0, afsr0_el3
236 ret
237
238
Andrew Thoelke38bde412014-03-18 13:46:55 +0000239func write_afsr0_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100240 msr afsr0_el1, x0
241 isb
242 ret
243
244
Andrew Thoelke38bde412014-03-18 13:46:55 +0000245func write_afsr0_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100246 msr afsr0_el2, x0
247 isb
248 ret
249
250
Andrew Thoelke38bde412014-03-18 13:46:55 +0000251func write_afsr0_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100252 msr afsr0_el3, x0
253 isb
254 ret
255
256
257 /* -----------------------------------------------------
258 * FAR accessors
259 * -----------------------------------------------------
260 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000261func read_far_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100262 mrs x0, far_el1
263 ret
264
265
Andrew Thoelke38bde412014-03-18 13:46:55 +0000266func read_far_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100267 mrs x0, far_el2
268 ret
269
270
Andrew Thoelke38bde412014-03-18 13:46:55 +0000271func read_far_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100272 mrs x0, far_el3
273 ret
274
275
Andrew Thoelke38bde412014-03-18 13:46:55 +0000276func write_far_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100277 msr far_el1, x0
278 isb
279 ret
280
281
Andrew Thoelke38bde412014-03-18 13:46:55 +0000282func write_far_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100283 msr far_el2, x0
284 isb
285 ret
286
287
Andrew Thoelke38bde412014-03-18 13:46:55 +0000288func write_far_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100289 msr far_el3, x0
290 isb
291 ret
292
293
294 /* -----------------------------------------------------
295 * MAIR accessors
296 * -----------------------------------------------------
297 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000298func read_mair_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100299 mrs x0, mair_el1
300 ret
301
302
Andrew Thoelke38bde412014-03-18 13:46:55 +0000303func read_mair_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100304 mrs x0, mair_el2
305 ret
306
307
Andrew Thoelke38bde412014-03-18 13:46:55 +0000308func read_mair_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100309 mrs x0, mair_el3
310 ret
311
312
Andrew Thoelke38bde412014-03-18 13:46:55 +0000313func write_mair_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100314 msr mair_el1, x0
315 isb
316 ret
317
318
Andrew Thoelke38bde412014-03-18 13:46:55 +0000319func write_mair_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100320 msr mair_el2, x0
321 isb
322 ret
323
324
Andrew Thoelke38bde412014-03-18 13:46:55 +0000325func write_mair_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100326 msr mair_el3, x0
327 isb
328 ret
329
330
331 /* -----------------------------------------------------
332 * AMAIR accessors
333 * -----------------------------------------------------
334 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000335func read_amair_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100336 mrs x0, amair_el1
337 ret
338
339
Andrew Thoelke38bde412014-03-18 13:46:55 +0000340func read_amair_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100341 mrs x0, amair_el2
342 ret
343
344
Andrew Thoelke38bde412014-03-18 13:46:55 +0000345func read_amair_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100346 mrs x0, amair_el3
347 ret
348
349
Andrew Thoelke38bde412014-03-18 13:46:55 +0000350func write_amair_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100351 msr amair_el1, x0
352 isb
353 ret
354
355
Andrew Thoelke38bde412014-03-18 13:46:55 +0000356func write_amair_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100357 msr amair_el2, x0
358 isb
359 ret
360
361
Andrew Thoelke38bde412014-03-18 13:46:55 +0000362func write_amair_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100363 msr amair_el3, x0
364 isb
365 ret
366
367
368 /* -----------------------------------------------------
369 * RVBAR accessors
370 * -----------------------------------------------------
371 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000372func read_rvbar_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100373 mrs x0, rvbar_el1
374 ret
375
376
Andrew Thoelke38bde412014-03-18 13:46:55 +0000377func read_rvbar_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100378 mrs x0, rvbar_el2
379 ret
380
381
Andrew Thoelke38bde412014-03-18 13:46:55 +0000382func read_rvbar_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100383 mrs x0, rvbar_el3
384 ret
385
386
387 /* -----------------------------------------------------
388 * RMR accessors
389 * -----------------------------------------------------
390 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000391func read_rmr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100392 mrs x0, rmr_el1
393 ret
394
395
Andrew Thoelke38bde412014-03-18 13:46:55 +0000396func read_rmr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100397 mrs x0, rmr_el2
398 ret
399
400
Andrew Thoelke38bde412014-03-18 13:46:55 +0000401func read_rmr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100402 mrs x0, rmr_el3
403 ret
404
405
Andrew Thoelke38bde412014-03-18 13:46:55 +0000406func write_rmr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100407 msr rmr_el1, x0
408 isb
409 ret
410
411
Andrew Thoelke38bde412014-03-18 13:46:55 +0000412func write_rmr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100413 msr rmr_el2, x0
414 isb
415 ret
416
417
Andrew Thoelke38bde412014-03-18 13:46:55 +0000418func write_rmr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100419 msr rmr_el3, x0
420 isb
421 ret
422
423
Achin Gupta4f6ad662013-10-25 09:08:21 +0100424 /* -----------------------------------------------------
425 * AFSR1 accessors
426 * -----------------------------------------------------
427 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000428func read_afsr1_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100429 mrs x0, afsr1_el1
430 ret
431
432
Andrew Thoelke38bde412014-03-18 13:46:55 +0000433func read_afsr1_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100434 mrs x0, afsr1_el2
435 ret
436
437
Andrew Thoelke38bde412014-03-18 13:46:55 +0000438func read_afsr1_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100439 mrs x0, afsr1_el3
440 ret
441
442
Andrew Thoelke38bde412014-03-18 13:46:55 +0000443func write_afsr1_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100444 msr afsr1_el1, x0
445 isb
446 ret
447
448
Andrew Thoelke38bde412014-03-18 13:46:55 +0000449func write_afsr1_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100450 msr afsr1_el2, x0
451 isb
452 ret
453
454
Andrew Thoelke38bde412014-03-18 13:46:55 +0000455func write_afsr1_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100456 msr afsr1_el3, x0
457 isb
458 ret
459
460
461 /* -----------------------------------------------------
462 * SCTLR accessors
463 * -----------------------------------------------------
464 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000465func read_sctlr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100466 mrs x0, sctlr_el1
467 ret
468
469
Andrew Thoelke38bde412014-03-18 13:46:55 +0000470func read_sctlr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100471 mrs x0, sctlr_el2
472 ret
473
474
Andrew Thoelke38bde412014-03-18 13:46:55 +0000475func read_sctlr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100476 mrs x0, sctlr_el3
477 ret
478
479
Andrew Thoelke38bde412014-03-18 13:46:55 +0000480func write_sctlr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100481 msr sctlr_el1, x0
482 dsb sy
483 isb
484 ret
485
486
Andrew Thoelke38bde412014-03-18 13:46:55 +0000487func write_sctlr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100488 msr sctlr_el2, x0
489 dsb sy
490 isb
491 ret
492
493
Andrew Thoelke38bde412014-03-18 13:46:55 +0000494func write_sctlr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100495 msr sctlr_el3, x0
496 dsb sy
497 isb
498 ret
499
500
501 /* -----------------------------------------------------
502 * ACTLR accessors
503 * -----------------------------------------------------
504 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000505func read_actlr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100506 mrs x0, actlr_el1
507 ret
508
509
Andrew Thoelke38bde412014-03-18 13:46:55 +0000510func read_actlr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100511 mrs x0, actlr_el2
512 ret
513
514
Andrew Thoelke38bde412014-03-18 13:46:55 +0000515func read_actlr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100516 mrs x0, actlr_el3
517 ret
518
519
Andrew Thoelke38bde412014-03-18 13:46:55 +0000520func write_actlr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100521 msr actlr_el1, x0
522 dsb sy
523 isb
524 ret
525
526
Andrew Thoelke38bde412014-03-18 13:46:55 +0000527func write_actlr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100528 msr actlr_el2, x0
529 dsb sy
530 isb
531 ret
532
533
Andrew Thoelke38bde412014-03-18 13:46:55 +0000534func write_actlr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100535 msr actlr_el3, x0
536 dsb sy
537 isb
538 ret
539
540
541 /* -----------------------------------------------------
542 * ESR accessors
543 * -----------------------------------------------------
544 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000545func read_esr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100546 mrs x0, esr_el1
547 ret
548
549
Andrew Thoelke38bde412014-03-18 13:46:55 +0000550func read_esr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100551 mrs x0, esr_el2
552 ret
553
554
Andrew Thoelke38bde412014-03-18 13:46:55 +0000555func read_esr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100556 mrs x0, esr_el3
557 ret
558
559
Andrew Thoelke38bde412014-03-18 13:46:55 +0000560func write_esr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100561 msr esr_el1, x0
562 dsb sy
563 isb
564 ret
565
566
Andrew Thoelke38bde412014-03-18 13:46:55 +0000567func write_esr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100568 msr esr_el2, x0
569 dsb sy
570 isb
571 ret
572
573
Andrew Thoelke38bde412014-03-18 13:46:55 +0000574func write_esr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100575 msr esr_el3, x0
576 dsb sy
577 isb
578 ret
579
580
581 /* -----------------------------------------------------
582 * TCR accessors
583 * -----------------------------------------------------
584 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000585func read_tcr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100586 mrs x0, tcr_el1
587 ret
588
589
Andrew Thoelke38bde412014-03-18 13:46:55 +0000590func read_tcr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100591 mrs x0, tcr_el2
592 ret
593
594
Andrew Thoelke38bde412014-03-18 13:46:55 +0000595func read_tcr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100596 mrs x0, tcr_el3
597 ret
598
Achin Gupta4f6ad662013-10-25 09:08:21 +0100599
Andrew Thoelke38bde412014-03-18 13:46:55 +0000600func write_tcr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100601 msr tcr_el1, x0
602 dsb sy
603 isb
604 ret
605
606
Andrew Thoelke38bde412014-03-18 13:46:55 +0000607func write_tcr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100608 msr tcr_el2, x0
609 dsb sy
610 isb
611 ret
612
613
Andrew Thoelke38bde412014-03-18 13:46:55 +0000614func write_tcr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100615 msr tcr_el3, x0
616 dsb sy
617 isb
618 ret
619
620
621 /* -----------------------------------------------------
622 * CPTR accessors
623 * -----------------------------------------------------
624 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000625func read_cptr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100626 b read_cptr_el1
627 ret
628
629
Andrew Thoelke38bde412014-03-18 13:46:55 +0000630func read_cptr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100631 mrs x0, cptr_el2
632 ret
633
634
Andrew Thoelke38bde412014-03-18 13:46:55 +0000635func read_cptr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100636 mrs x0, cptr_el3
637 ret
638
Achin Gupta4f6ad662013-10-25 09:08:21 +0100639
Andrew Thoelke38bde412014-03-18 13:46:55 +0000640func write_cptr_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100641 b write_cptr_el1
642
643
Andrew Thoelke38bde412014-03-18 13:46:55 +0000644func write_cptr_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100645 msr cptr_el2, x0
646 dsb sy
647 isb
648 ret
649
650
Andrew Thoelke38bde412014-03-18 13:46:55 +0000651func write_cptr_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100652 msr cptr_el3, x0
653 dsb sy
654 isb
655 ret
656
657
658 /* -----------------------------------------------------
659 * TTBR0 accessors
660 * -----------------------------------------------------
661 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000662func read_ttbr0_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100663 mrs x0, ttbr0_el1
664 ret
665
666
Andrew Thoelke38bde412014-03-18 13:46:55 +0000667func read_ttbr0_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100668 mrs x0, ttbr0_el2
669 ret
670
671
Andrew Thoelke38bde412014-03-18 13:46:55 +0000672func read_ttbr0_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100673 mrs x0, ttbr0_el3
674 ret
675
676
Andrew Thoelke38bde412014-03-18 13:46:55 +0000677func write_ttbr0_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100678 msr ttbr0_el1, x0
679 isb
680 ret
681
682
Andrew Thoelke38bde412014-03-18 13:46:55 +0000683func write_ttbr0_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100684 msr ttbr0_el2, x0
685 isb
686 ret
687
688
Andrew Thoelke38bde412014-03-18 13:46:55 +0000689func write_ttbr0_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100690 msr ttbr0_el3, x0
691 isb
692 ret
693
694
695 /* -----------------------------------------------------
696 * TTBR1 accessors
697 * -----------------------------------------------------
698 */
Andrew Thoelke38bde412014-03-18 13:46:55 +0000699func read_ttbr1_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100700 mrs x0, ttbr1_el1
701 ret
702
703
Andrew Thoelke38bde412014-03-18 13:46:55 +0000704func read_ttbr1_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100705 b read_ttbr1_el2
706
707
Andrew Thoelke38bde412014-03-18 13:46:55 +0000708func read_ttbr1_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100709 b read_ttbr1_el3
710
711
Andrew Thoelke38bde412014-03-18 13:46:55 +0000712func write_ttbr1_el1
Achin Gupta4f6ad662013-10-25 09:08:21 +0100713 msr ttbr1_el1, x0
714 isb
715 ret
716
717
Andrew Thoelke38bde412014-03-18 13:46:55 +0000718func write_ttbr1_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100719 b write_ttbr1_el2
720
721
Andrew Thoelke38bde412014-03-18 13:46:55 +0000722func write_ttbr1_el3
Achin Gupta4f6ad662013-10-25 09:08:21 +0100723 b write_ttbr1_el3
724
725
Andrew Thoelke38bde412014-03-18 13:46:55 +0000726func read_hcr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100727 mrs x0, hcr_el2
728 ret
729
730
Andrew Thoelke38bde412014-03-18 13:46:55 +0000731func write_hcr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100732 msr hcr_el2, x0
733 dsb sy
734 isb
735 ret
736
737
Andrew Thoelke38bde412014-03-18 13:46:55 +0000738func read_cpacr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100739 mrs x0, cpacr_el1
740 ret
741
742
Andrew Thoelke38bde412014-03-18 13:46:55 +0000743func write_cpacr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100744 msr cpacr_el1, x0
745 ret
746
747
Andrew Thoelke38bde412014-03-18 13:46:55 +0000748func read_cntfrq_el0
Achin Gupta4f6ad662013-10-25 09:08:21 +0100749 mrs x0, cntfrq_el0
750 ret
751
752
Andrew Thoelke38bde412014-03-18 13:46:55 +0000753func write_cntfrq_el0
Achin Gupta4f6ad662013-10-25 09:08:21 +0100754 msr cntfrq_el0, x0
755 ret
756
757
Andrew Thoelke38bde412014-03-18 13:46:55 +0000758func read_cpuectlr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100759 mrs x0, CPUECTLR_EL1
760 ret
761
762
Andrew Thoelke38bde412014-03-18 13:46:55 +0000763func write_cpuectlr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100764 msr CPUECTLR_EL1, x0
765 dsb sy
766 isb
767 ret
768
769
Andrew Thoelke38bde412014-03-18 13:46:55 +0000770func read_cnthctl_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100771 mrs x0, cnthctl_el2
772 ret
773
774
Andrew Thoelke38bde412014-03-18 13:46:55 +0000775func write_cnthctl_el2
Achin Gupta4f6ad662013-10-25 09:08:21 +0100776 msr cnthctl_el2, x0
777 ret
778
779
Andrew Thoelke38bde412014-03-18 13:46:55 +0000780func read_cntfrq
Achin Gupta4f6ad662013-10-25 09:08:21 +0100781 mrs x0, cntfrq_el0
782 ret
783
784
Andrew Thoelke38bde412014-03-18 13:46:55 +0000785func write_cntfrq
Achin Gupta4f6ad662013-10-25 09:08:21 +0100786 msr cntfrq_el0, x0
787 ret
788
789
Andrew Thoelke38bde412014-03-18 13:46:55 +0000790func write_scr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100791 msr scr_el3, x0
792 dsb sy
793 isb
794 ret
795
796
Andrew Thoelke38bde412014-03-18 13:46:55 +0000797func read_scr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100798 mrs x0, scr_el3
799 ret
800
801
Andrew Thoelke38bde412014-03-18 13:46:55 +0000802func read_midr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100803 mrs x0, midr_el1
804 ret
805
806
Andrew Thoelke38bde412014-03-18 13:46:55 +0000807func read_mpidr
Achin Gupta4f6ad662013-10-25 09:08:21 +0100808 mrs x0, mpidr_el1
809 ret
810
811
812#if SUPPORT_VFP
Andrew Thoelke38bde412014-03-18 13:46:55 +0000813func enable_vfp
Achin Gupta4f6ad662013-10-25 09:08:21 +0100814 mrs x0, cpacr_el1
815 orr x0, x0, #CPACR_VFP_BITS
816 msr cpacr_el1, x0
817 mrs x0, cptr_el3
818 mov x1, #AARCH64_CPTR_TFP
819 bic x0, x0, x1
820 msr cptr_el3, x0
821 ret
822
823
Andrew Thoelke38bde412014-03-18 13:46:55 +0000824func read_fpexc
Achin Gupta4f6ad662013-10-25 09:08:21 +0100825 b read_fpexc
826 ret
827
828
Andrew Thoelke38bde412014-03-18 13:46:55 +0000829func write_fpexc
Achin Gupta4f6ad662013-10-25 09:08:21 +0100830 b write_fpexc
831 ret
832
833#endif