arm64: dts: qcom: sm8550: add TRNG node
[linux-modified.git] / arch / xtensa / kernel / mcount.S
1 /*
2  * arch/xtensa/kernel/mcount.S
3  *
4  * Xtensa specific mcount support
5  *
6  * This file is subject to the terms and conditions of the GNU General Public
7  * License.  See the file "COPYING" in the main directory of this archive
8  * for more details.
9  *
10  * Copyright (C) 2013 Tensilica Inc.
11  */
12
13 #include <linux/linkage.h>
14 #include <asm/asmmacro.h>
15 #include <asm/ftrace.h>
16
17 /*
18  * Entry condition:
19  *
20  *   a2:        a0 of the caller in windowed ABI
21  *   a10:       a0 of the caller in call0 ABI
22  *
23  * In call0 ABI the function _mcount is called with the special ABI:
24  * its argument is in a10 and all the usual argument registers (a2 - a7)
25  * must be preserved in addition to callee-saved a12 - a15.
26  */
27
28 ENTRY(_mcount)
29 #if defined(__XTENSA_WINDOWED_ABI__)
30         abi_entry_default
31
32         movi    a4, ftrace_trace_function
33         l32i    a4, a4, 0
34         movi    a3, ftrace_stub
35         bne     a3, a4, 1f
36         abi_ret_default
37
38 1:      xor     a7, a2, a1
39         movi    a3, 0x3fffffff
40         and     a7, a7, a3
41         xor     a7, a7, a1
42
43         xor     a6, a0, a1
44         and     a6, a6, a3
45         xor     a6, a6, a1
46         addi    a6, a6, -MCOUNT_INSN_SIZE
47         callx4  a4
48
49         abi_ret_default
50 #elif defined(__XTENSA_CALL0_ABI__)
51         abi_entry_default
52
53         movi    a9, ftrace_trace_function
54         l32i    a9, a9, 0
55         movi    a11, ftrace_stub
56         bne     a9, a11, 1f
57         abi_ret_default
58
59 1:      abi_entry(28)
60         s32i    a0, sp, 0
61         s32i    a2, sp, 4
62         s32i    a3, sp, 8
63         s32i    a4, sp, 12
64         s32i    a5, sp, 16
65         s32i    a6, sp, 20
66         s32i    a7, sp, 24
67         addi    a2, a10, -MCOUNT_INSN_SIZE
68         callx0  a9
69         l32i    a0, sp, 0
70         l32i    a2, sp, 4
71         l32i    a3, sp, 8
72         l32i    a4, sp, 12
73         l32i    a5, sp, 16
74         l32i    a6, sp, 20
75         l32i    a7, sp, 24
76         abi_ret(28)
77 #else
78 #error Unsupported Xtensa ABI
79 #endif
80 ENDPROC(_mcount)
81 EXPORT_SYMBOL(_mcount)
82
83 ENTRY(ftrace_stub)
84         abi_entry_default
85         abi_ret_default
86 ENDPROC(ftrace_stub)