xref: /linux/drivers/gpu/drm/panthor/panthor_trace.h (revision 4a57e0913e8c7fff407e97909f4ae48caa84d612)
1 /* SPDX-License-Identifier: GPL-2.0 or MIT */
2 /* Copyright 2025 Collabora ltd. */
3 
4 #undef TRACE_SYSTEM
5 #define TRACE_SYSTEM panthor
6 
7 #if !defined(__PANTHOR_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ)
8 #define __PANTHOR_TRACE_H__
9 
10 #include <linux/tracepoint.h>
11 #include <linux/types.h>
12 
13 #include "panthor_hw.h"
14 
15 /**
16  * gpu_power_status - called whenever parts of GPU hardware are turned on or off
17  * @dev: pointer to the &struct device, for printing the device name
18  * @shader_bitmap: bitmap where a high bit indicates the shader core at a given
19  *                 bit index is on, and a low bit indicates a shader core is
20  *                 either powered off or absent
21  * @tiler_bitmap: bitmap where a high bit indicates the tiler unit at a given
22  *                bit index is on, and a low bit indicates a tiler unit is
23  *                either powered off or absent
24  * @l2_bitmap: bitmap where a high bit indicates the L2 cache at a given bit
25  *             index is on, and a low bit indicates the L2 cache is either
26  *             powered off or absent
27  */
28 TRACE_EVENT_FN(gpu_power_status,
29 	TP_PROTO(const struct device *dev, u64 shader_bitmap, u64 tiler_bitmap,
30 		 u64 l2_bitmap),
31 	TP_ARGS(dev, shader_bitmap, tiler_bitmap, l2_bitmap),
32 	TP_STRUCT__entry(
33 		__string(dev_name, dev_name(dev))
34 		__field(u64, shader_bitmap)
35 		__field(u64, tiler_bitmap)
36 		__field(u64, l2_bitmap)
37 	),
38 	TP_fast_assign(
39 		__assign_str(dev_name);
40 		__entry->shader_bitmap	= shader_bitmap;
41 		__entry->tiler_bitmap	= tiler_bitmap;
42 		__entry->l2_bitmap	= l2_bitmap;
43 	),
44 	TP_printk("%s: shader_bitmap=0x%llx tiler_bitmap=0x%llx l2_bitmap=0x%llx",
45 		  __get_str(dev_name), __entry->shader_bitmap, __entry->tiler_bitmap,
46 		  __entry->l2_bitmap
47 	),
48 	panthor_hw_power_status_register, panthor_hw_power_status_unregister
49 );
50 
51 /**
52  * gpu_job_irq - called after a job interrupt from firmware completes
53  * @dev: pointer to the &struct device, for printing the device name
54  * @events: bitmask of BIT(CSG id) | BIT(31) for a global event
55  * @duration_ns: Nanoseconds between job IRQ handler entry and exit
56  *
57  * The panthor_job_irq_handler() function instrumented by this tracepoint exits
58  * once it has queued the firmware interrupts for processing, not when the
59  * firmware interrupts are fully processed. This tracepoint allows for debugging
60  * issues with delays in the workqueue's processing of events.
61  */
62 TRACE_EVENT(gpu_job_irq,
63 	TP_PROTO(const struct device *dev, u32 events, u32 duration_ns),
64 	TP_ARGS(dev, events, duration_ns),
65 	TP_STRUCT__entry(
66 		__string(dev_name, dev_name(dev))
67 		__field(u32, events)
68 		__field(u32, duration_ns)
69 	),
70 	TP_fast_assign(
71 		__assign_str(dev_name);
72 		__entry->events		= events;
73 		__entry->duration_ns	= duration_ns;
74 	),
75 	TP_printk("%s: events=0x%x duration_ns=%d", __get_str(dev_name),
76 		  __entry->events, __entry->duration_ns)
77 );
78 
79 #endif /* __PANTHOR_TRACE_H__ */
80 
81 #undef TRACE_INCLUDE_PATH
82 #define TRACE_INCLUDE_PATH .
83 #undef TRACE_INCLUDE_FILE
84 #define TRACE_INCLUDE_FILE panthor_trace
85 
86 #include <trace/define_trace.h>
87