xref: /optee_os/lib/libutee/arch/riscv/utee_syscalls_rv.S (revision e2eade366c39a6781f9b0cd37134b960ff636820)
12f18fc50Sliushiwei/* SPDX-License-Identifier: BSD-2-Clause */
22f18fc50Sliushiwei/*
3*e2eade36SAlvin Chang * Copyright (c) 2023 Andes Technology Corporation
42f18fc50Sliushiwei * Copyright  2022  Beijing ESWIN Computing Technology Co., Ltd.
52f18fc50Sliushiwei */
62f18fc50Sliushiwei
72f18fc50Sliushiwei#include <tee_syscall_numbers.h>
82f18fc50Sliushiwei#include <asm.S>
92f18fc50Sliushiwei
102f18fc50Sliushiwei        .section .text
112f18fc50Sliushiwei
122f18fc50Sliushiwei        .macro UTEE_SYSCALL name, scn, num_args
132f18fc50Sliushiwei	FUNC \name , :
142f18fc50Sliushiwei
152f18fc50Sliushiwei	.if \num_args > TEE_SVC_MAX_ARGS || \num_args > 8
162f18fc50Sliushiwei	.error "Too many arguments for syscall"
172f18fc50Sliushiwei	.endif
182f18fc50Sliushiwei	li	t0, \scn
192f18fc50Sliushiwei	li	t1, \num_args
202f18fc50Sliushiwei	ecall
212f18fc50Sliushiwei	ret
222f18fc50Sliushiwei	END_FUNC \name
232f18fc50Sliushiwei	.endm
242f18fc50Sliushiwei
252f18fc50Sliushiwei	FUNC _utee_panic, :
26*e2eade36SAlvin Chang	/* The stack pointer is always kept 16-byte aligned */
27*e2eade36SAlvin Chang	add	sp, sp, -16
28*e2eade36SAlvin Chang	/* Save return address and frame pointer to stack */
29*e2eade36SAlvin Chang#if defined(RV32)
30*e2eade36SAlvin Chang	sw	s0, 8(sp)
31*e2eade36SAlvin Chang	sw	ra, 12(sp)
32*e2eade36SAlvin Chang#elif defined(RV64)
33*e2eade36SAlvin Chang	sd	s0, 0(sp)
34*e2eade36SAlvin Chang	sd	ra, 8(sp)
35*e2eade36SAlvin Chang#endif
36*e2eade36SAlvin Chang	/* Assign a1 as stack pointer for scall_save_panic_stack() */
37*e2eade36SAlvin Chang	mv	a1, sp
38*e2eade36SAlvin Chang	/* Use tail call here because we will not return from it */
39af9ee0e0SAlvin Chang	tail	__utee_panic
40*e2eade36SAlvin Chang	/* Not reached */
412f18fc50Sliushiwei	END_FUNC _utee_panic
422f18fc50Sliushiwei
432f18fc50Sliushiwei#include <utee_syscalls_asm.S>
44