drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_trace.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_trace.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_trace.c
Extension
.c
Size
5010 bytes
Lines
173
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

#include "link_dp_trace.h"
#include "link/protocols/link_dpcd.h"

void dp_trace_init(struct dc_link *link)
{
	memset(&link->dp_trace, 0, sizeof(link->dp_trace));
	link->dp_trace.is_initialized = true;
}

void dp_trace_reset(struct dc_link *link)
{
	memset(&link->dp_trace, 0, sizeof(link->dp_trace));
}

bool dp_trace_is_initialized(struct dc_link *link)
{
	return link->dp_trace.is_initialized;
}

void dp_trace_detect_lt_init(struct dc_link *link)
{
	memset(&link->dp_trace.detect_lt_trace, 0, sizeof(link->dp_trace.detect_lt_trace));
}

void dp_trace_commit_lt_init(struct dc_link *link)
{
	memset(&link->dp_trace.commit_lt_trace, 0, sizeof(link->dp_trace.commit_lt_trace));
}

void dp_trace_link_loss_increment(struct dc_link *link)
{
	link->dp_trace.link_loss_count++;
}

void dp_trace_lt_fail_count_update(struct dc_link *link,
		unsigned int fail_count,
		bool in_detection)
{
	if (in_detection)
		link->dp_trace.detect_lt_trace.counts.fail = fail_count;
	else
		link->dp_trace.commit_lt_trace.counts.fail = fail_count;
}

void dp_trace_lt_total_count_increment(struct dc_link *link,
		bool in_detection)
{
	if (in_detection)
		link->dp_trace.detect_lt_trace.counts.total++;
	else
		link->dp_trace.commit_lt_trace.counts.total++;
}

void dp_trace_set_is_logged_flag(struct dc_link *link,
		bool in_detection,
		bool is_logged)
{
	if (in_detection)
		link->dp_trace.detect_lt_trace.is_logged = is_logged;
	else
		link->dp_trace.commit_lt_trace.is_logged = is_logged;
}

bool dp_trace_is_logged(struct dc_link *link, bool in_detection)
{
	if (in_detection)
		return link->dp_trace.detect_lt_trace.is_logged;
	else
		return link->dp_trace.commit_lt_trace.is_logged;
}

void dp_trace_lt_result_update(struct dc_link *link,
		enum link_training_result result,
		bool in_detection)
{
	if (in_detection)
		link->dp_trace.detect_lt_trace.result = result;
	else
		link->dp_trace.commit_lt_trace.result = result;
}

void dp_trace_set_lt_start_timestamp(struct dc_link *link,
		bool in_detection)
{
	if (in_detection)
		link->dp_trace.detect_lt_trace.timestamps.start = dm_get_timestamp(link->dc->ctx);
	else
		link->dp_trace.commit_lt_trace.timestamps.start = dm_get_timestamp(link->dc->ctx);
}

Annotation

Implementation Notes