Commit 215a6f05 authored by Dmytro Laktyushkin's avatar Dmytro Laktyushkin Committed by Alex Deucher
Browse files

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

parent 9bbc3031
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -35,6 +35,12 @@
#include "amdgpu_dm_irq.h"
#include "amdgpu_pm.h"

unsigned long long dm_get_timestamp(struct dc_context *ctx)
{
	/* TODO: return actual timestamp */
	return 0;
}

bool dm_write_persistent_data(struct dc_context *ctx,
		const struct dc_sink *sink,
		const char *module_name,
+22 −56
Original line number Diff line number Diff line
@@ -80,8 +80,6 @@ static bool construct(struct dc_context *ctx, struct dal_logger *logger,
	logger->buffer_read_offset = 0;
	logger->buffer_write_offset = 0;

	logger->write_wrap_count = 0;
	logger->read_wrap_count = 0;
	logger->open_count = 0;

	logger->flags.bits.ENABLE_CONSOLE = 1;
@@ -162,21 +160,22 @@ static void log_to_debug_console(struct log_entry *entry)
}

/* Print everything unread existing in log_buffer to debug console*/
static void flush_to_debug_console(struct dal_logger *logger)
void dm_logger_flush_buffer(struct dal_logger *logger, bool should_warn)
{
	int i = logger->buffer_read_offset;
	char *string_start = &logger->log_buffer[i];
	char *string_start = &logger->log_buffer[logger->buffer_read_offset];

	if (should_warn)
		dm_output_to_console(
			"---------------- FLUSHING LOG BUFFER ----------------\n");
	while (i < logger->buffer_write_offset)	{
	while (logger->buffer_read_offset < logger->buffer_write_offset) {

		if (logger->log_buffer[i] == '\0') {
		if (logger->log_buffer[logger->buffer_read_offset] == '\0') {
			dm_output_to_console("%s", string_start);
			string_start = (char *)logger->log_buffer + i + 1;
			string_start = logger->log_buffer + logger->buffer_read_offset + 1;
		}
		i++;
		logger->buffer_read_offset++;
	}
	if (should_warn)
		dm_output_to_console(
			"-------------- END FLUSHING LOG BUFFER --------------\n\n");
}
@@ -195,35 +194,17 @@ static void log_to_internal_buffer(struct log_entry *entry)

	if (size > 0 && size < logger->log_buffer_size) {

		int total_free_space = 0;
		int space_before_wrap = 0;

		if (logger->buffer_write_offset > logger->buffer_read_offset) {
			total_free_space = logger->log_buffer_size -
					logger->buffer_write_offset +
					logger->buffer_read_offset;
			space_before_wrap = logger->log_buffer_size -
					logger->buffer_write_offset;
		} else if (logger->buffer_write_offset <
				logger->buffer_read_offset) {
			total_free_space = logger->log_buffer_size -
					logger->buffer_read_offset +
		int buffer_space = logger->log_buffer_size -
				logger->buffer_write_offset;
			space_before_wrap = total_free_space;
		} else if (logger->write_wrap_count !=
				logger->read_wrap_count) {
			/* Buffer is completely full already */
			total_free_space = 0;
			space_before_wrap = 0;
		} else {

		if (logger->buffer_write_offset == logger->buffer_read_offset) {
			/* Buffer is empty, start writing at beginning */
			total_free_space = logger->log_buffer_size;
			space_before_wrap = logger->log_buffer_size;
			buffer_space = logger->log_buffer_size;
			logger->buffer_write_offset = 0;
			logger->buffer_read_offset = 0;
		}

		if (space_before_wrap > size) {
		if (buffer_space > size) {
			/* No wrap around, copy 'size' bytes
			 * from 'entry->buf' to 'log_buffer'
			 */
@@ -232,28 +213,12 @@ static void log_to_internal_buffer(struct log_entry *entry)
					entry->buf, size);
			logger->buffer_write_offset += size;

		} else if (total_free_space > size) {
			/* We have enough room without flushing,
			 * but need to wrap around */

			int space_after_wrap = total_free_space -
					space_before_wrap;

			memmove(logger->log_buffer +
					logger->buffer_write_offset,
					entry->buf, space_before_wrap);
			memmove(logger->log_buffer, entry->buf +
					space_before_wrap, space_after_wrap);

			logger->buffer_write_offset = space_after_wrap;
			logger->write_wrap_count++;

		} else {
			/* Not enough room remaining, we should flush
			 * existing logs */

			/* Flush existing unread logs to console */
			flush_to_debug_console(logger);
			dm_logger_flush_buffer(logger, true);

			/* Start writing to beginning of buffer */
			memmove(logger->log_buffer, entry->buf, size);
@@ -325,9 +290,10 @@ void dm_logger_write(
		log_heading(&entry);

		size = dm_log_to_buffer(
			buffer, LOG_MAX_LINE_SIZE, msg, args);
			buffer, LOG_MAX_LINE_SIZE - 1, msg, args);

		entry.buf_offset += size;
		buffer[entry.buf_offset + size] = '\0';
		entry.buf_offset += size + 1;

		/* --Flush log_entry buffer-- */
		/* print to kernel console */
+0 −37
Original line number Diff line number Diff line
@@ -26,42 +26,5 @@
#ifndef __DAL_LOGGER_H__
#define __DAL_LOGGER_H__

/* Structure for keeping track of offsets, buffer, etc */

#define DAL_LOGGER_BUFFER_MAX_SIZE 2048

/*Connectivity log needs to output EDID, which needs at lease 256x3 bytes,
 * change log line size to 896 to meet the request.
 */
#define LOG_MAX_LINE_SIZE 896

#include "include/logger_types.h"

struct dal_logger {

	/* How far into the circular buffer has been read by dsat
	 * Read offset should never cross write offset. Write \0's to
	 * read data just to be sure?
	 */
	uint32_t buffer_read_offset;

	/* How far into the circular buffer we have written
	 * Write offset should never cross read offset
	 */
	uint32_t buffer_write_offset;

	uint32_t write_wrap_count;
	uint32_t read_wrap_count;

	uint32_t open_count;

	char *log_buffer;	/* Pointer to malloc'ed buffer */
	uint32_t log_buffer_size; /* Size of circular buffer */

	uint32_t mask; /*array of masks for major elements*/

	union logger_flags flags;
	struct dc_context *ctx;
};

#endif /* __DAL_LOGGER_H__ */
+4 −1
Original line number Diff line number Diff line
@@ -682,6 +682,7 @@ bool dcn_validate_bandwidth(
	bool bw_limit_pass;
	float bw_limit;

	PERFORMANCE_TRACE_START();
	if (dcn_bw_apply_registry_override(dc))
		dcn_bw_sync_calcs_and_dml(dc);

@@ -1089,6 +1090,8 @@ bool dcn_validate_bandwidth(

	kernel_fpu_end();

	PERFORMANCE_TRACE_END();

	if (bw_limit_pass && v->voltage_level != 5)
		return true;
	else
@@ -1223,7 +1226,7 @@ unsigned int dcn_find_dcfclk_suits_all(
	else
		dcf_clk =  dc->dcn_soc->dcfclkv_min0p65*1000;

	dm_logger_write(dc->ctx->logger, LOG_HW_MARKS,
	dm_logger_write(dc->ctx->logger, LOG_BANDWIDTH_CALCS,
		"\tdcf_clk for voltage = %d\n", dcf_clk);
	return dcf_clk;
}
+1 −0
Original line number Diff line number Diff line
@@ -224,6 +224,7 @@ struct dc_debug {
	bool disable_dpp_pg;
	bool disable_stereo_support;
	bool vsr_support;
	bool performance_trace;
};
struct dc_state;
struct resource_pool;
Loading