add el1 transfer at the boot stage in case higher EL is implemented
[lunaix-os.git] / lunaix-os / arch / aarch64 / includes / asm / aa64_msrs.h
1 #ifndef __LUNAIX_AA64_MSRS_H
2 #define __LUNAIX_AA64_MSRS_H
3
4 #include "aa64_asm.h"
5
6 #define SCTLR_EL1       __sr_encode(3, 0,  1,  0, 0)
7 #define TCR_EL1         __sr_encode(3, 0,  2,  0, 2)
8 #define TTBR0_EL1       __sr_encode(3, 0,  2,  0, 0)
9 #define TTBR1_EL1       __sr_encode(3, 0,  2,  0, 1)
10 #define VBAR_EL1        __sr_encode(3, 0, 12,  0, 1)
11 #define CurrentEL       __sr_encode(3, 0,  4,  2, 2)
12 #define ELR_E1          __sr_encode(3, 0,  4,  0, 1)
13 #define SPSel           __sr_encode(3, 0,  4,  2, 0)
14
15 #define SPSR_EL1        __sr_encode(3, 0,  4,  0, 0)
16 #define SPSR_EL2        __sr_encode(3, 4,  4,  0, 0)
17 #define SPSR_EL3        __sr_encode(3, 6,  4,  0, 0)
18
19 #define DAIF_EL1        __sr_encode(3, 3,  4,  2, 1)
20 #define ALLINT_EL1      __sr_encode(3, 0,  4,  3, 0)
21 #define SP_EL0          __sr_encode(3, 0,  4,  1, 0)
22 #define SP_EL1          __sr_encode(3, 4,  4,  1, 0)
23
24 #define ID_AA64PFR0_EL1          __sr_encode(3, 0,  0,  4, 0)
25
26 #ifndef __ASM__
27 #define read_sysreg(reg)                                    \
28         ({  unsigned long _x;                               \
29             asm ("mrs %0, " stringify(reg):"=r"(_x));       \
30             _x;                                             \
31         })
32
33 #define set_sysreg(reg, v)                                  \
34         ({  unsigned long _x = v;                           \
35             asm ("msr " stringify(reg) ", %0"::"r"(_x));    \
36             _x;                                             \
37         })
38
39 #define SCTRL_SPINTMASK     (1UL << 62)
40 #define SCTRL_NMI           (1UL << 61)
41 #define SCTRL_EE            (1UL << 25)
42 #define SCTRL_E0E           (1UL << 24)
43 #define SCTRL_WXN           (1UL << 19)
44 #define SCTRL_nAA           (1UL << 6)
45 #define SCTRL_SA0           (1UL << 4)
46 #define SCTRL_SA            (1UL << 3)
47 #define SCTRL_A             (1UL << 1)
48 #define SCTRL_M             (1UL << 0)
49
50 #define sysreg_flagging(reg, set, unset)                    \
51         ({                                                  \
52             unsigned long _x;                               \
53             _x = read_sysreg(reg);                          \
54             _x = (_x & ~(unset)) | (set);                   \
55             set_sysreg(reg, _x);                            \
56             _x;                                             \
57         })
58
59 #endif
60 #endif /* __LUNAIX_AA64_MSRS_H */