From dd5e0b3da009269fcd24645b47c7eb2f4ca22c5c Mon Sep 17 00:00:00 2001 From: Arto Merilainen Date: Tue, 25 Feb 2014 13:10:39 +0200 Subject: video: tegra: host: gk20a: Add own trace events This patch modifies gk20a driver to use its own trace events instead of trace events of nvhost. Bug 1468086 Change-Id: I1f40ba957ec7e25904e9f4621346cb7dc256a550 Signed-off-by: Arto Merilainen Reviewed-on: http://git-master/r/374289 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- include/trace/events/gk20a.h | 275 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 include/trace/events/gk20a.h (limited to 'include/trace/events') diff --git a/include/trace/events/gk20a.h b/include/trace/events/gk20a.h new file mode 100644 index 00000000..c2cf5f81 --- /dev/null +++ b/include/trace/events/gk20a.h @@ -0,0 +1,275 @@ +/* + * gk20a event logging to ftrace. + * + * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + */ + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM gk20a + +#if !defined(_TRACE_GK20A_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_GK20A_H + +#include +#include + +DECLARE_EVENT_CLASS(gk20a, + TP_PROTO(const char *name), + TP_ARGS(name), + TP_STRUCT__entry(__field(const char *, name)), + TP_fast_assign(__entry->name = name;), + TP_printk("name=%s", __entry->name) +); + +DEFINE_EVENT(gk20a, gk20a_channel_open, + TP_PROTO(const char *name), + TP_ARGS(name) +); + +DEFINE_EVENT(gk20a, gk20a_channel_release, + TP_PROTO(const char *name), + TP_ARGS(name) +); + +TRACE_EVENT(gk20a_push_cmdbuf, + TP_PROTO(const char *name, u32 mem_id, + u32 words, u32 offset, void *cmdbuf), + + TP_ARGS(name, mem_id, words, offset, cmdbuf), + + TP_STRUCT__entry( + __field(const char *, name) + __field(u32, mem_id) + __field(u32, words) + __field(u32, offset) + __field(bool, cmdbuf) + __dynamic_array(u32, cmdbuf, words) + ), + + TP_fast_assign( + if (cmdbuf) { + memcpy(__get_dynamic_array(cmdbuf), cmdbuf+offset, + words * sizeof(u32)); + } + __entry->cmdbuf = cmdbuf; + __entry->name = name; + __entry->mem_id = mem_id; + __entry->words = words; + __entry->offset = offset; + ), + + TP_printk("name=%s, mem_id=%08x, words=%u, offset=%d, contents=[%s]", + __entry->name, __entry->mem_id, + __entry->words, __entry->offset, + __print_hex(__get_dynamic_array(cmdbuf), + __entry->cmdbuf ? __entry->words * 4 : 0)) +); + +TRACE_EVENT(gk20a_channel_submit_gpfifo, + TP_PROTO(const char *name, u32 hw_chid, u32 num_entries, + u32 flags, u32 wait_id, u32 wait_value, + u32 incr_id), + + TP_ARGS(name, hw_chid, num_entries, flags, wait_id, wait_value, + incr_id), + + TP_STRUCT__entry( + __field(const char *, name) + __field(u32, hw_chid) + __field(u32, num_entries) + __field(u32, flags) + __field(u32, wait_id) + __field(u32, wait_value) + __field(u32, incr_id) + ), + + TP_fast_assign( + __entry->name = name; + __entry->hw_chid = hw_chid; + __entry->num_entries = num_entries; + __entry->flags = flags; + __entry->wait_id = wait_id; + __entry->wait_value = wait_value; + __entry->incr_id = incr_id; + ), + + TP_printk("name=%s, hw_chid=%d, num_entries=%u, flags=%u, wait_id=%d," + " wait_value=%u, incr_id=%u", + __entry->name, __entry->hw_chid, __entry->num_entries, + __entry->flags, __entry->wait_id, __entry->wait_value, + __entry->incr_id) +); + +TRACE_EVENT(gk20a_channel_submitted_gpfifo, + TP_PROTO(const char *name, u32 hw_chid, u32 num_entries, + u32 flags, u32 wait_id, u32 wait_value, + u32 incr_id, u32 incr_value), + + TP_ARGS(name, hw_chid, num_entries, flags, wait_id, wait_value, + incr_id, incr_value), + + TP_STRUCT__entry( + __field(const char *, name) + __field(u32, hw_chid) + __field(u32, num_entries) + __field(u32, flags) + __field(u32, wait_id) + __field(u32, wait_value) + __field(u32, incr_id) + __field(u32, incr_value) + ), + + TP_fast_assign( + __entry->name = name; + __entry->hw_chid = hw_chid; + __entry->num_entries = num_entries; + __entry->flags = flags; + __entry->wait_id = wait_id; + __entry->wait_value = wait_value; + __entry->incr_id = incr_id; + __entry->incr_value = incr_value; + ), + + TP_printk("name=%s, hw_chid=%d, num_entries=%u, flags=%u, wait_id=%d," + " wait_value=%u, incr_id=%u, incr_value=%u", + __entry->name, __entry->hw_chid, __entry->num_entries, + __entry->flags, __entry->wait_id, __entry->wait_value, + __entry->incr_id, __entry->incr_value) +); + + +TRACE_EVENT(gk20a_as_dev_open, + TP_PROTO(const char *name), + TP_ARGS(name), + TP_STRUCT__entry( + __field(const char *, name) + ), + TP_fast_assign( + __entry->name = name; + ), + TP_printk("name=%s ", __entry->name) +); + +TRACE_EVENT(gk20a_as_dev_release, + TP_PROTO(const char *name), + TP_ARGS(name), + TP_STRUCT__entry( + __field(const char *, name) + ), + TP_fast_assign( + __entry->name = name; + ), + TP_printk("name=%s ", __entry->name) +); + + +TRACE_EVENT(gk20a_as_ioctl_bind_channel, + TP_PROTO(const char *name), + TP_ARGS(name), + TP_STRUCT__entry( + __field(const char *, name) + ), + TP_fast_assign( + __entry->name = name; + ), + TP_printk("name=%s ", __entry->name) +); + + +TRACE_EVENT(gk20a_as_ioctl_alloc_space, + TP_PROTO(const char *name), + TP_ARGS(name), + TP_STRUCT__entry( + __field(const char *, name) + ), + TP_fast_assign( + __entry->name = name; + ), + TP_printk("name=%s ", __entry->name) +); + +TRACE_EVENT(gk20a_as_ioctl_free_space, + TP_PROTO(const char *name), + TP_ARGS(name), + TP_STRUCT__entry( + __field(const char *, name) + ), + TP_fast_assign( + __entry->name = name; + ), + TP_printk("name=%s ", __entry->name) +); + +TRACE_EVENT(gk20a_as_ioctl_map_buffer, + TP_PROTO(const char *name), + TP_ARGS(name), + TP_STRUCT__entry( + __field(const char *, name) + ), + TP_fast_assign( + __entry->name = name; + ), + TP_printk("name=%s ", __entry->name) +); + +TRACE_EVENT(gk20a_as_ioctl_unmap_buffer, + TP_PROTO(const char *name), + TP_ARGS(name), + TP_STRUCT__entry( + __field(const char *, name) + ), + TP_fast_assign( + __entry->name = name; + ), + TP_printk("name=%s ", __entry->name) +); + +TRACE_EVENT(gk20a_mmu_fault, + TP_PROTO(u32 fault_hi, u32 fault_lo, + u32 fault_info, + u32 instance, + u32 engine_id, + const char *engine, + const char *client, + const char *fault_type), + TP_ARGS(fault_hi, fault_lo, fault_info, + instance, engine_id, engine, client, fault_type), + TP_STRUCT__entry( + __field(u32, fault_hi) + __field(u32, fault_lo) + __field(u32, fault_info) + __field(u32, instance) + __field(u32, engine_id) + __field(const char *, engine) + __field(const char *, client) + __field(const char *, fault_type) + ), + TP_fast_assign( + __entry->fault_hi = fault_hi; + __entry->fault_lo = fault_lo; + __entry->fault_info = fault_info; + __entry->instance = instance; + __entry->engine_id = engine_id; + __entry->engine = engine; + __entry->client = client; + __entry->fault_type = fault_type; + ), + TP_printk("fault=0x%x,%08x info=0x%x instance=0x%x engine_id=%d engine=%s client=%s type=%s", + __entry->fault_hi, __entry->fault_lo, + __entry->fault_info, __entry->instance, __entry->engine_id, + __entry->engine, __entry->client, __entry->fault_type) +); + +#endif /* _TRACE_GK20A_H */ + +/* This part must be outside protection */ +#include -- cgit v1.2.2