summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorOlivier Deprez <olivier.deprez@arm.com>2020-03-12 15:44:17 +0100
committerOlivier Deprez <olivier.deprez@arm.com>2020-03-19 17:54:23 +0100
commit3e1a295f14be82c58d582e1f05a8b46fd068a8bd (patch)
tree4b9d4094bfa149db9d30808dcd594da06b730d88 /lib
parent837c8385669d9493794ff79b0ee894d878ac4b04 (diff)
tftf: provide hvc conduit facility
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com> Change-Id: I3ad6e6767c2ca915f4a4fe8c5accc07e3e255387
Diffstat (limited to 'lib')
-rw-r--r--lib/smc/aarch64/asm_smc.S57
-rw-r--r--lib/smc/aarch64/hvc.c30
2 files changed, 70 insertions, 17 deletions
diff --git a/lib/smc/aarch64/asm_smc.S b/lib/smc/aarch64/asm_smc.S
index c3044a4..b11baa8 100644
--- a/lib/smc/aarch64/asm_smc.S
+++ b/lib/smc/aarch64/asm_smc.S
@@ -1,28 +1,15 @@
/*
- * Copyright (c) 2013-2019, Arm Limited. All rights reserved.
+ * Copyright (c) 2013-2020, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <asm_macros.S>
- .globl asm_tftf_smc64
-
.section .text, "ax"
+ .macro smccc_conduit _conduit
-/* ---------------------------------------------------------------------------
- * smc_ret_values asm_tftf_smc64(uint32_t fid,
- * u_register_t arg1,
- * u_register_t arg2,
- * u_register_t arg3,
- * u_register_t arg4,
- * u_register_t arg5,
- * u_register_t arg6,
- * u_register_t arg7);
- * ---------------------------------------------------------------------------
- */
-func asm_tftf_smc64
/*
* According to the AAPCS64, x8 is the indirect result location
* register. It contains the address of the memory block that the caller
@@ -34,8 +21,8 @@ func asm_tftf_smc64
*/
str x8, [sp, #-16]!
- /* SMC arguments are already stored in x0-x7 */
- smc #0
+ /* "Conduit" arguments are already stored in x0-x7 */
+ \_conduit #0
/* Pop x8 into a caller-saved register */
ldr x9, [sp], #16
@@ -48,5 +35,41 @@ func asm_tftf_smc64
stp x2, x3, [x9, #16]
stp x4, x5, [x9, #32]
stp x6, x7, [x9, #48]
+
+ .endm
+
+/* ---------------------------------------------------------------------------
+ * smc_ret_values asm_tftf_smc64(uint32_t fid,
+ * u_register_t arg1,
+ * u_register_t arg2,
+ * u_register_t arg3,
+ * u_register_t arg4,
+ * u_register_t arg5,
+ * u_register_t arg6,
+ * u_register_t arg7);
+ * ---------------------------------------------------------------------------
+ */
+ .globl asm_tftf_smc64
+
+func asm_tftf_smc64
+ smccc_conduit smc
ret
endfunc asm_tftf_smc64
+
+/* ---------------------------------------------------------------------------
+ * hvc_ret_values asm_tftf_hvcc64(uint32_t fid,
+ * u_register_t arg1,
+ * u_register_t arg2,
+ * u_register_t arg3,
+ * u_register_t arg4,
+ * u_register_t arg5,
+ * u_register_t arg6,
+ * u_register_t arg7);
+ * ---------------------------------------------------------------------------
+ */
+ .globl asm_tftf_hvc64
+
+func asm_tftf_hvc64
+ smccc_conduit hvc
+ ret
+endfunc asm_tftf_hvc64
diff --git a/lib/smc/aarch64/hvc.c b/lib/smc/aarch64/hvc.c
new file mode 100644
index 0000000..c833864
--- /dev/null
+++ b/lib/smc/aarch64/hvc.c
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#include <stdint.h>
+#include <tftf.h>
+
+hvc_ret_values asm_tftf_hvc64(uint32_t fid,
+ u_register_t arg1,
+ u_register_t arg2,
+ u_register_t arg3,
+ u_register_t arg4,
+ u_register_t arg5,
+ u_register_t arg6,
+ u_register_t arg7);
+
+hvc_ret_values tftf_hvc(const hvc_args *args)
+{
+ return asm_tftf_hvc64(args->fid,
+ args->arg1,
+ args->arg2,
+ args->arg3,
+ args->arg4,
+ args->arg5,
+ args->arg6,
+ args->arg7);
+}