18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: MIT */ 28c2ecf20Sopenharmony_ci#if !defined(_RADEON_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 38c2ecf20Sopenharmony_ci#define _RADEON_TRACE_H_ 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <linux/stringify.h> 68c2ecf20Sopenharmony_ci#include <linux/tracepoint.h> 78c2ecf20Sopenharmony_ci#include <linux/types.h> 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <drm/drm_file.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM 128c2ecf20Sopenharmony_ci#define TRACE_SYSTEM radeon 138c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE radeon_trace 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ciTRACE_EVENT(radeon_bo_create, 168c2ecf20Sopenharmony_ci TP_PROTO(struct radeon_bo *bo), 178c2ecf20Sopenharmony_ci TP_ARGS(bo), 188c2ecf20Sopenharmony_ci TP_STRUCT__entry( 198c2ecf20Sopenharmony_ci __field(struct radeon_bo *, bo) 208c2ecf20Sopenharmony_ci __field(u32, pages) 218c2ecf20Sopenharmony_ci ), 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci TP_fast_assign( 248c2ecf20Sopenharmony_ci __entry->bo = bo; 258c2ecf20Sopenharmony_ci __entry->pages = bo->tbo.num_pages; 268c2ecf20Sopenharmony_ci ), 278c2ecf20Sopenharmony_ci TP_printk("bo=%p, pages=%u", __entry->bo, __entry->pages) 288c2ecf20Sopenharmony_ci); 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ciTRACE_EVENT(radeon_cs, 318c2ecf20Sopenharmony_ci TP_PROTO(struct radeon_cs_parser *p), 328c2ecf20Sopenharmony_ci TP_ARGS(p), 338c2ecf20Sopenharmony_ci TP_STRUCT__entry( 348c2ecf20Sopenharmony_ci __field(u32, ring) 358c2ecf20Sopenharmony_ci __field(u32, dw) 368c2ecf20Sopenharmony_ci __field(u32, fences) 378c2ecf20Sopenharmony_ci ), 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci TP_fast_assign( 408c2ecf20Sopenharmony_ci __entry->ring = p->ring; 418c2ecf20Sopenharmony_ci __entry->dw = p->chunk_ib->length_dw; 428c2ecf20Sopenharmony_ci __entry->fences = radeon_fence_count_emitted( 438c2ecf20Sopenharmony_ci p->rdev, p->ring); 448c2ecf20Sopenharmony_ci ), 458c2ecf20Sopenharmony_ci TP_printk("ring=%u, dw=%u, fences=%u", 468c2ecf20Sopenharmony_ci __entry->ring, __entry->dw, 478c2ecf20Sopenharmony_ci __entry->fences) 488c2ecf20Sopenharmony_ci); 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ciTRACE_EVENT(radeon_vm_grab_id, 518c2ecf20Sopenharmony_ci TP_PROTO(unsigned vmid, int ring), 528c2ecf20Sopenharmony_ci TP_ARGS(vmid, ring), 538c2ecf20Sopenharmony_ci TP_STRUCT__entry( 548c2ecf20Sopenharmony_ci __field(u32, vmid) 558c2ecf20Sopenharmony_ci __field(u32, ring) 568c2ecf20Sopenharmony_ci ), 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci TP_fast_assign( 598c2ecf20Sopenharmony_ci __entry->vmid = vmid; 608c2ecf20Sopenharmony_ci __entry->ring = ring; 618c2ecf20Sopenharmony_ci ), 628c2ecf20Sopenharmony_ci TP_printk("vmid=%u, ring=%u", __entry->vmid, __entry->ring) 638c2ecf20Sopenharmony_ci); 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ciTRACE_EVENT(radeon_vm_bo_update, 668c2ecf20Sopenharmony_ci TP_PROTO(struct radeon_bo_va *bo_va), 678c2ecf20Sopenharmony_ci TP_ARGS(bo_va), 688c2ecf20Sopenharmony_ci TP_STRUCT__entry( 698c2ecf20Sopenharmony_ci __field(u64, soffset) 708c2ecf20Sopenharmony_ci __field(u64, eoffset) 718c2ecf20Sopenharmony_ci __field(u32, flags) 728c2ecf20Sopenharmony_ci ), 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci TP_fast_assign( 758c2ecf20Sopenharmony_ci __entry->soffset = bo_va->it.start; 768c2ecf20Sopenharmony_ci __entry->eoffset = bo_va->it.last + 1; 778c2ecf20Sopenharmony_ci __entry->flags = bo_va->flags; 788c2ecf20Sopenharmony_ci ), 798c2ecf20Sopenharmony_ci TP_printk("soffs=%010llx, eoffs=%010llx, flags=%08x", 808c2ecf20Sopenharmony_ci __entry->soffset, __entry->eoffset, __entry->flags) 818c2ecf20Sopenharmony_ci); 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ciTRACE_EVENT(radeon_vm_set_page, 848c2ecf20Sopenharmony_ci TP_PROTO(uint64_t pe, uint64_t addr, unsigned count, 858c2ecf20Sopenharmony_ci uint32_t incr, uint32_t flags), 868c2ecf20Sopenharmony_ci TP_ARGS(pe, addr, count, incr, flags), 878c2ecf20Sopenharmony_ci TP_STRUCT__entry( 888c2ecf20Sopenharmony_ci __field(u64, pe) 898c2ecf20Sopenharmony_ci __field(u64, addr) 908c2ecf20Sopenharmony_ci __field(u32, count) 918c2ecf20Sopenharmony_ci __field(u32, incr) 928c2ecf20Sopenharmony_ci __field(u32, flags) 938c2ecf20Sopenharmony_ci ), 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_ci TP_fast_assign( 968c2ecf20Sopenharmony_ci __entry->pe = pe; 978c2ecf20Sopenharmony_ci __entry->addr = addr; 988c2ecf20Sopenharmony_ci __entry->count = count; 998c2ecf20Sopenharmony_ci __entry->incr = incr; 1008c2ecf20Sopenharmony_ci __entry->flags = flags; 1018c2ecf20Sopenharmony_ci ), 1028c2ecf20Sopenharmony_ci TP_printk("pe=%010Lx, addr=%010Lx, incr=%u, flags=%08x, count=%u", 1038c2ecf20Sopenharmony_ci __entry->pe, __entry->addr, __entry->incr, 1048c2ecf20Sopenharmony_ci __entry->flags, __entry->count) 1058c2ecf20Sopenharmony_ci); 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ciTRACE_EVENT(radeon_vm_flush, 1088c2ecf20Sopenharmony_ci TP_PROTO(uint64_t pd_addr, unsigned ring, unsigned id), 1098c2ecf20Sopenharmony_ci TP_ARGS(pd_addr, ring, id), 1108c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1118c2ecf20Sopenharmony_ci __field(u64, pd_addr) 1128c2ecf20Sopenharmony_ci __field(u32, ring) 1138c2ecf20Sopenharmony_ci __field(u32, id) 1148c2ecf20Sopenharmony_ci ), 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci TP_fast_assign( 1178c2ecf20Sopenharmony_ci __entry->pd_addr = pd_addr; 1188c2ecf20Sopenharmony_ci __entry->ring = ring; 1198c2ecf20Sopenharmony_ci __entry->id = id; 1208c2ecf20Sopenharmony_ci ), 1218c2ecf20Sopenharmony_ci TP_printk("pd_addr=%010Lx, ring=%u, id=%u", 1228c2ecf20Sopenharmony_ci __entry->pd_addr, __entry->ring, __entry->id) 1238c2ecf20Sopenharmony_ci); 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(radeon_fence_request, 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci TP_PROTO(struct drm_device *dev, int ring, u32 seqno), 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_ci TP_ARGS(dev, ring, seqno), 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1328c2ecf20Sopenharmony_ci __field(u32, dev) 1338c2ecf20Sopenharmony_ci __field(int, ring) 1348c2ecf20Sopenharmony_ci __field(u32, seqno) 1358c2ecf20Sopenharmony_ci ), 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ci TP_fast_assign( 1388c2ecf20Sopenharmony_ci __entry->dev = dev->primary->index; 1398c2ecf20Sopenharmony_ci __entry->ring = ring; 1408c2ecf20Sopenharmony_ci __entry->seqno = seqno; 1418c2ecf20Sopenharmony_ci ), 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci TP_printk("dev=%u, ring=%d, seqno=%u", 1448c2ecf20Sopenharmony_ci __entry->dev, __entry->ring, __entry->seqno) 1458c2ecf20Sopenharmony_ci); 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_ciDEFINE_EVENT(radeon_fence_request, radeon_fence_emit, 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci TP_PROTO(struct drm_device *dev, int ring, u32 seqno), 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_ci TP_ARGS(dev, ring, seqno) 1528c2ecf20Sopenharmony_ci); 1538c2ecf20Sopenharmony_ci 1548c2ecf20Sopenharmony_ciDEFINE_EVENT(radeon_fence_request, radeon_fence_wait_begin, 1558c2ecf20Sopenharmony_ci 1568c2ecf20Sopenharmony_ci TP_PROTO(struct drm_device *dev, int ring, u32 seqno), 1578c2ecf20Sopenharmony_ci 1588c2ecf20Sopenharmony_ci TP_ARGS(dev, ring, seqno) 1598c2ecf20Sopenharmony_ci); 1608c2ecf20Sopenharmony_ci 1618c2ecf20Sopenharmony_ciDEFINE_EVENT(radeon_fence_request, radeon_fence_wait_end, 1628c2ecf20Sopenharmony_ci 1638c2ecf20Sopenharmony_ci TP_PROTO(struct drm_device *dev, int ring, u32 seqno), 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_ci TP_ARGS(dev, ring, seqno) 1668c2ecf20Sopenharmony_ci); 1678c2ecf20Sopenharmony_ci 1688c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(radeon_semaphore_request, 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_ci TP_PROTO(int ring, struct radeon_semaphore *sem), 1718c2ecf20Sopenharmony_ci 1728c2ecf20Sopenharmony_ci TP_ARGS(ring, sem), 1738c2ecf20Sopenharmony_ci 1748c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1758c2ecf20Sopenharmony_ci __field(int, ring) 1768c2ecf20Sopenharmony_ci __field(signed, waiters) 1778c2ecf20Sopenharmony_ci __field(uint64_t, gpu_addr) 1788c2ecf20Sopenharmony_ci ), 1798c2ecf20Sopenharmony_ci 1808c2ecf20Sopenharmony_ci TP_fast_assign( 1818c2ecf20Sopenharmony_ci __entry->ring = ring; 1828c2ecf20Sopenharmony_ci __entry->waiters = sem->waiters; 1838c2ecf20Sopenharmony_ci __entry->gpu_addr = sem->gpu_addr; 1848c2ecf20Sopenharmony_ci ), 1858c2ecf20Sopenharmony_ci 1868c2ecf20Sopenharmony_ci TP_printk("ring=%u, waiters=%d, addr=%010Lx", __entry->ring, 1878c2ecf20Sopenharmony_ci __entry->waiters, __entry->gpu_addr) 1888c2ecf20Sopenharmony_ci); 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_ciDEFINE_EVENT(radeon_semaphore_request, radeon_semaphore_signale, 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci TP_PROTO(int ring, struct radeon_semaphore *sem), 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci TP_ARGS(ring, sem) 1958c2ecf20Sopenharmony_ci); 1968c2ecf20Sopenharmony_ci 1978c2ecf20Sopenharmony_ciDEFINE_EVENT(radeon_semaphore_request, radeon_semaphore_wait, 1988c2ecf20Sopenharmony_ci 1998c2ecf20Sopenharmony_ci TP_PROTO(int ring, struct radeon_semaphore *sem), 2008c2ecf20Sopenharmony_ci 2018c2ecf20Sopenharmony_ci TP_ARGS(ring, sem) 2028c2ecf20Sopenharmony_ci); 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ci#endif 2058c2ecf20Sopenharmony_ci 2068c2ecf20Sopenharmony_ci/* This part must be outside protection */ 2078c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH 2088c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/radeon 2098c2ecf20Sopenharmony_ci#include <trace/define_trace.h> 210