Lines Matching +full:enable +full:- +full:trace
42 return device->physical_device->rad_info.cu_mask[se][0] == 0; in radv_se_is_disabled()
46 gfx10_get_thread_trace_ctrl(struct radv_device *device, bool enable) in gfx10_get_thread_trace_ctrl() argument
48 uint32_t thread_trace_ctrl = S_008D1C_MODE(enable) | S_008D1C_HIWATER(5) | in gfx10_get_thread_trace_ctrl()
54 if (device->physical_device->rad_info.gfx_level == GFX10_3) in gfx10_get_thread_trace_ctrl()
57 if (device->physical_device->rad_info.has_sqtt_auto_flush_mode_bug) in gfx10_get_thread_trace_ctrl()
68 cs, device->physical_device->rad_info.gfx_level, NULL, 0, in radv_emit_wait_for_idle()
69 family == AMD_IP_COMPUTE && device->physical_device->rad_info.gfx_level >= GFX7, in radv_emit_wait_for_idle()
82 uint32_t shifted_size = device->thread_trace.buffer_size >> SQTT_BUFFER_ALIGN_SHIFT; in radv_emit_thread_trace_start()
83 struct radeon_info *rad_info = &device->physical_device->rad_info; in radv_emit_thread_trace_start()
84 unsigned max_se = rad_info->max_se; in radv_emit_thread_trace_start()
87 uint64_t va = radv_buffer_get_va(device->thread_trace.bo); in radv_emit_thread_trace_start()
88 uint64_t data_va = ac_thread_trace_get_data_va(rad_info, &device->thread_trace, va, se); in radv_emit_thread_trace_start()
90 int first_active_cu = ffs(device->physical_device->rad_info.cu_mask[se][0]); in radv_emit_thread_trace_start()
100 if (device->physical_device->rad_info.gfx_level >= GFX10) { in radv_emit_thread_trace_start()
152 if (device->physical_device->rad_info.gfx_level < GFX9) { in radv_emit_thread_trace_start()
158 /* Trace all tokens and registers. */ in radv_emit_thread_trace_start()
163 /* Enable SQTT perf counters for all CUs. */ in radv_emit_thread_trace_start()
171 if (device->physical_device->rad_info.gfx_level == GFX9) { in radv_emit_thread_trace_start()
172 /* Reset thread trace status errors. */ in radv_emit_thread_trace_start()
176 /* Enable the thread trace mode. */ in radv_emit_thread_trace_start()
183 if (device->physical_device->rad_info.gfx_level == GFX9) { in radv_emit_thread_trace_start()
197 /* Start the thread trace with a different event based on the queue. */ in radv_emit_thread_trace_start()
230 if (device->physical_device->rad_info.gfx_level >= GFX10) { in radv_copy_thread_trace_info_regs()
232 } else if (device->physical_device->rad_info.gfx_level == GFX9) { in radv_copy_thread_trace_info_regs()
235 assert(device->physical_device->rad_info.gfx_level == GFX8); in radv_copy_thread_trace_info_regs()
240 uint64_t va = radv_buffer_get_va(device->thread_trace.bo); in radv_copy_thread_trace_info_regs()
259 unsigned max_se = device->physical_device->rad_info.max_se; in radv_emit_thread_trace_stop()
261 /* Stop the thread trace with a different event based on the queue. */ in radv_emit_thread_trace_stop()
272 if (device->physical_device->rad_info.has_sqtt_rb_harvest_bug) { in radv_emit_thread_trace_stop()
286 if (device->physical_device->rad_info.gfx_level >= GFX10) { in radv_emit_thread_trace_stop()
287 if (!device->physical_device->rad_info.has_sqtt_rb_harvest_bug) { in radv_emit_thread_trace_stop()
288 /* Make sure to wait for the trace buffer. */ in radv_emit_thread_trace_stop()
300 /* Disable the thread trace mode. */ in radv_emit_thread_trace_stop()
304 /* Wait for thread trace completion. */ in radv_emit_thread_trace_stop()
314 /* Disable the thread trace mode. */ in radv_emit_thread_trace_stop()
317 /* Wait for thread trace completion. */ in radv_emit_thread_trace_stop()
341 struct radv_device *device = cmd_buffer->device; in radv_emit_thread_trace_userdata()
342 struct radeon_cmdbuf *cs = cmd_buffer->cs; in radv_emit_thread_trace_userdata()
346 if (cmd_buffer->qf == RADV_QUEUE_TRANSFER) in radv_emit_thread_trace_userdata()
352 radeon_check_space(device->ws, cs, 2 + count); in radv_emit_thread_trace_userdata()
356 if (device->physical_device->rad_info.gfx_level >= GFX10) in radv_emit_thread_trace_userdata()
363 num_dwords -= count; in radv_emit_thread_trace_userdata()
368 radv_emit_spi_config_cntl(struct radv_device *device, struct radeon_cmdbuf *cs, bool enable) in radv_emit_spi_config_cntl() argument
370 if (device->physical_device->rad_info.gfx_level >= GFX9) { in radv_emit_spi_config_cntl()
373 S_031100_ENABLE_SQG_TOP_EVENTS(enable) | S_031100_ENABLE_SQG_BOP_EVENTS(enable); in radv_emit_spi_config_cntl()
375 if (device->physical_device->rad_info.gfx_level >= GFX10) in radv_emit_spi_config_cntl()
380 /* SPI_CONFIG_CNTL is a protected register on GFX6-GFX8. */ in radv_emit_spi_config_cntl()
383 S_009100_ENABLE_SQG_TOP_EVENTS(enable) | S_009100_ENABLE_SQG_BOP_EVENTS(enable)); in radv_emit_spi_config_cntl()
390 if (device->physical_device->rad_info.gfx_level >= GFX11) in radv_emit_inhibit_clockgating()
393 if (device->physical_device->rad_info.gfx_level >= GFX10) { in radv_emit_inhibit_clockgating()
396 } else if (device->physical_device->rad_info.gfx_level >= GFX8) { in radv_emit_inhibit_clockgating()
405 unsigned max_se = device->physical_device->rad_info.max_se; in radv_thread_trace_init_bo()
406 struct radeon_winsys *ws = device->ws; in radv_thread_trace_init_bo()
413 device->thread_trace.buffer_size = in radv_thread_trace_init_bo()
414 align64(device->thread_trace.buffer_size, 1u << SQTT_BUFFER_ALIGN_SHIFT); in radv_thread_trace_init_bo()
416 /* Compute total size of the thread trace BO for all SEs. */ in radv_thread_trace_init_bo()
418 size += device->thread_trace.buffer_size * (uint64_t)max_se; in radv_thread_trace_init_bo()
421 result = ws->buffer_create( in radv_thread_trace_init_bo()
425 device->thread_trace.bo = bo; in radv_thread_trace_init_bo()
429 result = ws->buffer_make_resident(ws, device->thread_trace.bo, true); in radv_thread_trace_init_bo()
433 device->thread_trace.ptr = ws->buffer_map(device->thread_trace.bo); in radv_thread_trace_init_bo()
434 if (!device->thread_trace.ptr) in radv_thread_trace_init_bo()
443 struct radeon_winsys *ws = device->ws; in radv_thread_trace_finish_bo()
445 if (unlikely(device->thread_trace.bo)) { in radv_thread_trace_finish_bo()
446 ws->buffer_make_resident(ws, device->thread_trace.bo, false); in radv_thread_trace_finish_bo()
447 ws->buffer_destroy(ws, device->thread_trace.bo); in radv_thread_trace_finish_bo()
454 struct ac_thread_trace_data *thread_trace_data = &device->thread_trace; in radv_thread_trace_init()
457 device->thread_trace.buffer_size = in radv_thread_trace_init()
459 device->thread_trace.start_frame = radv_get_int_debug_option("RADV_THREAD_TRACE", -1); in radv_thread_trace_init()
463 device->thread_trace.trigger_file = strdup(trigger_file); in radv_thread_trace_init()
471 list_inithead(&thread_trace_data->rgp_pso_correlation.record); in radv_thread_trace_init()
472 simple_mtx_init(&thread_trace_data->rgp_pso_correlation.lock, mtx_plain); in radv_thread_trace_init()
474 list_inithead(&thread_trace_data->rgp_loader_events.record); in radv_thread_trace_init()
475 simple_mtx_init(&thread_trace_data->rgp_loader_events.lock, mtx_plain); in radv_thread_trace_init()
477 list_inithead(&thread_trace_data->rgp_code_object.record); in radv_thread_trace_init()
478 simple_mtx_init(&thread_trace_data->rgp_code_object.lock, mtx_plain); in radv_thread_trace_init()
486 struct ac_thread_trace_data *thread_trace_data = &device->thread_trace; in radv_thread_trace_finish()
487 struct radeon_winsys *ws = device->ws; in radv_thread_trace_finish()
489 free(device->thread_trace.trigger_file); in radv_thread_trace_finish()
494 if (device->thread_trace.start_cs[i]) in radv_thread_trace_finish()
495 ws->cs_destroy(device->thread_trace.start_cs[i]); in radv_thread_trace_finish()
496 if (device->thread_trace.stop_cs[i]) in radv_thread_trace_finish()
497 ws->cs_destroy(device->thread_trace.stop_cs[i]); in radv_thread_trace_finish()
500 assert(thread_trace_data->rgp_pso_correlation.record_count == 0); in radv_thread_trace_finish()
501 simple_mtx_destroy(&thread_trace_data->rgp_pso_correlation.lock); in radv_thread_trace_finish()
503 assert(thread_trace_data->rgp_loader_events.record_count == 0); in radv_thread_trace_finish()
504 simple_mtx_destroy(&thread_trace_data->rgp_loader_events.lock); in radv_thread_trace_finish()
506 assert(thread_trace_data->rgp_code_object.record_count == 0); in radv_thread_trace_finish()
507 simple_mtx_destroy(&thread_trace_data->rgp_code_object.lock); in radv_thread_trace_finish()
513 /* Destroy the previous thread trace BO. */ in radv_thread_trace_resize_bo()
516 /* Double the size of the thread trace buffer per SE. */ in radv_thread_trace_resize_bo()
517 device->thread_trace.buffer_size *= 2; in radv_thread_trace_resize_bo()
520 "Failed to get the thread trace because the buffer " in radv_thread_trace_resize_bo()
522 device->thread_trace.buffer_size / 1024); in radv_thread_trace_resize_bo()
524 /* Re-create the thread trace BO. */ in radv_thread_trace_resize_bo()
531 struct radv_device *device = queue->device; in radv_begin_thread_trace()
532 enum radv_queue_family family = queue->state.qf; in radv_begin_thread_trace()
533 struct radeon_winsys *ws = device->ws; in radv_begin_thread_trace()
538 if (device->thread_trace.start_cs[family]) { in radv_begin_thread_trace()
539 ws->cs_destroy(device->thread_trace.start_cs[family]); in radv_begin_thread_trace()
540 device->thread_trace.start_cs[family] = NULL; in radv_begin_thread_trace()
543 cs = ws->cs_create(ws, radv_queue_ring(queue)); in radv_begin_thread_trace()
562 /* Make sure to wait-for-idle before starting SQTT. */ in radv_begin_thread_trace()
568 /* Enable SQG events that collects thread trace data. */ in radv_begin_thread_trace()
573 if (device->spm_trace.bo) { in radv_begin_thread_trace()
574 /* Enable all shader stages by default. */ in radv_begin_thread_trace()
583 if (device->spm_trace.bo) in radv_begin_thread_trace()
586 result = ws->cs_finalize(cs); in radv_begin_thread_trace()
588 ws->cs_destroy(cs); in radv_begin_thread_trace()
592 device->thread_trace.start_cs[family] = cs; in radv_begin_thread_trace()
600 struct radv_device *device = queue->device; in radv_end_thread_trace()
601 enum radv_queue_family family = queue->state.qf; in radv_end_thread_trace()
602 struct radeon_winsys *ws = device->ws; in radv_end_thread_trace()
607 if (queue->device->thread_trace.stop_cs[family]) { in radv_end_thread_trace()
608 ws->cs_destroy(device->thread_trace.stop_cs[family]); in radv_end_thread_trace()
609 device->thread_trace.stop_cs[family] = NULL; in radv_end_thread_trace()
612 cs = ws->cs_create(ws, radv_queue_ring(queue)); in radv_end_thread_trace()
631 /* Make sure to wait-for-idle before stopping SQTT. */ in radv_end_thread_trace()
634 if (device->spm_trace.bo) in radv_end_thread_trace()
645 /* Restore previous state by re-enabling clock gating. */ in radv_end_thread_trace()
648 result = ws->cs_finalize(cs); in radv_end_thread_trace()
650 ws->cs_destroy(cs); in radv_end_thread_trace()
654 device->thread_trace.stop_cs[family] = cs; in radv_end_thread_trace()
662 struct radv_device *device = queue->device; in radv_get_thread_trace()
663 struct radeon_info *rad_info = &device->physical_device->rad_info; in radv_get_thread_trace()
664 unsigned max_se = rad_info->max_se; in radv_get_thread_trace()
665 void *thread_trace_ptr = device->thread_trace.ptr; in radv_get_thread_trace()
671 uint64_t data_offset = ac_thread_trace_get_data_offset(rad_info, &device->thread_trace, se); in radv_get_thread_trace()
676 int first_active_cu = ffs(device->physical_device->rad_info.cu_mask[se][0]); in radv_get_thread_trace()
681 if (!ac_is_thread_trace_complete(&device->physical_device->rad_info, &device->thread_trace, in radv_get_thread_trace()
685 "trace buffer.\n"); in radv_get_thread_trace()
696 thread_trace_se.compute_unit = device->physical_device->rad_info.gfx_level >= GFX10 in radv_get_thread_trace()
700 thread_trace->traces[thread_trace->num_traces] = thread_trace_se; in radv_get_thread_trace()
701 thread_trace->num_traces++; in radv_get_thread_trace()
704 thread_trace->data = &device->thread_trace; in radv_get_thread_trace()