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