18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ci#ifndef __ASM_NDS32_FTRACE_H
48c2ecf20Sopenharmony_ci#define __ASM_NDS32_FTRACE_H
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifdef CONFIG_FUNCTION_TRACER
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#define HAVE_FUNCTION_GRAPH_FP_TEST
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#define MCOUNT_ADDR ((unsigned long)(_mcount))
118c2ecf20Sopenharmony_ci/* mcount call is composed of three instructions:
128c2ecf20Sopenharmony_ci * sethi + ori + jral
138c2ecf20Sopenharmony_ci */
148c2ecf20Sopenharmony_ci#define MCOUNT_INSN_SIZE 12
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ciextern void _mcount(unsigned long parent_ip);
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci#ifdef CONFIG_DYNAMIC_FTRACE
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#define FTRACE_ADDR ((unsigned long)_ftrace_caller)
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci#ifdef __NDS32_EL__
238c2ecf20Sopenharmony_ci#define INSN_NOP		0x09000040
248c2ecf20Sopenharmony_ci#define INSN_SIZE(insn)		(((insn & 0x00000080) == 0) ? 4 : 2)
258c2ecf20Sopenharmony_ci#define IS_SETHI(insn)		((insn & 0x000000fe) == 0x00000046)
268c2ecf20Sopenharmony_ci#define ENDIAN_CONVERT(insn)	be32_to_cpu(insn)
278c2ecf20Sopenharmony_ci#else /* __NDS32_EB__ */
288c2ecf20Sopenharmony_ci#define INSN_NOP		0x40000009
298c2ecf20Sopenharmony_ci#define INSN_SIZE(insn)		(((insn & 0x80000000) == 0) ? 4 : 2)
308c2ecf20Sopenharmony_ci#define IS_SETHI(insn)		((insn & 0xfe000000) == 0x46000000)
318c2ecf20Sopenharmony_ci#define ENDIAN_CONVERT(insn)	(insn)
328c2ecf20Sopenharmony_ci#endif
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ciextern void _ftrace_caller(unsigned long parent_ip);
358c2ecf20Sopenharmony_cistatic inline unsigned long ftrace_call_adjust(unsigned long addr)
368c2ecf20Sopenharmony_ci{
378c2ecf20Sopenharmony_ci	return addr;
388c2ecf20Sopenharmony_ci}
398c2ecf20Sopenharmony_cistruct dyn_arch_ftrace {
408c2ecf20Sopenharmony_ci};
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci#endif /* CONFIG_DYNAMIC_FTRACE */
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci#endif /* CONFIG_FUNCTION_TRACER */
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci#endif /* __ASM_NDS32_FTRACE_H */
47