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