Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/display: add performance trace macro to dc

Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <Harry.Wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Dmytro Laktyushkin and committed by
Alex Deucher
215a6f05 9bbc3031

+117 -120
+6
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c
··· 35 35 #include "amdgpu_dm_irq.h" 36 36 #include "amdgpu_pm.h" 37 37 38 + unsigned long long dm_get_timestamp(struct dc_context *ctx) 39 + { 40 + /* TODO: return actual timestamp */ 41 + return 0; 42 + } 43 + 38 44 bool dm_write_persistent_data(struct dc_context *ctx, 39 45 const struct dc_sink *sink, 40 46 const char *module_name,
+21 -55
drivers/gpu/drm/amd/display/dc/basics/logger.c
··· 80 80 logger->buffer_read_offset = 0; 81 81 logger->buffer_write_offset = 0; 82 82 83 - logger->write_wrap_count = 0; 84 - logger->read_wrap_count = 0; 85 83 logger->open_count = 0; 86 84 87 85 logger->flags.bits.ENABLE_CONSOLE = 1; ··· 160 162 } 161 163 162 164 /* Print everything unread existing in log_buffer to debug console*/ 163 - static void flush_to_debug_console(struct dal_logger *logger) 165 + void dm_logger_flush_buffer(struct dal_logger *logger, bool should_warn) 164 166 { 165 - int i = logger->buffer_read_offset; 166 - char *string_start = &logger->log_buffer[i]; 167 + char *string_start = &logger->log_buffer[logger->buffer_read_offset]; 167 168 168 - dm_output_to_console( 169 - "---------------- FLUSHING LOG BUFFER ----------------\n"); 170 - while (i < logger->buffer_write_offset) { 169 + if (should_warn) 170 + dm_output_to_console( 171 + "---------------- FLUSHING LOG BUFFER ----------------\n"); 172 + while (logger->buffer_read_offset < logger->buffer_write_offset) { 171 173 172 - if (logger->log_buffer[i] == '\0') { 174 + if (logger->log_buffer[logger->buffer_read_offset] == '\0') { 173 175 dm_output_to_console("%s", string_start); 174 - string_start = (char *)logger->log_buffer + i + 1; 176 + string_start = logger->log_buffer + logger->buffer_read_offset + 1; 175 177 } 176 - i++; 178 + logger->buffer_read_offset++; 177 179 } 178 - dm_output_to_console( 179 - "-------------- END FLUSHING LOG BUFFER --------------\n\n"); 180 + if (should_warn) 181 + dm_output_to_console( 182 + "-------------- END FLUSHING LOG BUFFER --------------\n\n"); 180 183 } 181 184 182 185 static void log_to_internal_buffer(struct log_entry *entry) ··· 194 195 195 196 if (size > 0 && size < logger->log_buffer_size) { 196 197 197 - int total_free_space = 0; 198 - int space_before_wrap = 0; 198 + int buffer_space = logger->log_buffer_size - 199 + logger->buffer_write_offset; 199 200 200 - if (logger->buffer_write_offset > logger->buffer_read_offset) { 201 - total_free_space = logger->log_buffer_size - 202 - logger->buffer_write_offset + 203 - logger->buffer_read_offset; 204 - space_before_wrap = logger->log_buffer_size - 205 - logger->buffer_write_offset; 206 - } else if (logger->buffer_write_offset < 207 - logger->buffer_read_offset) { 208 - total_free_space = logger->log_buffer_size - 209 - logger->buffer_read_offset + 210 - logger->buffer_write_offset; 211 - space_before_wrap = total_free_space; 212 - } else if (logger->write_wrap_count != 213 - logger->read_wrap_count) { 214 - /* Buffer is completely full already */ 215 - total_free_space = 0; 216 - space_before_wrap = 0; 217 - } else { 201 + if (logger->buffer_write_offset == logger->buffer_read_offset) { 218 202 /* Buffer is empty, start writing at beginning */ 219 - total_free_space = logger->log_buffer_size; 220 - space_before_wrap = logger->log_buffer_size; 203 + buffer_space = logger->log_buffer_size; 221 204 logger->buffer_write_offset = 0; 222 205 logger->buffer_read_offset = 0; 223 206 } 224 207 225 - if (space_before_wrap > size) { 208 + if (buffer_space > size) { 226 209 /* No wrap around, copy 'size' bytes 227 210 * from 'entry->buf' to 'log_buffer' 228 211 */ ··· 213 232 entry->buf, size); 214 233 logger->buffer_write_offset += size; 215 234 216 - } else if (total_free_space > size) { 217 - /* We have enough room without flushing, 218 - * but need to wrap around */ 219 - 220 - int space_after_wrap = total_free_space - 221 - space_before_wrap; 222 - 223 - memmove(logger->log_buffer + 224 - logger->buffer_write_offset, 225 - entry->buf, space_before_wrap); 226 - memmove(logger->log_buffer, entry->buf + 227 - space_before_wrap, space_after_wrap); 228 - 229 - logger->buffer_write_offset = space_after_wrap; 230 - logger->write_wrap_count++; 231 - 232 235 } else { 233 236 /* Not enough room remaining, we should flush 234 237 * existing logs */ 235 238 236 239 /* Flush existing unread logs to console */ 237 - flush_to_debug_console(logger); 240 + dm_logger_flush_buffer(logger, true); 238 241 239 242 /* Start writing to beginning of buffer */ 240 243 memmove(logger->log_buffer, entry->buf, size); ··· 290 325 log_heading(&entry); 291 326 292 327 size = dm_log_to_buffer( 293 - buffer, LOG_MAX_LINE_SIZE, msg, args); 328 + buffer, LOG_MAX_LINE_SIZE - 1, msg, args); 294 329 295 - entry.buf_offset += size; 330 + buffer[entry.buf_offset + size] = '\0'; 331 + entry.buf_offset += size + 1; 296 332 297 333 /* --Flush log_entry buffer-- */ 298 334 /* print to kernel console */
-37
drivers/gpu/drm/amd/display/dc/basics/logger.h
··· 26 26 #ifndef __DAL_LOGGER_H__ 27 27 #define __DAL_LOGGER_H__ 28 28 29 - /* Structure for keeping track of offsets, buffer, etc */ 30 - 31 - #define DAL_LOGGER_BUFFER_MAX_SIZE 2048 32 - 33 - /*Connectivity log needs to output EDID, which needs at lease 256x3 bytes, 34 - * change log line size to 896 to meet the request. 35 - */ 36 - #define LOG_MAX_LINE_SIZE 896 37 - 38 - #include "include/logger_types.h" 39 - 40 - struct dal_logger { 41 - 42 - /* How far into the circular buffer has been read by dsat 43 - * Read offset should never cross write offset. Write \0's to 44 - * read data just to be sure? 45 - */ 46 - uint32_t buffer_read_offset; 47 - 48 - /* How far into the circular buffer we have written 49 - * Write offset should never cross read offset 50 - */ 51 - uint32_t buffer_write_offset; 52 - 53 - uint32_t write_wrap_count; 54 - uint32_t read_wrap_count; 55 - 56 - uint32_t open_count; 57 - 58 - char *log_buffer; /* Pointer to malloc'ed buffer */ 59 - uint32_t log_buffer_size; /* Size of circular buffer */ 60 - 61 - uint32_t mask; /*array of masks for major elements*/ 62 - 63 - union logger_flags flags; 64 - struct dc_context *ctx; 65 - }; 66 29 67 30 #endif /* __DAL_LOGGER_H__ */
+4 -1
drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
··· 682 682 bool bw_limit_pass; 683 683 float bw_limit; 684 684 685 + PERFORMANCE_TRACE_START(); 685 686 if (dcn_bw_apply_registry_override(dc)) 686 687 dcn_bw_sync_calcs_and_dml(dc); 687 688 ··· 1090 1089 1091 1090 kernel_fpu_end(); 1092 1091 1092 + PERFORMANCE_TRACE_END(); 1093 + 1093 1094 if (bw_limit_pass && v->voltage_level != 5) 1094 1095 return true; 1095 1096 else ··· 1226 1223 else 1227 1224 dcf_clk = dc->dcn_soc->dcfclkv_min0p65*1000; 1228 1225 1229 - dm_logger_write(dc->ctx->logger, LOG_HW_MARKS, 1226 + dm_logger_write(dc->ctx->logger, LOG_BANDWIDTH_CALCS, 1230 1227 "\tdcf_clk for voltage = %d\n", dcf_clk); 1231 1228 return dcf_clk; 1232 1229 }
+1
drivers/gpu/drm/amd/display/dc/dc.h
··· 224 224 bool disable_dpp_pg; 225 225 bool disable_stereo_support; 226 226 bool vsr_support; 227 + bool performance_trace; 227 228 }; 228 229 struct dc_state; 229 230 struct resource_pool;
+20 -20
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
··· 468 468 refclk_mhz, 0x1fffff); 469 469 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A, prog_wm_value); 470 470 471 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 471 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 472 472 "URGENCY_WATERMARK_A calculated =%d\n" 473 473 "HW register value = 0x%x\n", 474 474 watermarks->a.urgent_ns, prog_wm_value); ··· 476 476 prog_wm_value = convert_and_clamp(watermarks->a.pte_meta_urgent_ns, 477 477 refclk_mhz, 0x1fffff); 478 478 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_A, prog_wm_value); 479 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 479 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 480 480 "PTE_META_URGENCY_WATERMARK_A calculated =%d\n" 481 481 "HW register value = 0x%x\n", 482 482 watermarks->a.pte_meta_urgent_ns, prog_wm_value); ··· 487 487 refclk_mhz, 0x1fffff); 488 488 489 489 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A, prog_wm_value); 490 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 490 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 491 491 "SR_ENTER_EXIT_WATERMARK_A calculated =%d\n" 492 492 "HW register value = 0x%x\n", 493 493 watermarks->a.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value); ··· 497 497 watermarks->a.cstate_pstate.cstate_exit_ns, 498 498 refclk_mhz, 0x1fffff); 499 499 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A, prog_wm_value); 500 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 500 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 501 501 "SR_EXIT_WATERMARK_A calculated =%d\n" 502 502 "HW register value = 0x%x\n", 503 503 watermarks->a.cstate_pstate.cstate_exit_ns, prog_wm_value); ··· 507 507 watermarks->a.cstate_pstate.pstate_change_ns, 508 508 refclk_mhz, 0x1fffff); 509 509 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A, prog_wm_value); 510 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 510 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 511 511 "DRAM_CLK_CHANGE_WATERMARK_A calculated =%d\n" 512 512 "HW register value = 0x%x\n\n", 513 513 watermarks->a.cstate_pstate.pstate_change_ns, prog_wm_value); ··· 517 517 prog_wm_value = convert_and_clamp( 518 518 watermarks->b.urgent_ns, refclk_mhz, 0x1fffff); 519 519 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B, prog_wm_value); 520 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 520 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 521 521 "URGENCY_WATERMARK_B calculated =%d\n" 522 522 "HW register value = 0x%x\n", 523 523 watermarks->b.urgent_ns, prog_wm_value); ··· 527 527 watermarks->b.pte_meta_urgent_ns, 528 528 refclk_mhz, 0x1fffff); 529 529 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_B, prog_wm_value); 530 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 530 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 531 531 "PTE_META_URGENCY_WATERMARK_B calculated =%d\n" 532 532 "HW register value = 0x%x\n", 533 533 watermarks->b.pte_meta_urgent_ns, prog_wm_value); ··· 537 537 watermarks->b.cstate_pstate.cstate_enter_plus_exit_ns, 538 538 refclk_mhz, 0x1fffff); 539 539 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B, prog_wm_value); 540 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 540 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 541 541 "SR_ENTER_WATERMARK_B calculated =%d\n" 542 542 "HW register value = 0x%x\n", 543 543 watermarks->b.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value); ··· 547 547 watermarks->b.cstate_pstate.cstate_exit_ns, 548 548 refclk_mhz, 0x1fffff); 549 549 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B, prog_wm_value); 550 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 550 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 551 551 "SR_EXIT_WATERMARK_B calculated =%d\n" 552 552 "HW register value = 0x%x\n", 553 553 watermarks->b.cstate_pstate.cstate_exit_ns, prog_wm_value); ··· 556 556 watermarks->b.cstate_pstate.pstate_change_ns, 557 557 refclk_mhz, 0x1fffff); 558 558 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B, prog_wm_value); 559 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 559 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 560 560 "DRAM_CLK_CHANGE_WATERMARK_B calculated =%d\n\n" 561 561 "HW register value = 0x%x\n", 562 562 watermarks->b.cstate_pstate.pstate_change_ns, prog_wm_value); ··· 565 565 prog_wm_value = convert_and_clamp( 566 566 watermarks->c.urgent_ns, refclk_mhz, 0x1fffff); 567 567 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C, prog_wm_value); 568 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 568 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 569 569 "URGENCY_WATERMARK_C calculated =%d\n" 570 570 "HW register value = 0x%x\n", 571 571 watermarks->c.urgent_ns, prog_wm_value); ··· 575 575 watermarks->c.pte_meta_urgent_ns, 576 576 refclk_mhz, 0x1fffff); 577 577 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_C, prog_wm_value); 578 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 578 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 579 579 "PTE_META_URGENCY_WATERMARK_C calculated =%d\n" 580 580 "HW register value = 0x%x\n", 581 581 watermarks->c.pte_meta_urgent_ns, prog_wm_value); ··· 585 585 watermarks->c.cstate_pstate.cstate_enter_plus_exit_ns, 586 586 refclk_mhz, 0x1fffff); 587 587 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C, prog_wm_value); 588 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 588 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 589 589 "SR_ENTER_WATERMARK_C calculated =%d\n" 590 590 "HW register value = 0x%x\n", 591 591 watermarks->c.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value); ··· 595 595 watermarks->c.cstate_pstate.cstate_exit_ns, 596 596 refclk_mhz, 0x1fffff); 597 597 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C, prog_wm_value); 598 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 598 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 599 599 "SR_EXIT_WATERMARK_C calculated =%d\n" 600 600 "HW register value = 0x%x\n", 601 601 watermarks->c.cstate_pstate.cstate_exit_ns, prog_wm_value); ··· 605 605 watermarks->c.cstate_pstate.pstate_change_ns, 606 606 refclk_mhz, 0x1fffff); 607 607 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C, prog_wm_value); 608 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 608 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 609 609 "DRAM_CLK_CHANGE_WATERMARK_C calculated =%d\n\n" 610 610 "HW register value = 0x%x\n", 611 611 watermarks->c.cstate_pstate.pstate_change_ns, prog_wm_value); ··· 614 614 prog_wm_value = convert_and_clamp( 615 615 watermarks->d.urgent_ns, refclk_mhz, 0x1fffff); 616 616 REG_WRITE(DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D, prog_wm_value); 617 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 617 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 618 618 "URGENCY_WATERMARK_D calculated =%d\n" 619 619 "HW register value = 0x%x\n", 620 620 watermarks->d.urgent_ns, prog_wm_value); ··· 623 623 watermarks->d.pte_meta_urgent_ns, 624 624 refclk_mhz, 0x1fffff); 625 625 REG_WRITE(DCHUBBUB_ARB_PTE_META_URGENCY_WATERMARK_D, prog_wm_value); 626 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 626 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 627 627 "PTE_META_URGENCY_WATERMARK_D calculated =%d\n" 628 628 "HW register value = 0x%x\n", 629 629 watermarks->d.pte_meta_urgent_ns, prog_wm_value); ··· 633 633 watermarks->d.cstate_pstate.cstate_enter_plus_exit_ns, 634 634 refclk_mhz, 0x1fffff); 635 635 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D, prog_wm_value); 636 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 636 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 637 637 "SR_ENTER_WATERMARK_D calculated =%d\n" 638 638 "HW register value = 0x%x\n", 639 639 watermarks->d.cstate_pstate.cstate_enter_plus_exit_ns, prog_wm_value); ··· 643 643 watermarks->d.cstate_pstate.cstate_exit_ns, 644 644 refclk_mhz, 0x1fffff); 645 645 REG_WRITE(DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D, prog_wm_value); 646 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 646 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 647 647 "SR_EXIT_WATERMARK_D calculated =%d\n" 648 648 "HW register value = 0x%x\n", 649 649 watermarks->d.cstate_pstate.cstate_exit_ns, prog_wm_value); ··· 653 653 watermarks->d.cstate_pstate.pstate_change_ns, 654 654 refclk_mhz, 0x1fffff); 655 655 REG_WRITE(DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D, prog_wm_value); 656 - dm_logger_write(hws->ctx->logger, LOG_HW_MARKS, 656 + dm_logger_write(hws->ctx->logger, LOG_BANDWIDTH_CALCS, 657 657 "DRAM_CLK_CHANGE_WATERMARK_D calculated =%d\n" 658 658 "HW register value = 0x%x\n\n", 659 659 watermarks->d.cstate_pstate.pstate_change_ns, prog_wm_value);
+1
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
··· 434 434 .voltage_align_fclk = true, 435 435 .disable_stereo_support = true, 436 436 .vsr_support = true, 437 + .performance_trace = false, 437 438 }; 438 439 439 440 static const struct dc_debug debug_defaults_diags = {
+2
drivers/gpu/drm/amd/display/dc/dm_services.h
··· 418 418 #define dm_log_to_buffer(buffer, size, fmt, args)\ 419 419 vsnprintf(buffer, size, fmt, args) 420 420 421 + unsigned long long dm_get_timestamp(struct dc_context *ctx); 422 + 421 423 /* 422 424 * Debug and verification hooks 423 425 */
+28
drivers/gpu/drm/amd/display/include/logger_interface.h
··· 44 44 45 45 uint32_t dal_logger_destroy(struct dal_logger **logger); 46 46 47 + void dm_logger_flush_buffer(struct dal_logger *logger, bool should_warn); 48 + 47 49 void dm_logger_write( 48 50 struct dal_logger *logger, 49 51 enum dc_log_type log_type, ··· 158 156 159 157 #define DTN_INFO_END() \ 160 158 dm_dtn_log_end(dc_ctx) 159 + 160 + #define PERFORMANCE_TRACE_START() \ 161 + unsigned long long perf_trc_start_stmp = dm_get_timestamp(dc->ctx); \ 162 + unsigned long long perf_trc_start_log_msk = dc->ctx->logger->mask; \ 163 + unsigned int perf_trc_start_log_flags = dc->ctx->logger->flags.value; \ 164 + if (dc->debug.performance_trace) {\ 165 + dm_logger_flush_buffer(dc->ctx->logger, false);\ 166 + dc->ctx->logger->mask = 1<<LOG_PERF_TRACE;\ 167 + dc->ctx->logger->flags.bits.ENABLE_CONSOLE = 0;\ 168 + dc->ctx->logger->flags.bits.ENABLE_BUFFER = 1;\ 169 + } 170 + 171 + #define PERFORMANCE_TRACE_END() do {\ 172 + unsigned long long perf_trc_end_stmp = dm_get_timestamp(dc->ctx);\ 173 + if (dc->debug.performance_trace) {\ 174 + dm_logger_write(dc->ctx->logger, \ 175 + LOG_PERF_TRACE, \ 176 + "%s duration: %d ticks\n", __func__,\ 177 + perf_trc_end_stmp - perf_trc_start_stmp); \ 178 + if (perf_trc_start_log_msk != 1<<LOG_PERF_TRACE) {\ 179 + dc->ctx->logger->mask = perf_trc_start_log_msk;\ 180 + dc->ctx->logger->flags.value = perf_trc_start_log_flags;\ 181 + dm_logger_flush_buffer(dc->ctx->logger, false);\ 182 + } \ 183 + } \ 184 + } while (0) 161 185 162 186 #endif /* __DAL_LOGGER_INTERFACE_H__ */
+34 -2
drivers/gpu/drm/amd/display/include/logger_types.h
··· 64 64 LOG_EVENT_LINK_LOSS, 65 65 LOG_EVENT_UNDERFLOW, 66 66 LOG_IF_TRACE, 67 - LOG_HW_MARKS, 68 - LOG_PPLIB, 67 + LOG_PERF_TRACE, 69 68 70 69 LOG_SECTION_TOTAL_COUNT 71 70 }; ··· 128 129 struct dc_log_type_info { 129 130 enum dc_log_type type; 130 131 char name[MAX_NAME_LEN]; 132 + }; 133 + 134 + /* Structure for keeping track of offsets, buffer, etc */ 135 + 136 + #define DAL_LOGGER_BUFFER_MAX_SIZE 2048 137 + 138 + /*Connectivity log needs to output EDID, which needs at lease 256x3 bytes, 139 + * change log line size to 896 to meet the request. 140 + */ 141 + #define LOG_MAX_LINE_SIZE 896 142 + 143 + struct dal_logger { 144 + 145 + /* How far into the circular buffer has been read by dsat 146 + * Read offset should never cross write offset. Write \0's to 147 + * read data just to be sure? 148 + */ 149 + uint32_t buffer_read_offset; 150 + 151 + /* How far into the circular buffer we have written 152 + * Write offset should never cross read offset 153 + */ 154 + uint32_t buffer_write_offset; 155 + 156 + uint32_t open_count; 157 + 158 + char *log_buffer; /* Pointer to malloc'ed buffer */ 159 + uint32_t log_buffer_size; /* Size of circular buffer */ 160 + 161 + uint32_t mask; /*array of masks for major elements*/ 162 + 163 + union logger_flags flags; 164 + struct dc_context *ctx; 131 165 }; 132 166 133 167 #endif /* __DAL_LOGGER_TYPES_H__ */