android13/u-boot/lib/optee_clientApi/tee_smc-arm64.S

52 lines
1003 B
ArmAsm

/*
* Copyright 2017, Rockchip Electronics Co., Ltd
* hisping lin, <hisping.lin@rock-chips.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <linux/linkage.h>
#ifdef CONFIG_ARM64
.text
#define SMC_PARAM_W0_OFFS 0
#define SMC_PARAM_W2_OFFS 8
#define SMC_PARAM_W4_OFFS 16
#define SMC_PARAM_W6_OFFS 24
/* void tee_smc_call(struct smc_param *param); */
.globl tee_smc_call
ENTRY(tee_smc_call)
stp x28, x30, [sp, #-16]!
mov x28, x0
ldp w0, w1, [x28, #SMC_PARAM_W0_OFFS]
ldp w2, w3, [x28, #SMC_PARAM_W2_OFFS]
ldp w4, w5, [x28, #SMC_PARAM_W4_OFFS]
ldp w6, w7, [x28, #SMC_PARAM_W6_OFFS]
smc #0
stp w0, w1, [x28, #SMC_PARAM_W0_OFFS]
stp w2, w3, [x28, #SMC_PARAM_W2_OFFS]
ldp x28, x30, [sp], #16
ret
ENDPROC(tee_smc_call)
#else
.text
.balign 4
.code 32
/* void tee_smc_call(struct smc_param *param); */
.globl tee_smc_call
ENTRY(tee_smc_call)
push {r4-r8, lr}
mov r8, r0
ldm r8, {r0-r7}
.arch_extension sec
smc #0
stm r8, {r0-r7}
pop {r4-r8, pc}
ENDPROC(tee_smc_call)
#endif