Merge tag 'fsl-qoriq-for-v2019.01-rc2' of git://git.denx.de/u-boot-fsl-qoriq
[oweals/u-boot.git] / arch / arm / cpu / armv8 / sec_firmware_asm.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright 2016 NXP Semiconductor, Inc.
4  */
5
6 #include <config.h>
7 #include <linux/linkage.h>
8 #include <asm/system.h>
9 #include <asm/macro.h>
10
11 WEAK(_sec_firmware_entry)
12         /*
13          * x0: Secure Firmware entry point
14          * x1: Exception return address Low
15          * x2: Exception return address High
16          */
17
18         /* Save stack pointer for EL2 */
19         mov     x3, sp
20         msr     sp_el2, x3
21
22         /* Set exception return address hold pointer */
23         adr     x4, 1f
24         mov     x3, x4
25 #ifdef CONFIG_ARMV8_SEC_FIRMWARE_ERET_ADDR_REVERT
26         rev     w3, w3
27 #endif
28         str     w3, [x1]
29         lsr     x3, x4, #32
30 #ifdef CONFIG_ARMV8_SEC_FIRMWARE_ERET_ADDR_REVERT
31         rev     w3, w3
32 #endif
33         str     w3, [x2]
34
35         /* Call SEC monitor */
36         br      x0
37
38 1:
39         mov     x0, #0
40         ret
41 ENDPROC(_sec_firmware_entry)
42
43 #ifdef CONFIG_SEC_FIRMWARE_ARMV8_PSCI
44 ENTRY(_sec_firmware_support_psci_version)
45         mov     x0, 0x84000000
46         mov     x1, 0x0
47         mov     x2, 0x0
48         mov     x3, 0x0
49         smc     #0
50         ret
51 ENDPROC(_sec_firmware_support_psci_version)
52
53 /*
54  * Switch from AArch64 EL2 to AArch32 EL2
55  * @param inputs:
56  * x0: argument, zero
57  * x1: machine nr
58  * x2: fdt address
59  * x3: input argument
60  * x4: kernel entry point
61  * @param outputs for secure firmware:
62  * x0: function id
63  * x1: kernel entry point
64  * x2: machine nr
65  * x3: fdt address
66 */
67 ENTRY(armv8_el2_to_aarch32)
68         mov     x3, x2
69         mov     x2, x1
70         mov     x1, x4
71         ldr     x0, =0xc200ff17
72         smc     #0
73         ret
74 ENDPROC(armv8_el2_to_aarch32)
75 #endif