Home | History | Annotate | Line # | Download | only in include
i915_trace.h revision 1.3.28.1
      1 /*	$NetBSD: i915_trace.h,v 1.3.28.1 2018/09/06 06:56:36 pgoyette Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 2013 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Taylor R. Campbell.
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  * POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 #ifndef _I915_TRACE_H_
     33 #define _I915_TRACE_H_
     34 
     35 #include <sys/types.h>
     36 #include <sys/sdt.h>
     37 
     38 #include "intel_drv.h"
     39 
     40 /* Must come last.  */
     41 #include <drm/drm_trace_netbsd.h>
     42 
     43 DEFINE_TRACE2(i915,, flip__request,
     44     "enum plane"/*plane*/, "struct drm_i915_gem_object *"/*obj*/);
     45 static inline void
     46 trace_i915_flip_request(enum plane plane, struct drm_i915_gem_object *obj)
     47 {
     48 	TRACE2(i915,, flip__request,  plane, obj);
     49 }
     50 
     51 DEFINE_TRACE2(i915,, flip__complete,
     52     "enum plane"/*plane*/, "struct drm_i915_gem_object *"/*obj*/);
     53 static inline void
     54 trace_i915_flip_complete(enum plane plane, struct drm_i915_gem_object *obj)
     55 {
     56 	TRACE2(i915,, flip__complete,  plane, obj);
     57 }
     58 
     59 DEFINE_TRACE4(i915,, gem__evict,
     60     "int"/*devno*/,
     61     "int"/*min_size*/, "unsigned"/*alignment*/, "unsigned"/*flags*/);
     62 static inline void
     63 trace_i915_gem_evict(struct drm_device *dev, int min_size, unsigned alignment,
     64     unsigned flags)
     65 {
     66 	TRACE4(i915,, gem__evict,
     67 	    dev->primary->index, min_size, alignment, flags);
     68 }
     69 
     70 DEFINE_TRACE2(i915,, gem__evict__vm,
     71     "int"/*devno*/, "struct i915_address_space *"/*vm*/);
     72 static inline void
     73 trace_i915_gem_evict_vm(struct i915_address_space *vm)
     74 {
     75 	TRACE2(i915,, gem__evict__vm,  vm->dev->primary->index, vm);
     76 }
     77 
     78 DEFINE_TRACE3(i915,, gem__object__change__domain,
     79     "struct drm_i915_gem_object *"/*obj*/,
     80     "uint32_t"/*read_domains*/,
     81     "uint32_t"/*write_domain*/);
     82 static inline void
     83 trace_i915_gem_object_change_domain(struct drm_i915_gem_object *obj,
     84     uint32_t old_read_domains, uint32_t old_write_domain)
     85 {
     86 	TRACE3(i915,, gem__object__change__domain,
     87 	    obj,
     88 	    obj->base.read_domains | (old_read_domains << 16),
     89 	    obj->base.write_domain | (old_write_domain << 16));
     90 }
     91 
     92 DEFINE_TRACE1(i915,, gem__object__clflush,
     93     "struct drm_i915_gem_object *"/*obj*/);
     94 static inline void
     95 trace_i915_gem_object_clflush(struct drm_i915_gem_object *obj)
     96 {
     97 	TRACE1(i915,, gem__object__clflush,  obj);
     98 }
     99 
    100 DEFINE_TRACE2(i915,, gem__object__create,
    101     "struct drm_i915_gem_object *"/*obj*/,
    102     "size_t"/*size*/);
    103 static inline void
    104 trace_i915_gem_object_create(struct drm_i915_gem_object *obj)
    105 {
    106 	TRACE2(i915,, gem__object__create,  obj, obj->base.size);
    107 }
    108 
    109 DEFINE_TRACE1(i915,, gem__object__destroy,
    110     "struct drm_i915_gem_object *"/*obj*/);
    111 static inline void
    112 trace_i915_gem_object_destroy(struct drm_i915_gem_object *obj)
    113 {
    114 	TRACE1(i915,, gem__object__destroy,  obj);
    115 }
    116 
    117 DEFINE_TRACE4(i915,, gem__object__fault,
    118     "struct drm_i915_gem_object *"/*obj*/,
    119     "pgoff_t"/*page_offset*/,
    120     "bool"/*gtt*/,
    121     "bool"/*write*/);
    122 static inline void
    123 trace_i915_gem_object_fault(struct drm_i915_gem_object *obj,
    124     pgoff_t page_offset, bool gtt, bool write)
    125 {
    126 	TRACE4(i915,, gem__object__fault,  obj, page_offset, gtt, write);
    127 }
    128 
    129 /* XXX Not sure about size/offset types here.  */
    130 DEFINE_TRACE3(i915,, gem__object__pread,
    131     "struct drm_i915_gem_object *"/*obj*/,
    132     "off_t"/*offset*/,
    133     "size_t"/*size*/);
    134 static inline void
    135 trace_i915_gem_object_pread(struct drm_i915_gem_object *obj, off_t offset,
    136     size_t size)
    137 {
    138 	TRACE3(i915,, gem__object__pread,  obj, offset, size);
    139 }
    140 
    141 DEFINE_TRACE3(i915,, gem__object__write,
    142     "struct drm_i915_gem_object *"/*obj*/,
    143     "off_t"/*offset*/,
    144     "size_t"/*size*/);
    145 static inline void
    146 trace_i915_gem_object_pwrite(struct drm_i915_gem_object *obj, off_t offset,
    147     size_t size)
    148 {
    149 	TRACE3(i915,, gem__object__write,  obj, offset, size);
    150 }
    151 
    152 DEFINE_TRACE3(i915,, gem__request__add,
    153     "int"/*devno*/, "int"/*ringid*/, "uint32_t"/*seqno*/);
    154 static inline void
    155 trace_i915_gem_request_add(struct drm_i915_gem_request *request)
    156 {
    157 	TRACE3(i915,, gem__request__add,
    158 	    request->ring->dev->primary->index,
    159 	    request->ring->id,
    160 	    request->seqno);
    161 }
    162 
    163 DEFINE_TRACE3(i915,, gem__request__retire,
    164     "int"/*devno*/, "int"/*ringid*/, "uint32_t"/*seqno*/);
    165 static inline void
    166 trace_i915_gem_request_retire(struct drm_i915_gem_request *request)
    167 {
    168 	TRACE3(i915,, gem__request__retire,
    169 	    request->ring->dev->primary->index,
    170 	    request->ring->id,
    171 	    request->seqno);
    172 }
    173 
    174 DEFINE_TRACE3(i915,, gem__request__wait__begin,
    175     "int"/*devno*/, "int"/*ringid*/, "uint32_t"/*seqno*/);
    176 static inline void
    177 trace_i915_gem_request_wait_begin(struct drm_i915_gem_request *request)
    178 {
    179 	TRACE3(i915,, gem__request__wait__begin,
    180 	    request->ring->dev->primary->index,
    181 	    request->ring->id,
    182 	    request->seqno);
    183 }
    184 
    185 DEFINE_TRACE3(i915,, gem__request__wait__end,
    186     "int"/*devno*/, "int"/*ringid*/, "uint32_t"/*seqno*/);
    187 static inline void
    188 trace_i915_gem_request_wait_end(struct drm_i915_gem_request *request)
    189 {
    190 	TRACE3(i915,, gem__request__wait__end,
    191 	    request->ring->dev->primary->index,
    192 	    request->ring->id,
    193 	    request->seqno);
    194 }
    195 
    196 DEFINE_TRACE3(i915,, gem__request__notify,
    197     "int"/*devno*/, "int"/*ringid*/, "uint32_t"/*seqno*/);
    198 static inline void
    199 trace_i915_gem_request_notify(struct intel_engine_cs *ring)
    200 {
    201 	TRACE3(i915,, gem__request__notify,
    202 	    ring->dev->primary->index, ring->id, ring->get_seqno(ring, false));
    203 }
    204 
    205 /* XXX Why no request in the trace upstream?  */
    206 DEFINE_TRACE4(i915,, gem__ring__dispatch,
    207     "int"/*devno*/, "int"/*ringid*/, "uint32_t"/*seqno*/, "uint32_t"/*flags*/);
    208 static inline void
    209 trace_i915_gem_ring_dispatch(struct drm_i915_gem_request *request,
    210     uint32_t flags)
    211 {
    212 	TRACE4(i915,, gem__ring__dispatch,
    213 	    request->ring->dev->primary->index,
    214 	    request->ring->id,
    215 	    request->seqno,
    216 	    flags);
    217 	/* XXX i915_trace_irq_get?  Doesn't seem to be used.  */
    218 }
    219 
    220 DEFINE_TRACE4(i915,, gem__ring__flush,
    221     "int"/*devno*/,
    222     "int"/*ringid*/,
    223     "uint32_t"/*invalidate*/,
    224     "uint32_t"/*flags*/);
    225 static inline void
    226 trace_i915_gem_ring_flush(struct drm_i915_gem_request *request,
    227     uint32_t invalidate, uint32_t flags)
    228 {
    229 	TRACE4(i915,, gem__ring__flush,
    230 	    request->ring->dev->primary->index,
    231 	    request->ring->id,
    232 	    invalidate,
    233 	    flags);
    234 }
    235 
    236 DEFINE_TRACE4(i915,, gem__ring__sync__to,
    237     "int"/*devno*/,
    238     "int"/*from_ringid*/,
    239     "int"/*to_ringid*/,
    240     "uint32_t"/*seqno*/);
    241 static inline void
    242 trace_i915_gem_ring_sync_to(struct drm_i915_gem_request *to_req,
    243     struct intel_engine_cs *from, struct drm_i915_gem_request *from_req)
    244 {
    245 	TRACE4(i915,, gem__ring__sync__to,
    246 	    from->dev->primary->index,
    247 	    from->id,
    248 	    to_req->ring->id,
    249 	    i915_gem_request_get_seqno(from_req));
    250 }
    251 
    252 DEFINE_TRACE3(i915,, register__read,
    253     "uint32_t"/*reg*/, "uint64_t"/*value*/, "size_t"/*len*/);
    254 DEFINE_TRACE3(i915,, register__write,
    255     "uint32_t"/*reg*/, "uint64_t"/*value*/, "size_t"/*len*/);
    256 static inline void
    257 trace_i915_reg_rw(bool write, uint32_t reg, uint64_t value, size_t len,
    258     bool trace)
    259 {
    260 	if (!trace)
    261 		return;
    262 	if (write) {
    263 		TRACE3(i915,, register__read,  reg, value, len);
    264 	} else {
    265 		TRACE3(i915,, register__write,  reg, value, len);
    266 	}
    267 }
    268 
    269 DEFINE_TRACE5(i915,, vma__bind,
    270     "struct drm_i915_gem_object *"/*obj*/,
    271     "struct i915_address_space *"/*vm*/,
    272     "uint64_t"/*offset*/,
    273     "uint64_t"/*size*/,
    274     "uint64_t"/*flags*/);
    275 static inline void
    276 trace_i915_vma_bind(struct i915_vma *vma, uint64_t flags)
    277 {
    278 	TRACE5(i915,, vma__bind,
    279 	    vma->obj, vma->vm, vma->node.start, vma->node.size, flags);
    280 }
    281 
    282 DEFINE_TRACE4(i915,, vma__unbind,
    283     "struct drm_i915_gem_object *"/*obj*/,
    284     "struct i915_address_space *"/*vm*/,
    285     "uint64_t"/*offset*/,
    286     "uint64_t"/*size*/);
    287 static inline void
    288 trace_i915_vma_unbind(struct i915_vma *vma)
    289 {
    290 	TRACE4(i915,, vma__unbind,
    291 	    vma->obj, vma->vm, vma->node.start, vma->node.size);
    292 }
    293 
    294 DEFINE_TRACE1(i915,, gpu__freq__change,
    295     "int"/*freq*/);
    296 static inline void
    297 trace_intel_gpu_freq_change(int freq)
    298 {
    299 	TRACE1(i915,, gpu__freq__change,  freq);
    300 }
    301 
    302 DEFINE_TRACE3(i915,, context__create,
    303     "int"/*devno*/,
    304     "struct intel_context *"/*ctx*/,
    305     "struct i915_address_space *"/*vm*/);
    306 static inline void
    307 trace_i915_context_create(struct intel_context *ctx)
    308 {
    309 	TRACE3(i915,, context__create,
    310 	    ctx->i915->dev->primary->index,
    311 	    ctx,
    312 	    (ctx->ppgtt ? &ctx->ppgtt->base : NULL));
    313 }
    314 
    315 DEFINE_TRACE3(i915,, context__free,
    316     "int"/*devno*/,
    317     "struct intel_context *"/*ctx*/,
    318     "struct i915_address_space *"/*vm*/);
    319 static inline void
    320 trace_i915_context_free(struct intel_context *ctx)
    321 {
    322 	TRACE3(i915,, context__free,
    323 	    ctx->i915->dev->primary->index,
    324 	    ctx,
    325 	    (ctx->ppgtt ? &ctx->ppgtt->base : NULL));
    326 }
    327 
    328 DEFINE_TRACE4(i915,, page_directory_entry_alloc,
    329     "struct i915_address_space *"/*vm*/,
    330     "uint32_t"/*pdpe*/,
    331     "uint64_t"/*start*/,
    332     "uint64_t"/*pde_shift*/);
    333 static inline void
    334 trace_i915_page_directory_entry_alloc(struct i915_address_space *vm,
    335     uint32_t pdpe, uint64_t start, uint64_t pde_shift)
    336 {
    337 	TRACE4(i915,, page_directory_entry_alloc,  vm, pdpe, start, pde_shift);
    338 }
    339 
    340 DEFINE_TRACE4(i915,, page_directory_pointer_entry_alloc,
    341     "struct i915_address_space *"/*vm*/,
    342     "uint32_t"/*pml4e*/,
    343     "uint64_t"/*start*/,
    344     "uint64_t"/*pde_shift*/);
    345 static inline void
    346 trace_i915_page_directory_pointer_entry_alloc(struct i915_address_space *vm,
    347     uint32_t pml4e, uint64_t start, uint64_t pde_shift)
    348 {
    349 	TRACE4(i915,, page_directory_pointer_entry_alloc,
    350 	    vm, pml4e, start, pde_shift);
    351 }
    352 
    353 DEFINE_TRACE4(i915,, page_table_entry_alloc,
    354     "struct i915_address_space *"/*vm*/,
    355     "uint32_t"/*pde*/,
    356     "uint64_t"/*start*/,
    357     "uint64_t"/*pde_shift*/);
    358 static inline void
    359 trace_i915_page_table_entry_alloc(struct i915_address_space *vm, uint32_t pde,
    360     uint64_t start, uint64_t pde_shift)
    361 {
    362 	TRACE4(i915,, page_table_entry_alloc,  vm, pde, start, pde_shift);
    363 }
    364 
    365 DEFINE_TRACE6(i915,, page_table_entry_map,
    366     "struct i915_address_space *"/*vm*/,
    367     "uint32_t"/*pde*/,
    368     "struct i915_page_table *"/*pt*/,
    369     "uint32_t"/*first*/,
    370     "uint32_t"/*count*/,
    371     "uint32_t"/*bits*/);
    372 static inline void
    373 trace_i915_page_table_entry_map(struct i915_address_space *vm, uint32_t pde,
    374     struct i915_page_table *pt, uint32_t first, uint32_t count, uint32_t bits)
    375 {
    376 	TRACE6(i915,, page_table_entry_map,  vm, pde, pt, first, count, bits);
    377 }
    378 
    379 DEFINE_TRACE2(i915,, ppgtt__create,
    380     "int"/*devno*/,
    381     "struct i915_address_space *"/*vm*/);
    382 static inline void
    383 trace_i915_ppgtt_create(struct i915_address_space *vm)
    384 {
    385 	TRACE2(i915,, ppgtt__create,  vm->dev->primary->index, vm);
    386 }
    387 
    388 DEFINE_TRACE2(i915,, ppgtt__release,
    389     "int"/*devno*/,
    390     "struct i915_address_space *"/*vm*/);
    391 static inline void
    392 trace_i915_ppgtt_release(struct i915_address_space *vm)
    393 {
    394 	TRACE2(i915,, ppgtt__release,  vm->dev->primary->index, vm);
    395 }
    396 
    397 #define	VM_TO_TRACE_NAME(vm)	(i915_is_ggtt(vm) ? "G" : "P")
    398 
    399 DEFINE_TRACE4(i915,, va__alloc,
    400     "struct i915_address_space *"/*vm*/,
    401     "uint64_t"/*start*/,
    402     "uint64_t"/*end*/,
    403     "const char *"/*name*/);
    404 static inline void
    405 trace_i915_va_alloc(struct i915_address_space *vm, uint64_t start,
    406     uint64_t length, const char *name)
    407 {
    408 	/* XXX Why start/end upstream?  */
    409 	TRACE4(i915,, va__alloc,  vm, start, start + length - 1, name);
    410 }
    411 
    412 DEFINE_TRACE3(i915,, gem__shrink,
    413     "int"/*devno*/,
    414     "unsigned long"/*target*/,
    415     "unsigned"/*flags*/);
    416 static inline void
    417 trace_i915_gem_shrink(struct drm_i915_private *dev_priv, unsigned long target,
    418     unsigned flags)
    419 {
    420 	TRACE3(i915,, gem__shrink,
    421 	    dev_priv->dev->primary->index, target, flags);
    422 }
    423 
    424 DEFINE_TRACE5(i915,, pipe__update__start,
    425     "enum i915_pipe"/*pipe*/,
    426     "uint32_t"/*frame*/,
    427     "int"/*scanline*/,
    428     "uint32_t"/*min*/,
    429     "uint32_t"/*max*/);
    430 static inline void
    431 trace_i915_pipe_update_start(struct intel_crtc *crtc)
    432 {
    433 	TRACE5(i915,, pipe__update__start,
    434 	    crtc->pipe,
    435 	    crtc->base.dev->driver->get_vblank_counter(crtc->base.dev,
    436 		crtc->pipe),
    437 	    intel_get_crtc_scanline(crtc),
    438 	    crtc->debug.min_vbl,
    439 	    crtc->debug.max_vbl);
    440 }
    441 
    442 DEFINE_TRACE5(i915,, pipe__update__vblank__evaded,
    443     "enum i915_pipe"/*pipe*/,
    444     "uint32_t"/*frame*/,
    445     "int"/*scanline*/,
    446     "uint32_t"/*min*/,
    447     "uint32_t"/*max*/);
    448 static inline void
    449 trace_i915_pipe_update_vblank_evaded(struct intel_crtc *crtc)
    450 {
    451 	TRACE5(i915,, pipe__update__vblank__evaded,
    452 	    crtc->pipe,
    453 	    crtc->debug.start_vbl_count,
    454 	    crtc->debug.scanline_start,
    455 	    crtc->debug.min_vbl,
    456 	    crtc->debug.max_vbl);
    457 }
    458 
    459 DEFINE_TRACE3(i915,, pipe__update__end,
    460     "enum i915_pipe"/*pipe*/,
    461     "uint32_t"/*frame*/,
    462     "int"/*scanline*/);
    463 static inline void
    464 trace_i915_pipe_update_end(struct intel_crtc *crtc, uint32_t frame,
    465     int scanline)
    466 {
    467 	TRACE3(i915,, pipe__update__end,  crtc->pipe, frame, scanline);
    468 }
    469 
    470 DEFINE_TRACE4(i915,, switch__mm,
    471     "int"/*devno*/,
    472     "int"/*ringid*/,
    473     "struct intel_context *"/*to*/,
    474     "struct i915_address_space *"/*vm*/);
    475 static inline void
    476 trace_switch_mm(struct intel_engine_cs *ring, struct intel_context *to)
    477 {
    478 	TRACE4(i915,, switch__mm,
    479 	    ring->dev->primary->index,
    480 	    ring->id,
    481 	    to,
    482 	    to->ppgtt ? &to->ppgtt->base : NULL);
    483 }
    484 
    485 #endif  /* _I915_TRACE_H_ */
    486