]> git.ipfire.org Git - people/ms/u-boot.git/blob - arch/arm/cpu/armv8/exceptions.S
Merge branch 'master' of git://git.denx.de/u-boot-arm
[people/ms/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 <version.h>
11 #include <asm/ptrace.h>
12 #include <asm/macro.h>
13 #include <linux/linkage.h>
14
15 /*
16 * Enter Exception.
17 * This will save the processor state that is ELR/X0~X30
18 * to the stack frame.
19 */
20 .macro exception_entry
21 stp x29, x30, [sp, #-16]!
22 stp x27, x28, [sp, #-16]!
23 stp x25, x26, [sp, #-16]!
24 stp x23, x24, [sp, #-16]!
25 stp x21, x22, [sp, #-16]!
26 stp x19, x20, [sp, #-16]!
27 stp x17, x18, [sp, #-16]!
28 stp x15, x16, [sp, #-16]!
29 stp x13, x14, [sp, #-16]!
30 stp x11, x12, [sp, #-16]!
31 stp x9, x10, [sp, #-16]!
32 stp x7, x8, [sp, #-16]!
33 stp x5, x6, [sp, #-16]!
34 stp x3, x4, [sp, #-16]!
35 stp x1, x2, [sp, #-16]!
36
37 /* Could be running at EL3/EL2/EL1 */
38 switch_el x11, 3f, 2f, 1f
39 3: mrs x1, esr_el3
40 mrs x2, elr_el3
41 b 0f
42 2: mrs x1, esr_el2
43 mrs x2, elr_el2
44 b 0f
45 1: mrs x1, esr_el1
46 mrs x2, elr_el1
47 0:
48 stp x2, x0, [sp, #-16]!
49 mov x0, sp
50 .endm
51
52 /*
53 * Exception vectors.
54 */
55 .align 11
56 .globl vectors
57 vectors:
58 .align 7
59 b _do_bad_sync /* Current EL Synchronous Thread */
60
61 .align 7
62 b _do_bad_irq /* Current EL IRQ Thread */
63
64 .align 7
65 b _do_bad_fiq /* Current EL FIQ Thread */
66
67 .align 7
68 b _do_bad_error /* Current EL Error Thread */
69
70 .align 7
71 b _do_sync /* Current EL Synchronous Handler */
72
73 .align 7
74 b _do_irq /* Current EL IRQ Handler */
75
76 .align 7
77 b _do_fiq /* Current EL FIQ Handler */
78
79 .align 7
80 b _do_error /* Current EL Error Handler */
81
82
83 _do_bad_sync:
84 exception_entry
85 bl do_bad_sync
86
87 _do_bad_irq:
88 exception_entry
89 bl do_bad_irq
90
91 _do_bad_fiq:
92 exception_entry
93 bl do_bad_fiq
94
95 _do_bad_error:
96 exception_entry
97 bl do_bad_error
98
99 _do_sync:
100 exception_entry
101 bl do_sync
102
103 _do_irq:
104 exception_entry
105 bl do_irq
106
107 _do_fiq:
108 exception_entry
109 bl do_fiq
110
111 _do_error:
112 exception_entry
113 bl do_error