Merge tag 'efi-2020-07-rc6' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi
[oweals/u-boot.git] / arch / arm / cpu / armv8 / smccc-call.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2015, Linaro Limited
4  */
5 #include <linux/linkage.h>
6 #include <linux/arm-smccc.h>
7 #include <generated/asm-offsets.h>
8
9 #ifdef CONFIG_EFI_LOADER
10         .section        .text.efi_runtime
11 #endif
12
13         .macro SMCCC instr
14         .cfi_startproc
15         \instr  #0
16         ldr     x4, [sp]
17         stp     x0, x1, [x4, #ARM_SMCCC_RES_X0_OFFS]
18         stp     x2, x3, [x4, #ARM_SMCCC_RES_X2_OFFS]
19         ldr     x4, [sp, #8]
20         cbz     x4, 1f /* no quirk structure */
21         ldr     x9, [x4, #ARM_SMCCC_QUIRK_ID_OFFS]
22         cmp     x9, #ARM_SMCCC_QUIRK_QCOM_A6
23         b.ne    1f
24         str     x6, [x4, ARM_SMCCC_QUIRK_STATE_OFFS]
25 1:      ret
26         .cfi_endproc
27         .endm
28
29 /*
30  * void arm_smccc_smc(unsigned long a0, unsigned long a1, unsigned long a2,
31  *                unsigned long a3, unsigned long a4, unsigned long a5,
32  *                unsigned long a6, unsigned long a7, struct arm_smccc_res *res,
33  *                struct arm_smccc_quirk *quirk)
34  */
35 ENTRY(__arm_smccc_smc)
36         SMCCC   smc
37 ENDPROC(__arm_smccc_smc)
38
39 /*
40  * void arm_smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2,
41  *                unsigned long a3, unsigned long a4, unsigned long a5,
42  *                unsigned long a6, unsigned long a7, struct arm_smccc_res *res,
43  *                struct arm_smccc_quirk *quirk)
44  */
45 ENTRY(__arm_smccc_hvc)
46         SMCCC   hvc
47 ENDPROC(__arm_smccc_hvc)