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