]> git.sur5r.net Git - u-boot/blob - arch/arm/cpu/armv8/transition.S
7aa6935318c6a95e8cf9cee28467af432c2fb6e6
[u-boot] / arch / arm / cpu / armv8 / transition.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 <linux/linkage.h>
11 #include <asm/macro.h>
12
13 .pushsection .text.armv8_switch_to_el2, "ax"
14 ENTRY(armv8_switch_to_el2)
15         switch_el x6, 1f, 0f, 0f
16 0:
17         cmp x5, #ES_TO_AARCH64
18         b.eq 2f
19         /*
20          * When loading 32-bit kernel, it will jump
21          * to secure firmware again, and never return.
22          */
23         bl armv8_el2_to_aarch32
24 2:
25         /*
26          * x4 is kernel entry point or switch_to_el1
27          * if CONFIG_ARMV8_SWITCH_TO_EL1 is defined.
28          * When running in EL2 now, jump to the
29          * address saved in x4.
30          */
31         br x4
32 1:      armv8_switch_to_el2_m x4, x5, x6
33 ENDPROC(armv8_switch_to_el2)
34 .popsection
35
36 .pushsection .text.armv8_switch_to_el1, "ax"
37 ENTRY(armv8_switch_to_el1)
38         switch_el x6, 0f, 1f, 0f
39 0:
40         /* x4 is kernel entry point. When running in EL1
41          * now, jump to the address saved in x4.
42          */
43         br x4
44 1:      armv8_switch_to_el1_m x4, x5, x6
45 ENDPROC(armv8_switch_to_el1)
46 .popsection
47
48 .pushsection .text.armv8_el2_to_aarch32, "ax"
49 WEAK(armv8_el2_to_aarch32)
50         ret
51 ENDPROC(armv8_el2_to_aarch32)
52 .popsection