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