drm/panthor: Don't add write fences to the shared BOs
[drm/drm-misc.git] / arch / riscv / kernel / sbi_ecall.c
blob24aabb4fbde3adb83a97edd48aa06a9ede393034
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2024 Rivos Inc. */
4 #include <asm/sbi.h>
5 #define CREATE_TRACE_POINTS
6 #include <asm/trace.h>
8 long __sbi_base_ecall(int fid)
10 struct sbiret ret;
12 ret = sbi_ecall(SBI_EXT_BASE, fid, 0, 0, 0, 0, 0, 0);
13 if (!ret.error)
14 return ret.value;
15 else
16 return sbi_err_map_linux_errno(ret.error);
18 EXPORT_SYMBOL(__sbi_base_ecall);
20 struct sbiret __sbi_ecall(unsigned long arg0, unsigned long arg1,
21 unsigned long arg2, unsigned long arg3,
22 unsigned long arg4, unsigned long arg5,
23 int fid, int ext)
25 struct sbiret ret;
27 trace_sbi_call(ext, fid);
29 register uintptr_t a0 asm ("a0") = (uintptr_t)(arg0);
30 register uintptr_t a1 asm ("a1") = (uintptr_t)(arg1);
31 register uintptr_t a2 asm ("a2") = (uintptr_t)(arg2);
32 register uintptr_t a3 asm ("a3") = (uintptr_t)(arg3);
33 register uintptr_t a4 asm ("a4") = (uintptr_t)(arg4);
34 register uintptr_t a5 asm ("a5") = (uintptr_t)(arg5);
35 register uintptr_t a6 asm ("a6") = (uintptr_t)(fid);
36 register uintptr_t a7 asm ("a7") = (uintptr_t)(ext);
37 asm volatile ("ecall"
38 : "+r" (a0), "+r" (a1)
39 : "r" (a2), "r" (a3), "r" (a4), "r" (a5), "r" (a6), "r" (a7)
40 : "memory");
41 ret.error = a0;
42 ret.value = a1;
44 trace_sbi_return(ext, ret.error, ret.value);
46 return ret;
48 EXPORT_SYMBOL(__sbi_ecall);