xref: /OK3568_Linux_fs/u-boot/lib/optee_clientApi/tee_smc-arm64.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1/*
2 * Copyright 2017, Rockchip Electronics Co., Ltd
3 * hisping lin, <hisping.lin@rock-chips.com>
4 *
5 * SPDX-License-Identifier:	GPL-2.0+
6 */
7
8#include <linux/linkage.h>
9
10#ifdef CONFIG_ARM64
11	.text
12
13#define SMC_PARAM_W0_OFFS	0
14#define SMC_PARAM_W2_OFFS	8
15#define SMC_PARAM_W4_OFFS	16
16#define SMC_PARAM_W6_OFFS	24
17
18	/* void tee_smc_call(struct smc_param *param); */
19	.globl	tee_smc_call
20ENTRY(tee_smc_call)
21	stp	x28, x30, [sp, #-16]!
22	mov	x28, x0
23	ldp	w0, w1, [x28, #SMC_PARAM_W0_OFFS]
24	ldp	w2, w3, [x28, #SMC_PARAM_W2_OFFS]
25	ldp	w4, w5, [x28, #SMC_PARAM_W4_OFFS]
26	ldp	w6, w7, [x28, #SMC_PARAM_W6_OFFS]
27	smc	#0
28	stp	w0, w1, [x28, #SMC_PARAM_W0_OFFS]
29	stp	w2, w3, [x28, #SMC_PARAM_W2_OFFS]
30	ldp	x28, x30, [sp], #16
31	ret
32ENDPROC(tee_smc_call)
33
34#else
35
36.text
37.balign 4
38.code 32
39
40	/* void tee_smc_call(struct smc_param *param); */
41	.globl	tee_smc_call
42ENTRY(tee_smc_call)
43	push	{r4-r8, lr}
44	mov	r8, r0
45	ldm	r8, {r0-r7}
46.arch_extension sec
47	smc	#0
48	stm	r8, {r0-r7}
49	pop	{r4-r8, pc}
50ENDPROC(tee_smc_call)
51#endif
52