1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 4 */ 5 6 #undef TRACE_SYSTEM 7 #define TRACE_SYSTEM qcom_scm 8 9 #if !defined(_TRACE_SCM_SMC_INTERFACE_H) || defined(TRACE_HEADER_MULTI_READ) 10 11 #define _TRACE_SCM_SMC_INTERFACE_H 12 13 #include <linux/tracepoint.h> 14 15 TRACE_EVENT(scm_smc_request, 16 17 TP_PROTO(unsigned long a0, const struct arm_smccc_args *smc), 18 19 TP_ARGS(a0, smc), 20 21 TP_STRUCT__entry( 22 __field(u64, smc_id) 23 __field(u8, svc_id) 24 __field(u8, cmd_id) 25 __field(u8, args_cnt) 26 __dynamic_array(unsigned long, args, 27 min_t(u8, (smc->args[1] & 0xF), (u8)6)) 28 ), 29 30 TP_fast_assign( 31 __entry->smc_id = a0; 32 __entry->svc_id = (smc->args[0] >> 8) & 0xFF; 33 __entry->cmd_id = smc->args[0] & 0xFF; 34 u8 n = min_t(u8, (smc->args[1] & 0xF), (u8)6); 35 36 __entry->args_cnt = n; 37 38 unsigned long *dst = __get_dynamic_array(args); 39 40 for (int i = 0; i < n; i++) 41 dst[i] = smc->args[2 + i]; 42 ), 43 44 TP_printk("smc_id:0x%08llx svc_id:0x%02x cmd_id:0x%02x args_cnt:%u args:%s", 45 __entry->smc_id, __entry->svc_id, __entry->cmd_id, __entry->args_cnt, 46 __print_dynamic_array(args, sizeof(unsigned long))) 47 ); 48 49 TRACE_EVENT(scm_waitq_sleep, 50 51 TP_PROTO(u32 wq_ctx, u32 smc_ctx), 52 53 TP_ARGS(wq_ctx, smc_ctx), 54 55 TP_STRUCT__entry( 56 __field(u32, wq_ctx) 57 __field(u32, smc_call_ctx) 58 ), 59 60 TP_fast_assign( 61 __entry->wq_ctx = wq_ctx; 62 __entry->smc_call_ctx = smc_ctx; 63 ), 64 65 TP_printk("wq_ctx:%u, smc_call_ctx:%u", __entry->wq_ctx, __entry->smc_call_ctx) 66 ); 67 68 TRACE_EVENT(scm_waitq_resume, 69 70 TP_PROTO(u32 smc_ctx), 71 72 TP_ARGS(smc_ctx), 73 74 TP_STRUCT__entry( 75 __field(u32, smc_call_ctx) 76 ), 77 78 TP_fast_assign( 79 __entry->smc_call_ctx = smc_ctx; 80 ), 81 82 TP_printk("smc_call_ctx:%u", __entry->smc_call_ctx) 83 ); 84 85 TRACE_EVENT(scm_waitq_get_wq_ctx, 86 87 TP_PROTO(u32 wq_ctx, u32 flags, u32 pending), 88 89 TP_ARGS(wq_ctx, flags, pending), 90 91 TP_STRUCT__entry( 92 __field(u32, wq_ctx) 93 __field(u32, flags) 94 __field(u32, more_pending) 95 ), 96 97 TP_fast_assign( 98 __entry->wq_ctx = wq_ctx; 99 __entry->flags = flags; 100 __entry->more_pending = pending; 101 ), 102 103 TP_printk("wq_ctx:%u, flags:%u, more_pending:%u", 104 __entry->wq_ctx, __entry->flags, __entry->more_pending) 105 ); 106 107 TRACE_EVENT(scm_smc_done, 108 109 TP_PROTO(int ret, u64 smc_id, struct arm_smccc_res *smc_res), 110 111 TP_ARGS(ret, smc_id, smc_res), 112 113 TP_STRUCT__entry( 114 __field(int, ret) 115 __field(u64, smc_id) 116 __field(unsigned long, res) 117 __field(unsigned long, res0) 118 __field(unsigned long, res1) 119 __field(unsigned long, res2) 120 ), 121 122 TP_fast_assign( 123 __entry->ret = ret; 124 __entry->smc_id = smc_id; 125 __entry->res = smc_res->a0; 126 __entry->res0 = smc_res->a1; 127 __entry->res1 = smc_res->a2; 128 __entry->res2 = smc_res->a3; 129 ), 130 131 TP_printk("smc_id:0x%08llx, ret:%d res_to_callee:0x%lx res0:0x%lx res1:0x%lx res2:0x%lx", 132 __entry->smc_id, __entry->ret, __entry->res, 133 __entry->res0, __entry->res1, __entry->res2) 134 ); 135 136 #endif /* _TRACE_SCM_SMC_INTERFACE_H */ 137 138 #undef TRACE_INCLUDE_PATH 139 #define TRACE_INCLUDE_PATH . 140 #define TRACE_INCLUDE_FILE qcom_scm_trace 141 142 #include <trace/define_trace.h> 143 144