SPDX: Convert all of our single license tags to Linux Kernel style
[oweals/u-boot.git] / arch / arm / cpu / armv8 / exceptions.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * (C) Copyright 2013
4  * David Feng <fenghua@phytium.com.cn>
5  */
6
7 #include <asm-offsets.h>
8 #include <config.h>
9 #include <asm/ptrace.h>
10 #include <asm/macro.h>
11 #include <linux/linkage.h>
12
13 /*
14  * Exception vectors.
15  */
16         .align  11
17         .globl  vectors
18 vectors:
19         .align  7               /* Current EL Synchronous Thread */
20         stp     x29, x30, [sp, #-16]!
21         bl      _exception_entry
22         bl      do_bad_sync
23         b       exception_exit
24
25         .align  7               /* Current EL IRQ Thread */
26         stp     x29, x30, [sp, #-16]!
27         bl      _exception_entry
28         bl      do_bad_irq
29         b       exception_exit
30
31         .align  7               /* Current EL FIQ Thread */
32         stp     x29, x30, [sp, #-16]!
33         bl      _exception_entry
34         bl      do_bad_fiq
35         b       exception_exit
36
37         .align  7               /* Current EL Error Thread */
38         stp     x29, x30, [sp, #-16]!
39         bl      _exception_entry
40         bl      do_bad_error
41         b       exception_exit
42
43         .align  7                /* Current EL Synchronous Handler */
44         stp     x29, x30, [sp, #-16]!
45         bl      _exception_entry
46         bl      do_sync
47         b       exception_exit
48
49         .align  7                /* Current EL IRQ Handler */
50         stp     x29, x30, [sp, #-16]!
51         bl      _exception_entry
52         bl      do_irq
53         b       exception_exit
54
55         .align  7                /* Current EL FIQ Handler */
56         stp     x29, x30, [sp, #-16]!
57         bl      _exception_entry
58         bl      do_fiq
59         b       exception_exit
60
61         .align  7                /* Current EL Error Handler */
62         stp     x29, x30, [sp, #-16]!
63         bl      _exception_entry
64         bl      do_error
65         b       exception_exit
66
67 /*
68  * Enter Exception.
69  * This will save the processor state that is ELR/X0~X30
70  * to the stack frame.
71  */
72 _exception_entry:
73         stp     x27, x28, [sp, #-16]!
74         stp     x25, x26, [sp, #-16]!
75         stp     x23, x24, [sp, #-16]!
76         stp     x21, x22, [sp, #-16]!
77         stp     x19, x20, [sp, #-16]!
78         stp     x17, x18, [sp, #-16]!
79         stp     x15, x16, [sp, #-16]!
80         stp     x13, x14, [sp, #-16]!
81         stp     x11, x12, [sp, #-16]!
82         stp     x9, x10, [sp, #-16]!
83         stp     x7, x8, [sp, #-16]!
84         stp     x5, x6, [sp, #-16]!
85         stp     x3, x4, [sp, #-16]!
86         stp     x1, x2, [sp, #-16]!
87
88         /* Could be running at EL3/EL2/EL1 */
89         switch_el x11, 3f, 2f, 1f
90 3:      mrs     x1, esr_el3
91         mrs     x2, elr_el3
92         b       0f
93 2:      mrs     x1, esr_el2
94         mrs     x2, elr_el2
95         b       0f
96 1:      mrs     x1, esr_el1
97         mrs     x2, elr_el1
98 0:
99         stp     x2, x0, [sp, #-16]!
100         mov     x0, sp
101         ret
102
103
104 exception_exit:
105         ldp     x2, x0, [sp],#16
106         switch_el x11, 3f, 2f, 1f
107 3:      msr     elr_el3, x2
108         b       0f
109 2:      msr     elr_el2, x2
110         b       0f
111 1:      msr     elr_el1, x2
112 0:
113         ldp     x1, x2, [sp],#16
114         ldp     x3, x4, [sp],#16
115         ldp     x5, x6, [sp],#16
116         ldp     x7, x8, [sp],#16
117         ldp     x9, x10, [sp],#16
118         ldp     x11, x12, [sp],#16
119         ldp     x13, x14, [sp],#16
120         ldp     x15, x16, [sp],#16
121         ldp     x17, x18, [sp],#16
122         ldp     x19, x20, [sp],#16
123         ldp     x21, x22, [sp],#16
124         ldp     x23, x24, [sp],#16
125         ldp     x25, x26, [sp],#16
126         ldp     x27, x28, [sp],#16
127         ldp     x29, x30, [sp],#16
128         eret