First version
[3rdparty/ote_partner/tlk.git] / lib / monitor / arm64 / include / arm64 / asm.h
1 /*
2  * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining
5  * a copy of this software and associated documentation files
6  * (the "Software"), to deal in the Software without restriction,
7  * including without limitation the rights to use, copy, modify, merge,
8  * publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23 #ifndef __ARCH_ARM64_ASM_H
24 #define __ARCH_ARM64_ASM_H
25
26 #define MODE_EL(x)      ((x) << 2)
27
28 /* interrupts masked, start in AARCH32 SVC mode */
29 #define MON_INIT_EL1_SPSR_AARCH32       ((0x7 << 6) | MODE_SVC)
30
31 /* interrupts masked, return to BL in AARCH64 EL2 mode */
32 #define MON_INIT_EL2_SPSR_AARCH64       ((0x7 << 6) | MODE_EL(2))
33
34 /* monitor SCR is AARCH64, NS=0 and RES1 fields */
35 #define MON_INIT_EL3_SCR        ((0x1 << 10) | 0x3 << 4)
36
37 /* ARM GIC cpu/dist offsets */
38 #define ARM_GIC_GICC_CTLR               0x0
39 #define ARM_GIC_GICC_PMR                0x4
40 #define ARM_GIC_GICD_IGROUPR0           0x80
41
42 /* get CPU index (0 through 3) */
43 .macro cpuidx, tmp
44         mrs     \tmp, mpidr_el1
45         and     \tmp, \tmp, #0xF
46 .endm
47
48 /* enter secure EL1 in 32bit mode */
49 .macro mon_scr_secure_32, tmp
50         mrs     \tmp, scr_el3
51         bic     \tmp, \tmp, #(0x1 << 10)        // clear RW
52         bic     \tmp, \tmp, #(0x1 << 0)         // clear NS
53         msr     scr_el3, \tmp
54         isb
55 .endm
56
57 .macro mon_scr_non_secure_64, tmp
58         mrs     \tmp, scr_el3
59         orr     \tmp, \tmp, #(0x1 << 10)        // set RW
60         orr     \tmp, \tmp, #(0x1 << 0)         // set NS
61         msr     scr_el3, \tmp
62         isb
63 .endm
64
65 /*
66  * Register aliases.
67  */
68 lr      .req    x30             // link register
69
70 #endif