trusty-smc-arm64.S
742 Bytes
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (C) 2020 Google, Inc.
*/
#include <linux/linkage.h>
.macro push ra, rb
stp \ra, \rb, [sp,#-16]!
.endm
.macro pop ra, rb
ldp \ra, \rb, [sp], #16
.endm
lr .req x30
SYM_FUNC_START(trusty_smc8)
/*
* Save x8 (return value ptr) and lr. The SMC calling convention says el3
* does not need to preserve x8. The normal ABI does not require either x8
* or lr to be preserved.
*/
push x8, lr
smc #0
pop x8, lr
/* Copy 8-register smc return value to struct smc_ret8 return value */
stp x0, x1, [x8], #16
stp x2, x3, [x8], #16
stp x4, x5, [x8], #16
stp x6, x7, [x8], #16
ret
SYM_FUNC_END(trusty_smc8)