Commit 176cd438 authored by Leo (Hanghong) Ma's avatar Leo (Hanghong) Ma Committed by Alex Deucher
Browse files

drm/amd/display: Move link_trace for edp to dp_trace



[Why & How]
The dp_trace structure is self contained component designed for
all dp trace, and the edp link trace should be a part of it;

Suggested-by: default avatarWenjing Liu <wenjing.liu@amd.com>

Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: default avatarWenjing Liu <Wenjing.Liu@amd.com>
Reviewed-by: default avatarCharlene Liu <Charlene.Liu@amd.com>
Acked-by: default avatarTom Chung <chiahsuan.chung@amd.com>
Signed-off-by: default avatarLeo (Hanghong) Ma <hanghong.ma@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 68cdbf63
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -67,13 +67,9 @@ struct link_mst_stream_allocation_table {
	struct link_mst_stream_allocation stream_allocations[MAX_CONTROLLER_NUM];
};

struct time_stamp {
	uint64_t edp_poweroff;
	uint64_t edp_poweron;
};

struct link_trace {
	struct time_stamp time_stamp;
struct edp_trace_power_timestamps {
	uint64_t poweroff;
	uint64_t poweron;
};

struct dp_trace_lt_counts {
@@ -96,6 +92,7 @@ struct dp_trace {
	struct dp_trace_lt commit_lt_trace;
	unsigned int link_loss_count;
	bool is_initialized;
	struct edp_trace_power_timestamps edp_trace_power_timestamps;
};

/* PSR feature flags */
@@ -231,7 +228,6 @@ struct dc_link {
	struct dc_link_status link_status;
	struct dprx_states dprx_states;

	struct link_trace link_trace;
	struct gpio *hpd_gpio;
	enum dc_link_fec_state fec_state;
};
+11 −14
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@

#include "dcn10/dcn10_hw_sequencer.h"

#include "link/link_dp_trace.h"
#include "dce110_hw_sequencer.h"

#define GAMMA_HW_POINTS_NUM 256
@@ -819,19 +820,19 @@ void dce110_edp_power_control(
				div64_u64(dm_get_elapse_time_in_ns(
						ctx,
						current_ts,
						link->link_trace.time_stamp.edp_poweroff), 1000000);
						dp_trace_get_edp_poweroff_timestamp(link)), 1000000);
		unsigned long long time_since_edp_poweron_ms =
				div64_u64(dm_get_elapse_time_in_ns(
						ctx,
						current_ts,
						link->link_trace.time_stamp.edp_poweron), 1000000);
						dp_trace_get_edp_poweron_timestamp(link)), 1000000);
		DC_LOG_HW_RESUME_S3(
				"%s: transition: power_up=%d current_ts=%llu edp_poweroff=%llu edp_poweron=%llu time_since_edp_poweroff_ms=%llu time_since_edp_poweron_ms=%llu",
				__func__,
				power_up,
				current_ts,
				link->link_trace.time_stamp.edp_poweroff,
				link->link_trace.time_stamp.edp_poweron,
				dp_trace_get_edp_poweroff_timestamp(link),
				dp_trace_get_edp_poweron_timestamp(link),
				time_since_edp_poweroff_ms,
				time_since_edp_poweron_ms);

@@ -846,7 +847,7 @@ void dce110_edp_power_control(
					link->local_sink->edid_caps.panel_patch.extra_t12_ms;

			/* Adjust remaining_min_edp_poweroff_time_ms if this is not the first time. */
			if (link->link_trace.time_stamp.edp_poweroff != 0) {
			if (dp_trace_get_edp_poweroff_timestamp(link) != 0) {
				if (time_since_edp_poweroff_ms < remaining_min_edp_poweroff_time_ms)
					remaining_min_edp_poweroff_time_ms =
						remaining_min_edp_poweroff_time_ms - time_since_edp_poweroff_ms;
@@ -904,17 +905,13 @@ void dce110_edp_power_control(
				__func__, (power_up ? "On":"Off"),
				bp_result);

		if (!power_up)
			/*save driver power off time stamp*/
			link->link_trace.time_stamp.edp_poweroff = dm_get_timestamp(ctx);
		else
			link->link_trace.time_stamp.edp_poweron = dm_get_timestamp(ctx);
		dp_trace_set_edp_power_timestamp(link, power_up);

		DC_LOG_HW_RESUME_S3(
				"%s: updated values: edp_poweroff=%llu edp_poweron=%llu\n",
				__func__,
				link->link_trace.time_stamp.edp_poweroff,
				link->link_trace.time_stamp.edp_poweron);
				dp_trace_get_edp_poweroff_timestamp(link),
				dp_trace_get_edp_poweron_timestamp(link));

		if (bp_result != BP_RESULT_OK)
			DC_LOG_ERROR(
@@ -942,14 +939,14 @@ void dce110_edp_wait_for_T12(
		return;

	if (!link->panel_cntl->funcs->is_panel_powered_on(link->panel_cntl) &&
			link->link_trace.time_stamp.edp_poweroff != 0) {
			dp_trace_get_edp_poweroff_timestamp(link) != 0) {
		unsigned int t12_duration = 500; // Default T12 as per spec
		unsigned long long current_ts = dm_get_timestamp(ctx);
		unsigned long long time_since_edp_poweroff_ms =
				div64_u64(dm_get_elapse_time_in_ns(
						ctx,
						current_ts,
						link->link_trace.time_stamp.edp_poweroff), 1000000);
						dp_trace_get_edp_poweroff_timestamp(link)), 1000000);

		t12_duration += link->local_sink->edid_caps.panel_patch.extra_t12_ms; // Add extra T12

+20 −0
Original line number Diff line number Diff line
@@ -144,3 +144,23 @@ unsigned int dc_dp_trace_get_link_loss_count(struct dc_link *link)
{
	return link->dp_trace.link_loss_count;
}

void dp_trace_set_edp_power_timestamp(struct dc_link *link,
		bool power_up)
{
	if (!power_up)
		/*save driver power off time stamp*/
		link->dp_trace.edp_trace_power_timestamps.poweroff = dm_get_timestamp(link->dc->ctx);
	else
		link->dp_trace.edp_trace_power_timestamps.poweron = dm_get_timestamp(link->dc->ctx);
}

uint64_t dp_trace_get_edp_poweron_timestamp(struct dc_link *link)
{
	return link->dp_trace.edp_trace_power_timestamps.poweron;
}

uint64_t dp_trace_get_edp_poweroff_timestamp(struct dc_link *link)
{
	return link->dp_trace.edp_trace_power_timestamps.poweroff;
}
 No newline at end of file
+5 −0
Original line number Diff line number Diff line
@@ -54,4 +54,9 @@ struct dp_trace_lt_counts *dc_dp_trace_get_lt_counts(struct dc_link *link,
		bool in_detection);
unsigned int dc_dp_trace_get_link_loss_count(struct dc_link *link);

void dp_trace_set_edp_power_timestamp(struct dc_link *link,
		bool power_up);
uint64_t dp_trace_get_edp_poweron_timestamp(struct dc_link *link);
uint64_t dp_trace_get_edp_poweroff_timestamp(struct dc_link *link);

#endif /* __LINK_DP_TRACE_H__ */