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