^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #ifndef __ASM_NDS32_FTRACE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #define __ASM_NDS32_FTRACE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #ifdef CONFIG_FUNCTION_TRACER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define HAVE_FUNCTION_GRAPH_FP_TEST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define MCOUNT_ADDR ((unsigned long)(_mcount))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) /* mcount call is composed of three instructions:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * sethi + ori + jral
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define MCOUNT_INSN_SIZE 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) extern void _mcount(unsigned long parent_ip);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #ifdef CONFIG_DYNAMIC_FTRACE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define FTRACE_ADDR ((unsigned long)_ftrace_caller)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #ifdef __NDS32_EL__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define INSN_NOP 0x09000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define INSN_SIZE(insn) (((insn & 0x00000080) == 0) ? 4 : 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define IS_SETHI(insn) ((insn & 0x000000fe) == 0x00000046)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define ENDIAN_CONVERT(insn) be32_to_cpu(insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #else /* __NDS32_EB__ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define INSN_NOP 0x40000009
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define INSN_SIZE(insn) (((insn & 0x80000000) == 0) ? 4 : 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define IS_SETHI(insn) ((insn & 0xfe000000) == 0x46000000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define ENDIAN_CONVERT(insn) (insn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) extern void _ftrace_caller(unsigned long parent_ip);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) static inline unsigned long ftrace_call_adjust(unsigned long addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) return addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) struct dyn_arch_ftrace {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #endif /* CONFIG_DYNAMIC_FTRACE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #endif /* CONFIG_FUNCTION_TRACER */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #endif /* __ASM_NDS32_FTRACE_H */