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