18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * Copyright 2017 Advanced Micro Devices, Inc. 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 58c2ecf20Sopenharmony_ci * copy of this software and associated documentation files (the "Software"), 68c2ecf20Sopenharmony_ci * to deal in the Software without restriction, including without limitation 78c2ecf20Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense, 88c2ecf20Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the 98c2ecf20Sopenharmony_ci * Software is furnished to do so, subject to the following conditions: 108c2ecf20Sopenharmony_ci * 118c2ecf20Sopenharmony_ci * The above copyright notice and this permission notice shall be included in 128c2ecf20Sopenharmony_ci * all copies or substantial portions of the Software. 138c2ecf20Sopenharmony_ci * 148c2ecf20Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 158c2ecf20Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 168c2ecf20Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 178c2ecf20Sopenharmony_ci * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 188c2ecf20Sopenharmony_ci * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 198c2ecf20Sopenharmony_ci * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 208c2ecf20Sopenharmony_ci * OTHER DEALINGS IN THE SOFTWARE. 218c2ecf20Sopenharmony_ci * 228c2ecf20Sopenharmony_ci */ 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci#if !defined(_AMDGPU_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 258c2ecf20Sopenharmony_ci#define _AMDGPU_TRACE_H_ 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci#include <linux/stringify.h> 288c2ecf20Sopenharmony_ci#include <linux/types.h> 298c2ecf20Sopenharmony_ci#include <linux/tracepoint.h> 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM 328c2ecf20Sopenharmony_ci#define TRACE_SYSTEM amdgpu 338c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE amdgpu_trace 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci#define AMDGPU_JOB_GET_TIMELINE_NAME(job) \ 368c2ecf20Sopenharmony_ci job->base.s_fence->finished.ops->get_timeline_name(&job->base.s_fence->finished) 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_device_rreg, 398c2ecf20Sopenharmony_ci TP_PROTO(unsigned did, uint32_t reg, uint32_t value), 408c2ecf20Sopenharmony_ci TP_ARGS(did, reg, value), 418c2ecf20Sopenharmony_ci TP_STRUCT__entry( 428c2ecf20Sopenharmony_ci __field(unsigned, did) 438c2ecf20Sopenharmony_ci __field(uint32_t, reg) 448c2ecf20Sopenharmony_ci __field(uint32_t, value) 458c2ecf20Sopenharmony_ci ), 468c2ecf20Sopenharmony_ci TP_fast_assign( 478c2ecf20Sopenharmony_ci __entry->did = did; 488c2ecf20Sopenharmony_ci __entry->reg = reg; 498c2ecf20Sopenharmony_ci __entry->value = value; 508c2ecf20Sopenharmony_ci ), 518c2ecf20Sopenharmony_ci TP_printk("0x%04lx, 0x%08lx, 0x%08lx", 528c2ecf20Sopenharmony_ci (unsigned long)__entry->did, 538c2ecf20Sopenharmony_ci (unsigned long)__entry->reg, 548c2ecf20Sopenharmony_ci (unsigned long)__entry->value) 558c2ecf20Sopenharmony_ci); 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_device_wreg, 588c2ecf20Sopenharmony_ci TP_PROTO(unsigned did, uint32_t reg, uint32_t value), 598c2ecf20Sopenharmony_ci TP_ARGS(did, reg, value), 608c2ecf20Sopenharmony_ci TP_STRUCT__entry( 618c2ecf20Sopenharmony_ci __field(unsigned, did) 628c2ecf20Sopenharmony_ci __field(uint32_t, reg) 638c2ecf20Sopenharmony_ci __field(uint32_t, value) 648c2ecf20Sopenharmony_ci ), 658c2ecf20Sopenharmony_ci TP_fast_assign( 668c2ecf20Sopenharmony_ci __entry->did = did; 678c2ecf20Sopenharmony_ci __entry->reg = reg; 688c2ecf20Sopenharmony_ci __entry->value = value; 698c2ecf20Sopenharmony_ci ), 708c2ecf20Sopenharmony_ci TP_printk("0x%04lx, 0x%08lx, 0x%08lx", 718c2ecf20Sopenharmony_ci (unsigned long)__entry->did, 728c2ecf20Sopenharmony_ci (unsigned long)__entry->reg, 738c2ecf20Sopenharmony_ci (unsigned long)__entry->value) 748c2ecf20Sopenharmony_ci); 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_iv, 778c2ecf20Sopenharmony_ci TP_PROTO(unsigned ih, struct amdgpu_iv_entry *iv), 788c2ecf20Sopenharmony_ci TP_ARGS(ih, iv), 798c2ecf20Sopenharmony_ci TP_STRUCT__entry( 808c2ecf20Sopenharmony_ci __field(unsigned, ih) 818c2ecf20Sopenharmony_ci __field(unsigned, client_id) 828c2ecf20Sopenharmony_ci __field(unsigned, src_id) 838c2ecf20Sopenharmony_ci __field(unsigned, ring_id) 848c2ecf20Sopenharmony_ci __field(unsigned, vmid) 858c2ecf20Sopenharmony_ci __field(unsigned, vmid_src) 868c2ecf20Sopenharmony_ci __field(uint64_t, timestamp) 878c2ecf20Sopenharmony_ci __field(unsigned, timestamp_src) 888c2ecf20Sopenharmony_ci __field(unsigned, pasid) 898c2ecf20Sopenharmony_ci __array(unsigned, src_data, 4) 908c2ecf20Sopenharmony_ci ), 918c2ecf20Sopenharmony_ci TP_fast_assign( 928c2ecf20Sopenharmony_ci __entry->ih = ih; 938c2ecf20Sopenharmony_ci __entry->client_id = iv->client_id; 948c2ecf20Sopenharmony_ci __entry->src_id = iv->src_id; 958c2ecf20Sopenharmony_ci __entry->ring_id = iv->ring_id; 968c2ecf20Sopenharmony_ci __entry->vmid = iv->vmid; 978c2ecf20Sopenharmony_ci __entry->vmid_src = iv->vmid_src; 988c2ecf20Sopenharmony_ci __entry->timestamp = iv->timestamp; 998c2ecf20Sopenharmony_ci __entry->timestamp_src = iv->timestamp_src; 1008c2ecf20Sopenharmony_ci __entry->pasid = iv->pasid; 1018c2ecf20Sopenharmony_ci __entry->src_data[0] = iv->src_data[0]; 1028c2ecf20Sopenharmony_ci __entry->src_data[1] = iv->src_data[1]; 1038c2ecf20Sopenharmony_ci __entry->src_data[2] = iv->src_data[2]; 1048c2ecf20Sopenharmony_ci __entry->src_data[3] = iv->src_data[3]; 1058c2ecf20Sopenharmony_ci ), 1068c2ecf20Sopenharmony_ci TP_printk("ih:%u client_id:%u src_id:%u ring:%u vmid:%u " 1078c2ecf20Sopenharmony_ci "timestamp: %llu pasid:%u src_data: %08x %08x %08x %08x", 1088c2ecf20Sopenharmony_ci __entry->ih, __entry->client_id, __entry->src_id, 1098c2ecf20Sopenharmony_ci __entry->ring_id, __entry->vmid, 1108c2ecf20Sopenharmony_ci __entry->timestamp, __entry->pasid, 1118c2ecf20Sopenharmony_ci __entry->src_data[0], __entry->src_data[1], 1128c2ecf20Sopenharmony_ci __entry->src_data[2], __entry->src_data[3]) 1138c2ecf20Sopenharmony_ci); 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_bo_create, 1178c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_bo *bo), 1188c2ecf20Sopenharmony_ci TP_ARGS(bo), 1198c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1208c2ecf20Sopenharmony_ci __field(struct amdgpu_bo *, bo) 1218c2ecf20Sopenharmony_ci __field(u32, pages) 1228c2ecf20Sopenharmony_ci __field(u32, type) 1238c2ecf20Sopenharmony_ci __field(u32, prefer) 1248c2ecf20Sopenharmony_ci __field(u32, allow) 1258c2ecf20Sopenharmony_ci __field(u32, visible) 1268c2ecf20Sopenharmony_ci ), 1278c2ecf20Sopenharmony_ci 1288c2ecf20Sopenharmony_ci TP_fast_assign( 1298c2ecf20Sopenharmony_ci __entry->bo = bo; 1308c2ecf20Sopenharmony_ci __entry->pages = bo->tbo.num_pages; 1318c2ecf20Sopenharmony_ci __entry->type = bo->tbo.mem.mem_type; 1328c2ecf20Sopenharmony_ci __entry->prefer = bo->preferred_domains; 1338c2ecf20Sopenharmony_ci __entry->allow = bo->allowed_domains; 1348c2ecf20Sopenharmony_ci __entry->visible = bo->flags; 1358c2ecf20Sopenharmony_ci ), 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ci TP_printk("bo=%p, pages=%u, type=%d, preferred=%d, allowed=%d, visible=%d", 1388c2ecf20Sopenharmony_ci __entry->bo, __entry->pages, __entry->type, 1398c2ecf20Sopenharmony_ci __entry->prefer, __entry->allow, __entry->visible) 1408c2ecf20Sopenharmony_ci); 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_cs, 1438c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_cs_parser *p, int i), 1448c2ecf20Sopenharmony_ci TP_ARGS(p, i), 1458c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1468c2ecf20Sopenharmony_ci __field(struct amdgpu_bo_list *, bo_list) 1478c2ecf20Sopenharmony_ci __field(u32, ring) 1488c2ecf20Sopenharmony_ci __field(u32, dw) 1498c2ecf20Sopenharmony_ci __field(u32, fences) 1508c2ecf20Sopenharmony_ci ), 1518c2ecf20Sopenharmony_ci 1528c2ecf20Sopenharmony_ci TP_fast_assign( 1538c2ecf20Sopenharmony_ci __entry->bo_list = p->bo_list; 1548c2ecf20Sopenharmony_ci __entry->ring = to_amdgpu_ring(p->entity->rq->sched)->idx; 1558c2ecf20Sopenharmony_ci __entry->dw = p->job->ibs[i].length_dw; 1568c2ecf20Sopenharmony_ci __entry->fences = amdgpu_fence_count_emitted( 1578c2ecf20Sopenharmony_ci to_amdgpu_ring(p->entity->rq->sched)); 1588c2ecf20Sopenharmony_ci ), 1598c2ecf20Sopenharmony_ci TP_printk("bo_list=%p, ring=%u, dw=%u, fences=%u", 1608c2ecf20Sopenharmony_ci __entry->bo_list, __entry->ring, __entry->dw, 1618c2ecf20Sopenharmony_ci __entry->fences) 1628c2ecf20Sopenharmony_ci); 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_cs_ioctl, 1658c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_job *job), 1668c2ecf20Sopenharmony_ci TP_ARGS(job), 1678c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1688c2ecf20Sopenharmony_ci __field(uint64_t, sched_job_id) 1698c2ecf20Sopenharmony_ci __string(timeline, AMDGPU_JOB_GET_TIMELINE_NAME(job)) 1708c2ecf20Sopenharmony_ci __field(unsigned int, context) 1718c2ecf20Sopenharmony_ci __field(unsigned int, seqno) 1728c2ecf20Sopenharmony_ci __field(struct dma_fence *, fence) 1738c2ecf20Sopenharmony_ci __string(ring, to_amdgpu_ring(job->base.sched)->name) 1748c2ecf20Sopenharmony_ci __field(u32, num_ibs) 1758c2ecf20Sopenharmony_ci ), 1768c2ecf20Sopenharmony_ci 1778c2ecf20Sopenharmony_ci TP_fast_assign( 1788c2ecf20Sopenharmony_ci __entry->sched_job_id = job->base.id; 1798c2ecf20Sopenharmony_ci __assign_str(timeline, AMDGPU_JOB_GET_TIMELINE_NAME(job)) 1808c2ecf20Sopenharmony_ci __entry->context = job->base.s_fence->finished.context; 1818c2ecf20Sopenharmony_ci __entry->seqno = job->base.s_fence->finished.seqno; 1828c2ecf20Sopenharmony_ci __assign_str(ring, to_amdgpu_ring(job->base.sched)->name) 1838c2ecf20Sopenharmony_ci __entry->num_ibs = job->num_ibs; 1848c2ecf20Sopenharmony_ci ), 1858c2ecf20Sopenharmony_ci TP_printk("sched_job=%llu, timeline=%s, context=%u, seqno=%u, ring_name=%s, num_ibs=%u", 1868c2ecf20Sopenharmony_ci __entry->sched_job_id, __get_str(timeline), __entry->context, 1878c2ecf20Sopenharmony_ci __entry->seqno, __get_str(ring), __entry->num_ibs) 1888c2ecf20Sopenharmony_ci); 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_sched_run_job, 1918c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_job *job), 1928c2ecf20Sopenharmony_ci TP_ARGS(job), 1938c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1948c2ecf20Sopenharmony_ci __field(uint64_t, sched_job_id) 1958c2ecf20Sopenharmony_ci __string(timeline, AMDGPU_JOB_GET_TIMELINE_NAME(job)) 1968c2ecf20Sopenharmony_ci __field(unsigned int, context) 1978c2ecf20Sopenharmony_ci __field(unsigned int, seqno) 1988c2ecf20Sopenharmony_ci __string(ring, to_amdgpu_ring(job->base.sched)->name) 1998c2ecf20Sopenharmony_ci __field(u32, num_ibs) 2008c2ecf20Sopenharmony_ci ), 2018c2ecf20Sopenharmony_ci 2028c2ecf20Sopenharmony_ci TP_fast_assign( 2038c2ecf20Sopenharmony_ci __entry->sched_job_id = job->base.id; 2048c2ecf20Sopenharmony_ci __assign_str(timeline, AMDGPU_JOB_GET_TIMELINE_NAME(job)) 2058c2ecf20Sopenharmony_ci __entry->context = job->base.s_fence->finished.context; 2068c2ecf20Sopenharmony_ci __entry->seqno = job->base.s_fence->finished.seqno; 2078c2ecf20Sopenharmony_ci __assign_str(ring, to_amdgpu_ring(job->base.sched)->name) 2088c2ecf20Sopenharmony_ci __entry->num_ibs = job->num_ibs; 2098c2ecf20Sopenharmony_ci ), 2108c2ecf20Sopenharmony_ci TP_printk("sched_job=%llu, timeline=%s, context=%u, seqno=%u, ring_name=%s, num_ibs=%u", 2118c2ecf20Sopenharmony_ci __entry->sched_job_id, __get_str(timeline), __entry->context, 2128c2ecf20Sopenharmony_ci __entry->seqno, __get_str(ring), __entry->num_ibs) 2138c2ecf20Sopenharmony_ci); 2148c2ecf20Sopenharmony_ci 2158c2ecf20Sopenharmony_ci 2168c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_vm_grab_id, 2178c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_vm *vm, struct amdgpu_ring *ring, 2188c2ecf20Sopenharmony_ci struct amdgpu_job *job), 2198c2ecf20Sopenharmony_ci TP_ARGS(vm, ring, job), 2208c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2218c2ecf20Sopenharmony_ci __field(u32, pasid) 2228c2ecf20Sopenharmony_ci __string(ring, ring->name) 2238c2ecf20Sopenharmony_ci __field(u32, ring) 2248c2ecf20Sopenharmony_ci __field(u32, vmid) 2258c2ecf20Sopenharmony_ci __field(u32, vm_hub) 2268c2ecf20Sopenharmony_ci __field(u64, pd_addr) 2278c2ecf20Sopenharmony_ci __field(u32, needs_flush) 2288c2ecf20Sopenharmony_ci ), 2298c2ecf20Sopenharmony_ci 2308c2ecf20Sopenharmony_ci TP_fast_assign( 2318c2ecf20Sopenharmony_ci __entry->pasid = vm->pasid; 2328c2ecf20Sopenharmony_ci __assign_str(ring, ring->name) 2338c2ecf20Sopenharmony_ci __entry->vmid = job->vmid; 2348c2ecf20Sopenharmony_ci __entry->vm_hub = ring->funcs->vmhub, 2358c2ecf20Sopenharmony_ci __entry->pd_addr = job->vm_pd_addr; 2368c2ecf20Sopenharmony_ci __entry->needs_flush = job->vm_needs_flush; 2378c2ecf20Sopenharmony_ci ), 2388c2ecf20Sopenharmony_ci TP_printk("pasid=%d, ring=%s, id=%u, hub=%u, pd_addr=%010Lx needs_flush=%u", 2398c2ecf20Sopenharmony_ci __entry->pasid, __get_str(ring), __entry->vmid, 2408c2ecf20Sopenharmony_ci __entry->vm_hub, __entry->pd_addr, __entry->needs_flush) 2418c2ecf20Sopenharmony_ci); 2428c2ecf20Sopenharmony_ci 2438c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_vm_bo_map, 2448c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_bo_va *bo_va, 2458c2ecf20Sopenharmony_ci struct amdgpu_bo_va_mapping *mapping), 2468c2ecf20Sopenharmony_ci TP_ARGS(bo_va, mapping), 2478c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2488c2ecf20Sopenharmony_ci __field(struct amdgpu_bo *, bo) 2498c2ecf20Sopenharmony_ci __field(long, start) 2508c2ecf20Sopenharmony_ci __field(long, last) 2518c2ecf20Sopenharmony_ci __field(u64, offset) 2528c2ecf20Sopenharmony_ci __field(u64, flags) 2538c2ecf20Sopenharmony_ci ), 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_ci TP_fast_assign( 2568c2ecf20Sopenharmony_ci __entry->bo = bo_va ? bo_va->base.bo : NULL; 2578c2ecf20Sopenharmony_ci __entry->start = mapping->start; 2588c2ecf20Sopenharmony_ci __entry->last = mapping->last; 2598c2ecf20Sopenharmony_ci __entry->offset = mapping->offset; 2608c2ecf20Sopenharmony_ci __entry->flags = mapping->flags; 2618c2ecf20Sopenharmony_ci ), 2628c2ecf20Sopenharmony_ci TP_printk("bo=%p, start=%lx, last=%lx, offset=%010llx, flags=%llx", 2638c2ecf20Sopenharmony_ci __entry->bo, __entry->start, __entry->last, 2648c2ecf20Sopenharmony_ci __entry->offset, __entry->flags) 2658c2ecf20Sopenharmony_ci); 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_vm_bo_unmap, 2688c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_bo_va *bo_va, 2698c2ecf20Sopenharmony_ci struct amdgpu_bo_va_mapping *mapping), 2708c2ecf20Sopenharmony_ci TP_ARGS(bo_va, mapping), 2718c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2728c2ecf20Sopenharmony_ci __field(struct amdgpu_bo *, bo) 2738c2ecf20Sopenharmony_ci __field(long, start) 2748c2ecf20Sopenharmony_ci __field(long, last) 2758c2ecf20Sopenharmony_ci __field(u64, offset) 2768c2ecf20Sopenharmony_ci __field(u64, flags) 2778c2ecf20Sopenharmony_ci ), 2788c2ecf20Sopenharmony_ci 2798c2ecf20Sopenharmony_ci TP_fast_assign( 2808c2ecf20Sopenharmony_ci __entry->bo = bo_va ? bo_va->base.bo : NULL; 2818c2ecf20Sopenharmony_ci __entry->start = mapping->start; 2828c2ecf20Sopenharmony_ci __entry->last = mapping->last; 2838c2ecf20Sopenharmony_ci __entry->offset = mapping->offset; 2848c2ecf20Sopenharmony_ci __entry->flags = mapping->flags; 2858c2ecf20Sopenharmony_ci ), 2868c2ecf20Sopenharmony_ci TP_printk("bo=%p, start=%lx, last=%lx, offset=%010llx, flags=%llx", 2878c2ecf20Sopenharmony_ci __entry->bo, __entry->start, __entry->last, 2888c2ecf20Sopenharmony_ci __entry->offset, __entry->flags) 2898c2ecf20Sopenharmony_ci); 2908c2ecf20Sopenharmony_ci 2918c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(amdgpu_vm_mapping, 2928c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_bo_va_mapping *mapping), 2938c2ecf20Sopenharmony_ci TP_ARGS(mapping), 2948c2ecf20Sopenharmony_ci TP_STRUCT__entry( 2958c2ecf20Sopenharmony_ci __field(u64, soffset) 2968c2ecf20Sopenharmony_ci __field(u64, eoffset) 2978c2ecf20Sopenharmony_ci __field(u64, flags) 2988c2ecf20Sopenharmony_ci ), 2998c2ecf20Sopenharmony_ci 3008c2ecf20Sopenharmony_ci TP_fast_assign( 3018c2ecf20Sopenharmony_ci __entry->soffset = mapping->start; 3028c2ecf20Sopenharmony_ci __entry->eoffset = mapping->last + 1; 3038c2ecf20Sopenharmony_ci __entry->flags = mapping->flags; 3048c2ecf20Sopenharmony_ci ), 3058c2ecf20Sopenharmony_ci TP_printk("soffs=%010llx, eoffs=%010llx, flags=%llx", 3068c2ecf20Sopenharmony_ci __entry->soffset, __entry->eoffset, __entry->flags) 3078c2ecf20Sopenharmony_ci); 3088c2ecf20Sopenharmony_ci 3098c2ecf20Sopenharmony_ciDEFINE_EVENT(amdgpu_vm_mapping, amdgpu_vm_bo_update, 3108c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_bo_va_mapping *mapping), 3118c2ecf20Sopenharmony_ci TP_ARGS(mapping) 3128c2ecf20Sopenharmony_ci); 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_ciDEFINE_EVENT(amdgpu_vm_mapping, amdgpu_vm_bo_mapping, 3158c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_bo_va_mapping *mapping), 3168c2ecf20Sopenharmony_ci TP_ARGS(mapping) 3178c2ecf20Sopenharmony_ci); 3188c2ecf20Sopenharmony_ci 3198c2ecf20Sopenharmony_ciDEFINE_EVENT(amdgpu_vm_mapping, amdgpu_vm_bo_cs, 3208c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_bo_va_mapping *mapping), 3218c2ecf20Sopenharmony_ci TP_ARGS(mapping) 3228c2ecf20Sopenharmony_ci); 3238c2ecf20Sopenharmony_ci 3248c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_vm_update_ptes, 3258c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_vm_update_params *p, 3268c2ecf20Sopenharmony_ci uint64_t start, uint64_t end, 3278c2ecf20Sopenharmony_ci unsigned int nptes, uint64_t dst, 3288c2ecf20Sopenharmony_ci uint64_t incr, uint64_t flags, 3298c2ecf20Sopenharmony_ci pid_t pid, uint64_t vm_ctx), 3308c2ecf20Sopenharmony_ci TP_ARGS(p, start, end, nptes, dst, incr, flags, pid, vm_ctx), 3318c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3328c2ecf20Sopenharmony_ci __field(u64, start) 3338c2ecf20Sopenharmony_ci __field(u64, end) 3348c2ecf20Sopenharmony_ci __field(u64, flags) 3358c2ecf20Sopenharmony_ci __field(unsigned int, nptes) 3368c2ecf20Sopenharmony_ci __field(u64, incr) 3378c2ecf20Sopenharmony_ci __field(pid_t, pid) 3388c2ecf20Sopenharmony_ci __field(u64, vm_ctx) 3398c2ecf20Sopenharmony_ci __dynamic_array(u64, dst, nptes) 3408c2ecf20Sopenharmony_ci ), 3418c2ecf20Sopenharmony_ci 3428c2ecf20Sopenharmony_ci TP_fast_assign( 3438c2ecf20Sopenharmony_ci unsigned int i; 3448c2ecf20Sopenharmony_ci 3458c2ecf20Sopenharmony_ci __entry->start = start; 3468c2ecf20Sopenharmony_ci __entry->end = end; 3478c2ecf20Sopenharmony_ci __entry->flags = flags; 3488c2ecf20Sopenharmony_ci __entry->incr = incr; 3498c2ecf20Sopenharmony_ci __entry->nptes = nptes; 3508c2ecf20Sopenharmony_ci __entry->pid = pid; 3518c2ecf20Sopenharmony_ci __entry->vm_ctx = vm_ctx; 3528c2ecf20Sopenharmony_ci for (i = 0; i < nptes; ++i) { 3538c2ecf20Sopenharmony_ci u64 addr = p->pages_addr ? amdgpu_vm_map_gart( 3548c2ecf20Sopenharmony_ci p->pages_addr, dst) : dst; 3558c2ecf20Sopenharmony_ci 3568c2ecf20Sopenharmony_ci ((u64 *)__get_dynamic_array(dst))[i] = addr; 3578c2ecf20Sopenharmony_ci dst += incr; 3588c2ecf20Sopenharmony_ci } 3598c2ecf20Sopenharmony_ci ), 3608c2ecf20Sopenharmony_ci TP_printk("pid:%u vm_ctx:0x%llx start:0x%010llx end:0x%010llx," 3618c2ecf20Sopenharmony_ci " flags:0x%llx, incr:%llu, dst:\n%s", __entry->pid, 3628c2ecf20Sopenharmony_ci __entry->vm_ctx, __entry->start, __entry->end, 3638c2ecf20Sopenharmony_ci __entry->flags, __entry->incr, __print_array( 3648c2ecf20Sopenharmony_ci __get_dynamic_array(dst), __entry->nptes, 8)) 3658c2ecf20Sopenharmony_ci); 3668c2ecf20Sopenharmony_ci 3678c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_vm_set_ptes, 3688c2ecf20Sopenharmony_ci TP_PROTO(uint64_t pe, uint64_t addr, unsigned count, 3698c2ecf20Sopenharmony_ci uint32_t incr, uint64_t flags, bool direct), 3708c2ecf20Sopenharmony_ci TP_ARGS(pe, addr, count, incr, flags, direct), 3718c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3728c2ecf20Sopenharmony_ci __field(u64, pe) 3738c2ecf20Sopenharmony_ci __field(u64, addr) 3748c2ecf20Sopenharmony_ci __field(u32, count) 3758c2ecf20Sopenharmony_ci __field(u32, incr) 3768c2ecf20Sopenharmony_ci __field(u64, flags) 3778c2ecf20Sopenharmony_ci __field(bool, direct) 3788c2ecf20Sopenharmony_ci ), 3798c2ecf20Sopenharmony_ci 3808c2ecf20Sopenharmony_ci TP_fast_assign( 3818c2ecf20Sopenharmony_ci __entry->pe = pe; 3828c2ecf20Sopenharmony_ci __entry->addr = addr; 3838c2ecf20Sopenharmony_ci __entry->count = count; 3848c2ecf20Sopenharmony_ci __entry->incr = incr; 3858c2ecf20Sopenharmony_ci __entry->flags = flags; 3868c2ecf20Sopenharmony_ci __entry->direct = direct; 3878c2ecf20Sopenharmony_ci ), 3888c2ecf20Sopenharmony_ci TP_printk("pe=%010Lx, addr=%010Lx, incr=%u, flags=%llx, count=%u, " 3898c2ecf20Sopenharmony_ci "direct=%d", __entry->pe, __entry->addr, __entry->incr, 3908c2ecf20Sopenharmony_ci __entry->flags, __entry->count, __entry->direct) 3918c2ecf20Sopenharmony_ci); 3928c2ecf20Sopenharmony_ci 3938c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_vm_copy_ptes, 3948c2ecf20Sopenharmony_ci TP_PROTO(uint64_t pe, uint64_t src, unsigned count, bool direct), 3958c2ecf20Sopenharmony_ci TP_ARGS(pe, src, count, direct), 3968c2ecf20Sopenharmony_ci TP_STRUCT__entry( 3978c2ecf20Sopenharmony_ci __field(u64, pe) 3988c2ecf20Sopenharmony_ci __field(u64, src) 3998c2ecf20Sopenharmony_ci __field(u32, count) 4008c2ecf20Sopenharmony_ci __field(bool, direct) 4018c2ecf20Sopenharmony_ci ), 4028c2ecf20Sopenharmony_ci 4038c2ecf20Sopenharmony_ci TP_fast_assign( 4048c2ecf20Sopenharmony_ci __entry->pe = pe; 4058c2ecf20Sopenharmony_ci __entry->src = src; 4068c2ecf20Sopenharmony_ci __entry->count = count; 4078c2ecf20Sopenharmony_ci __entry->direct = direct; 4088c2ecf20Sopenharmony_ci ), 4098c2ecf20Sopenharmony_ci TP_printk("pe=%010Lx, src=%010Lx, count=%u, direct=%d", 4108c2ecf20Sopenharmony_ci __entry->pe, __entry->src, __entry->count, 4118c2ecf20Sopenharmony_ci __entry->direct) 4128c2ecf20Sopenharmony_ci); 4138c2ecf20Sopenharmony_ci 4148c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_vm_flush, 4158c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_ring *ring, unsigned vmid, 4168c2ecf20Sopenharmony_ci uint64_t pd_addr), 4178c2ecf20Sopenharmony_ci TP_ARGS(ring, vmid, pd_addr), 4188c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4198c2ecf20Sopenharmony_ci __string(ring, ring->name) 4208c2ecf20Sopenharmony_ci __field(u32, vmid) 4218c2ecf20Sopenharmony_ci __field(u32, vm_hub) 4228c2ecf20Sopenharmony_ci __field(u64, pd_addr) 4238c2ecf20Sopenharmony_ci ), 4248c2ecf20Sopenharmony_ci 4258c2ecf20Sopenharmony_ci TP_fast_assign( 4268c2ecf20Sopenharmony_ci __assign_str(ring, ring->name) 4278c2ecf20Sopenharmony_ci __entry->vmid = vmid; 4288c2ecf20Sopenharmony_ci __entry->vm_hub = ring->funcs->vmhub; 4298c2ecf20Sopenharmony_ci __entry->pd_addr = pd_addr; 4308c2ecf20Sopenharmony_ci ), 4318c2ecf20Sopenharmony_ci TP_printk("ring=%s, id=%u, hub=%u, pd_addr=%010Lx", 4328c2ecf20Sopenharmony_ci __get_str(ring), __entry->vmid, 4338c2ecf20Sopenharmony_ci __entry->vm_hub,__entry->pd_addr) 4348c2ecf20Sopenharmony_ci); 4358c2ecf20Sopenharmony_ci 4368c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(amdgpu_pasid, 4378c2ecf20Sopenharmony_ci TP_PROTO(unsigned pasid), 4388c2ecf20Sopenharmony_ci TP_ARGS(pasid), 4398c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4408c2ecf20Sopenharmony_ci __field(unsigned, pasid) 4418c2ecf20Sopenharmony_ci ), 4428c2ecf20Sopenharmony_ci TP_fast_assign( 4438c2ecf20Sopenharmony_ci __entry->pasid = pasid; 4448c2ecf20Sopenharmony_ci ), 4458c2ecf20Sopenharmony_ci TP_printk("pasid=%u", __entry->pasid) 4468c2ecf20Sopenharmony_ci); 4478c2ecf20Sopenharmony_ci 4488c2ecf20Sopenharmony_ciDEFINE_EVENT(amdgpu_pasid, amdgpu_pasid_allocated, 4498c2ecf20Sopenharmony_ci TP_PROTO(unsigned pasid), 4508c2ecf20Sopenharmony_ci TP_ARGS(pasid) 4518c2ecf20Sopenharmony_ci); 4528c2ecf20Sopenharmony_ci 4538c2ecf20Sopenharmony_ciDEFINE_EVENT(amdgpu_pasid, amdgpu_pasid_freed, 4548c2ecf20Sopenharmony_ci TP_PROTO(unsigned pasid), 4558c2ecf20Sopenharmony_ci TP_ARGS(pasid) 4568c2ecf20Sopenharmony_ci); 4578c2ecf20Sopenharmony_ci 4588c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_bo_list_set, 4598c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_bo_list *list, struct amdgpu_bo *bo), 4608c2ecf20Sopenharmony_ci TP_ARGS(list, bo), 4618c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4628c2ecf20Sopenharmony_ci __field(struct amdgpu_bo_list *, list) 4638c2ecf20Sopenharmony_ci __field(struct amdgpu_bo *, bo) 4648c2ecf20Sopenharmony_ci __field(u64, bo_size) 4658c2ecf20Sopenharmony_ci ), 4668c2ecf20Sopenharmony_ci 4678c2ecf20Sopenharmony_ci TP_fast_assign( 4688c2ecf20Sopenharmony_ci __entry->list = list; 4698c2ecf20Sopenharmony_ci __entry->bo = bo; 4708c2ecf20Sopenharmony_ci __entry->bo_size = amdgpu_bo_size(bo); 4718c2ecf20Sopenharmony_ci ), 4728c2ecf20Sopenharmony_ci TP_printk("list=%p, bo=%p, bo_size=%Ld", 4738c2ecf20Sopenharmony_ci __entry->list, 4748c2ecf20Sopenharmony_ci __entry->bo, 4758c2ecf20Sopenharmony_ci __entry->bo_size) 4768c2ecf20Sopenharmony_ci); 4778c2ecf20Sopenharmony_ci 4788c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_cs_bo_status, 4798c2ecf20Sopenharmony_ci TP_PROTO(uint64_t total_bo, uint64_t total_size), 4808c2ecf20Sopenharmony_ci TP_ARGS(total_bo, total_size), 4818c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4828c2ecf20Sopenharmony_ci __field(u64, total_bo) 4838c2ecf20Sopenharmony_ci __field(u64, total_size) 4848c2ecf20Sopenharmony_ci ), 4858c2ecf20Sopenharmony_ci 4868c2ecf20Sopenharmony_ci TP_fast_assign( 4878c2ecf20Sopenharmony_ci __entry->total_bo = total_bo; 4888c2ecf20Sopenharmony_ci __entry->total_size = total_size; 4898c2ecf20Sopenharmony_ci ), 4908c2ecf20Sopenharmony_ci TP_printk("total_bo_size=%Ld, total_bo_count=%Ld", 4918c2ecf20Sopenharmony_ci __entry->total_bo, __entry->total_size) 4928c2ecf20Sopenharmony_ci); 4938c2ecf20Sopenharmony_ci 4948c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_bo_move, 4958c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_bo* bo, uint32_t new_placement, uint32_t old_placement), 4968c2ecf20Sopenharmony_ci TP_ARGS(bo, new_placement, old_placement), 4978c2ecf20Sopenharmony_ci TP_STRUCT__entry( 4988c2ecf20Sopenharmony_ci __field(struct amdgpu_bo *, bo) 4998c2ecf20Sopenharmony_ci __field(u64, bo_size) 5008c2ecf20Sopenharmony_ci __field(u32, new_placement) 5018c2ecf20Sopenharmony_ci __field(u32, old_placement) 5028c2ecf20Sopenharmony_ci ), 5038c2ecf20Sopenharmony_ci 5048c2ecf20Sopenharmony_ci TP_fast_assign( 5058c2ecf20Sopenharmony_ci __entry->bo = bo; 5068c2ecf20Sopenharmony_ci __entry->bo_size = amdgpu_bo_size(bo); 5078c2ecf20Sopenharmony_ci __entry->new_placement = new_placement; 5088c2ecf20Sopenharmony_ci __entry->old_placement = old_placement; 5098c2ecf20Sopenharmony_ci ), 5108c2ecf20Sopenharmony_ci TP_printk("bo=%p, from=%d, to=%d, size=%Ld", 5118c2ecf20Sopenharmony_ci __entry->bo, __entry->old_placement, 5128c2ecf20Sopenharmony_ci __entry->new_placement, __entry->bo_size) 5138c2ecf20Sopenharmony_ci); 5148c2ecf20Sopenharmony_ci 5158c2ecf20Sopenharmony_ciTRACE_EVENT(amdgpu_ib_pipe_sync, 5168c2ecf20Sopenharmony_ci TP_PROTO(struct amdgpu_job *sched_job, struct dma_fence *fence), 5178c2ecf20Sopenharmony_ci TP_ARGS(sched_job, fence), 5188c2ecf20Sopenharmony_ci TP_STRUCT__entry( 5198c2ecf20Sopenharmony_ci __string(ring, sched_job->base.sched->name) 5208c2ecf20Sopenharmony_ci __field(uint64_t, id) 5218c2ecf20Sopenharmony_ci __field(struct dma_fence *, fence) 5228c2ecf20Sopenharmony_ci __field(uint64_t, ctx) 5238c2ecf20Sopenharmony_ci __field(unsigned, seqno) 5248c2ecf20Sopenharmony_ci ), 5258c2ecf20Sopenharmony_ci 5268c2ecf20Sopenharmony_ci TP_fast_assign( 5278c2ecf20Sopenharmony_ci __assign_str(ring, sched_job->base.sched->name) 5288c2ecf20Sopenharmony_ci __entry->id = sched_job->base.id; 5298c2ecf20Sopenharmony_ci __entry->fence = fence; 5308c2ecf20Sopenharmony_ci __entry->ctx = fence->context; 5318c2ecf20Sopenharmony_ci __entry->seqno = fence->seqno; 5328c2ecf20Sopenharmony_ci ), 5338c2ecf20Sopenharmony_ci TP_printk("job ring=%s, id=%llu, need pipe sync to fence=%p, context=%llu, seq=%u", 5348c2ecf20Sopenharmony_ci __get_str(ring), __entry->id, 5358c2ecf20Sopenharmony_ci __entry->fence, __entry->ctx, 5368c2ecf20Sopenharmony_ci __entry->seqno) 5378c2ecf20Sopenharmony_ci); 5388c2ecf20Sopenharmony_ci 5398c2ecf20Sopenharmony_ci#undef AMDGPU_JOB_GET_TIMELINE_NAME 5408c2ecf20Sopenharmony_ci#endif 5418c2ecf20Sopenharmony_ci 5428c2ecf20Sopenharmony_ci/* This part must be outside protection */ 5438c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH 5448c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/amd/amdgpu 5458c2ecf20Sopenharmony_ci#include <trace/define_trace.h> 546