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