xref: /linux/drivers/gpu/drm/panthor/panthor_trace.h (revision 4a57e0913e8c7fff407e97909f4ae48caa84d612)
152ebfd8dSNicolas Frattaroli /* SPDX-License-Identifier: GPL-2.0 or MIT */
252ebfd8dSNicolas Frattaroli /* Copyright 2025 Collabora ltd. */
352ebfd8dSNicolas Frattaroli 
452ebfd8dSNicolas Frattaroli #undef TRACE_SYSTEM
552ebfd8dSNicolas Frattaroli #define TRACE_SYSTEM panthor
652ebfd8dSNicolas Frattaroli 
752ebfd8dSNicolas Frattaroli #if !defined(__PANTHOR_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ)
852ebfd8dSNicolas Frattaroli #define __PANTHOR_TRACE_H__
952ebfd8dSNicolas Frattaroli 
1052ebfd8dSNicolas Frattaroli #include <linux/tracepoint.h>
1152ebfd8dSNicolas Frattaroli #include <linux/types.h>
1252ebfd8dSNicolas Frattaroli 
1352ebfd8dSNicolas Frattaroli #include "panthor_hw.h"
1452ebfd8dSNicolas Frattaroli 
1552ebfd8dSNicolas Frattaroli /**
1652ebfd8dSNicolas Frattaroli  * gpu_power_status - called whenever parts of GPU hardware are turned on or off
1752ebfd8dSNicolas Frattaroli  * @dev: pointer to the &struct device, for printing the device name
1852ebfd8dSNicolas Frattaroli  * @shader_bitmap: bitmap where a high bit indicates the shader core at a given
1952ebfd8dSNicolas Frattaroli  *                 bit index is on, and a low bit indicates a shader core is
2052ebfd8dSNicolas Frattaroli  *                 either powered off or absent
2152ebfd8dSNicolas Frattaroli  * @tiler_bitmap: bitmap where a high bit indicates the tiler unit at a given
2252ebfd8dSNicolas Frattaroli  *                bit index is on, and a low bit indicates a tiler unit is
2352ebfd8dSNicolas Frattaroli  *                either powered off or absent
2452ebfd8dSNicolas Frattaroli  * @l2_bitmap: bitmap where a high bit indicates the L2 cache at a given bit
2552ebfd8dSNicolas Frattaroli  *             index is on, and a low bit indicates the L2 cache is either
2652ebfd8dSNicolas Frattaroli  *             powered off or absent
2752ebfd8dSNicolas Frattaroli  */
2852ebfd8dSNicolas Frattaroli TRACE_EVENT_FN(gpu_power_status,
2952ebfd8dSNicolas Frattaroli 	TP_PROTO(const struct device *dev, u64 shader_bitmap, u64 tiler_bitmap,
3052ebfd8dSNicolas Frattaroli 		 u64 l2_bitmap),
3152ebfd8dSNicolas Frattaroli 	TP_ARGS(dev, shader_bitmap, tiler_bitmap, l2_bitmap),
3252ebfd8dSNicolas Frattaroli 	TP_STRUCT__entry(
3352ebfd8dSNicolas Frattaroli 		__string(dev_name, dev_name(dev))
3452ebfd8dSNicolas Frattaroli 		__field(u64, shader_bitmap)
3552ebfd8dSNicolas Frattaroli 		__field(u64, tiler_bitmap)
3652ebfd8dSNicolas Frattaroli 		__field(u64, l2_bitmap)
3752ebfd8dSNicolas Frattaroli 	),
3852ebfd8dSNicolas Frattaroli 	TP_fast_assign(
3952ebfd8dSNicolas Frattaroli 		__assign_str(dev_name);
4052ebfd8dSNicolas Frattaroli 		__entry->shader_bitmap	= shader_bitmap;
4152ebfd8dSNicolas Frattaroli 		__entry->tiler_bitmap	= tiler_bitmap;
4252ebfd8dSNicolas Frattaroli 		__entry->l2_bitmap	= l2_bitmap;
4352ebfd8dSNicolas Frattaroli 	),
4452ebfd8dSNicolas Frattaroli 	TP_printk("%s: shader_bitmap=0x%llx tiler_bitmap=0x%llx l2_bitmap=0x%llx",
4552ebfd8dSNicolas Frattaroli 		  __get_str(dev_name), __entry->shader_bitmap, __entry->tiler_bitmap,
4652ebfd8dSNicolas Frattaroli 		  __entry->l2_bitmap
4752ebfd8dSNicolas Frattaroli 	),
4852ebfd8dSNicolas Frattaroli 	panthor_hw_power_status_register, panthor_hw_power_status_unregister
4952ebfd8dSNicolas Frattaroli );
5052ebfd8dSNicolas Frattaroli 
51*15bd2f5dSNicolas Frattaroli /**
52*15bd2f5dSNicolas Frattaroli  * gpu_job_irq - called after a job interrupt from firmware completes
53*15bd2f5dSNicolas Frattaroli  * @dev: pointer to the &struct device, for printing the device name
54*15bd2f5dSNicolas Frattaroli  * @events: bitmask of BIT(CSG id) | BIT(31) for a global event
55*15bd2f5dSNicolas Frattaroli  * @duration_ns: Nanoseconds between job IRQ handler entry and exit
56*15bd2f5dSNicolas Frattaroli  *
57*15bd2f5dSNicolas Frattaroli  * The panthor_job_irq_handler() function instrumented by this tracepoint exits
58*15bd2f5dSNicolas Frattaroli  * once it has queued the firmware interrupts for processing, not when the
59*15bd2f5dSNicolas Frattaroli  * firmware interrupts are fully processed. This tracepoint allows for debugging
60*15bd2f5dSNicolas Frattaroli  * issues with delays in the workqueue's processing of events.
61*15bd2f5dSNicolas Frattaroli  */
62*15bd2f5dSNicolas Frattaroli TRACE_EVENT(gpu_job_irq,
63*15bd2f5dSNicolas Frattaroli 	TP_PROTO(const struct device *dev, u32 events, u32 duration_ns),
64*15bd2f5dSNicolas Frattaroli 	TP_ARGS(dev, events, duration_ns),
65*15bd2f5dSNicolas Frattaroli 	TP_STRUCT__entry(
66*15bd2f5dSNicolas Frattaroli 		__string(dev_name, dev_name(dev))
67*15bd2f5dSNicolas Frattaroli 		__field(u32, events)
68*15bd2f5dSNicolas Frattaroli 		__field(u32, duration_ns)
69*15bd2f5dSNicolas Frattaroli 	),
70*15bd2f5dSNicolas Frattaroli 	TP_fast_assign(
71*15bd2f5dSNicolas Frattaroli 		__assign_str(dev_name);
72*15bd2f5dSNicolas Frattaroli 		__entry->events		= events;
73*15bd2f5dSNicolas Frattaroli 		__entry->duration_ns	= duration_ns;
74*15bd2f5dSNicolas Frattaroli 	),
75*15bd2f5dSNicolas Frattaroli 	TP_printk("%s: events=0x%x duration_ns=%d", __get_str(dev_name),
76*15bd2f5dSNicolas Frattaroli 		  __entry->events, __entry->duration_ns)
77*15bd2f5dSNicolas Frattaroli );
78*15bd2f5dSNicolas Frattaroli 
7952ebfd8dSNicolas Frattaroli #endif /* __PANTHOR_TRACE_H__ */
8052ebfd8dSNicolas Frattaroli 
8152ebfd8dSNicolas Frattaroli #undef TRACE_INCLUDE_PATH
8252ebfd8dSNicolas Frattaroli #define TRACE_INCLUDE_PATH .
8352ebfd8dSNicolas Frattaroli #undef TRACE_INCLUDE_FILE
8452ebfd8dSNicolas Frattaroli #define TRACE_INCLUDE_FILE panthor_trace
8552ebfd8dSNicolas Frattaroli 
8652ebfd8dSNicolas Frattaroli #include <trace/define_trace.h>
87