| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. |
| */ |
| |
| #undef TRACE_SYSTEM |
| #define TRACE_SYSTEM qcom_scm |
| |
| #if !defined(_TRACE_SCM_SMC_INTERFACE_H) || defined(TRACE_HEADER_MULTI_READ) |
| |
| #define _TRACE_SCM_SMC_INTERFACE_H |
| |
| #include <linux/tracepoint.h> |
| |
| TRACE_EVENT(scm_smc_request, |
| |
| TP_PROTO(unsigned long a0, const struct arm_smccc_args *smc), |
| |
| TP_ARGS(a0, smc), |
| |
| TP_STRUCT__entry( |
| __field(u64, smc_id) |
| __field(u8, svc_id) |
| __field(u8, cmd_id) |
| __field(u8, args_cnt) |
| __dynamic_array(unsigned long, args, |
| min_t(u8, (smc->args[1] & 0xF), (u8)6)) |
| ), |
| |
| TP_fast_assign( |
| __entry->smc_id = a0; |
| __entry->svc_id = (smc->args[0] >> 8) & 0xFF; |
| __entry->cmd_id = smc->args[0] & 0xFF; |
| u8 n = min_t(u8, (smc->args[1] & 0xF), (u8)6); |
| |
| __entry->args_cnt = n; |
| |
| unsigned long *dst = __get_dynamic_array(args); |
| |
| for (int i = 0; i < n; i++) |
| dst[i] = smc->args[2 + i]; |
| ), |
| |
| TP_printk("smc_id:0x%08llx svc_id:0x%02x cmd_id:0x%02x args_cnt:%u args:%s", |
| __entry->smc_id, __entry->svc_id, __entry->cmd_id, __entry->args_cnt, |
| __print_dynamic_array(args, sizeof(unsigned long))) |
| ); |
| |
| TRACE_EVENT(scm_waitq_sleep, |
| |
| TP_PROTO(u32 wq_ctx, u32 smc_ctx), |
| |
| TP_ARGS(wq_ctx, smc_ctx), |
| |
| TP_STRUCT__entry( |
| __field(u32, wq_ctx) |
| __field(u32, smc_call_ctx) |
| ), |
| |
| TP_fast_assign( |
| __entry->wq_ctx = wq_ctx; |
| __entry->smc_call_ctx = smc_ctx; |
| ), |
| |
| TP_printk("wq_ctx:%u, smc_call_ctx:%u", __entry->wq_ctx, __entry->smc_call_ctx) |
| ); |
| |
| TRACE_EVENT(scm_waitq_resume, |
| |
| TP_PROTO(u32 smc_ctx), |
| |
| TP_ARGS(smc_ctx), |
| |
| TP_STRUCT__entry( |
| __field(u32, smc_call_ctx) |
| ), |
| |
| TP_fast_assign( |
| __entry->smc_call_ctx = smc_ctx; |
| ), |
| |
| TP_printk("smc_call_ctx:%u", __entry->smc_call_ctx) |
| ); |
| |
| TRACE_EVENT(scm_waitq_get_wq_ctx, |
| |
| TP_PROTO(u32 wq_ctx, u32 flags, u32 pending), |
| |
| TP_ARGS(wq_ctx, flags, pending), |
| |
| TP_STRUCT__entry( |
| __field(u32, wq_ctx) |
| __field(u32, flags) |
| __field(u32, more_pending) |
| ), |
| |
| TP_fast_assign( |
| __entry->wq_ctx = wq_ctx; |
| __entry->flags = flags; |
| __entry->more_pending = pending; |
| ), |
| |
| TP_printk("wq_ctx:%u, flags:%u, more_pending:%u", |
| __entry->wq_ctx, __entry->flags, __entry->more_pending) |
| ); |
| |
| TRACE_EVENT(scm_smc_done, |
| |
| TP_PROTO(int ret, u64 smc_id, struct arm_smccc_res *smc_res), |
| |
| TP_ARGS(ret, smc_id, smc_res), |
| |
| TP_STRUCT__entry( |
| __field(int, ret) |
| __field(u64, smc_id) |
| __field(unsigned long, res) |
| __field(unsigned long, res0) |
| __field(unsigned long, res1) |
| __field(unsigned long, res2) |
| ), |
| |
| TP_fast_assign( |
| __entry->ret = ret; |
| __entry->smc_id = smc_id; |
| __entry->res = smc_res->a0; |
| __entry->res0 = smc_res->a1; |
| __entry->res1 = smc_res->a2; |
| __entry->res2 = smc_res->a3; |
| ), |
| |
| TP_printk("smc_id:0x%08llx, ret:%d res_to_callee:0x%lx res0:0x%lx res1:0x%lx res2:0x%lx", |
| __entry->smc_id, __entry->ret, __entry->res, |
| __entry->res0, __entry->res1, __entry->res2) |
| ); |
| |
| #endif /* _TRACE_SCM_SMC_INTERFACE_H */ |
| |
| #undef TRACE_INCLUDE_PATH |
| #define TRACE_INCLUDE_PATH . |
| #define TRACE_INCLUDE_FILE qcom_scm_trace |
| |
| #include <trace/define_trace.h> |
| |