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

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
...@@ -67,13 +67,9 @@ struct link_mst_stream_allocation_table { ...@@ -67,13 +67,9 @@ struct link_mst_stream_allocation_table {
struct link_mst_stream_allocation stream_allocations[MAX_CONTROLLER_NUM]; struct link_mst_stream_allocation stream_allocations[MAX_CONTROLLER_NUM];
}; };
struct time_stamp { struct edp_trace_power_timestamps {
uint64_t edp_poweroff; uint64_t poweroff;
uint64_t edp_poweron; uint64_t poweron;
};
struct link_trace {
struct time_stamp time_stamp;
}; };
struct dp_trace_lt_counts { struct dp_trace_lt_counts {
...@@ -96,6 +92,7 @@ struct dp_trace { ...@@ -96,6 +92,7 @@ struct dp_trace {
struct dp_trace_lt commit_lt_trace; struct dp_trace_lt commit_lt_trace;
unsigned int link_loss_count; unsigned int link_loss_count;
bool is_initialized; bool is_initialized;
struct edp_trace_power_timestamps edp_trace_power_timestamps;
}; };
/* PSR feature flags */ /* PSR feature flags */
...@@ -231,7 +228,6 @@ struct dc_link { ...@@ -231,7 +228,6 @@ struct dc_link {
struct dc_link_status link_status; struct dc_link_status link_status;
struct dprx_states dprx_states; struct dprx_states dprx_states;
struct link_trace link_trace;
struct gpio *hpd_gpio; struct gpio *hpd_gpio;
enum dc_link_fec_state fec_state; enum dc_link_fec_state fec_state;
}; };
......
...@@ -67,6 +67,7 @@ ...@@ -67,6 +67,7 @@
#include "dcn10/dcn10_hw_sequencer.h" #include "dcn10/dcn10_hw_sequencer.h"
#include "link/link_dp_trace.h"
#include "dce110_hw_sequencer.h" #include "dce110_hw_sequencer.h"
#define GAMMA_HW_POINTS_NUM 256 #define GAMMA_HW_POINTS_NUM 256
...@@ -819,19 +820,19 @@ void dce110_edp_power_control( ...@@ -819,19 +820,19 @@ void dce110_edp_power_control(
div64_u64(dm_get_elapse_time_in_ns( div64_u64(dm_get_elapse_time_in_ns(
ctx, ctx,
current_ts, 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 = unsigned long long time_since_edp_poweron_ms =
div64_u64(dm_get_elapse_time_in_ns( div64_u64(dm_get_elapse_time_in_ns(
ctx, ctx,
current_ts, current_ts,
link->link_trace.time_stamp.edp_poweron), 1000000); dp_trace_get_edp_poweron_timestamp(link)), 1000000);
DC_LOG_HW_RESUME_S3( 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", "%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__, __func__,
power_up, power_up,
current_ts, current_ts,
link->link_trace.time_stamp.edp_poweroff, dp_trace_get_edp_poweroff_timestamp(link),
link->link_trace.time_stamp.edp_poweron, dp_trace_get_edp_poweron_timestamp(link),
time_since_edp_poweroff_ms, time_since_edp_poweroff_ms,
time_since_edp_poweron_ms); time_since_edp_poweron_ms);
...@@ -846,7 +847,7 @@ void dce110_edp_power_control( ...@@ -846,7 +847,7 @@ void dce110_edp_power_control(
link->local_sink->edid_caps.panel_patch.extra_t12_ms; link->local_sink->edid_caps.panel_patch.extra_t12_ms;
/* Adjust remaining_min_edp_poweroff_time_ms if this is not the first time. */ /* 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) if (time_since_edp_poweroff_ms < remaining_min_edp_poweroff_time_ms)
remaining_min_edp_poweroff_time_ms = remaining_min_edp_poweroff_time_ms =
remaining_min_edp_poweroff_time_ms - time_since_edp_poweroff_ms; remaining_min_edp_poweroff_time_ms - time_since_edp_poweroff_ms;
...@@ -904,17 +905,13 @@ void dce110_edp_power_control( ...@@ -904,17 +905,13 @@ void dce110_edp_power_control(
__func__, (power_up ? "On":"Off"), __func__, (power_up ? "On":"Off"),
bp_result); bp_result);
if (!power_up) dp_trace_set_edp_power_timestamp(link, 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);
DC_LOG_HW_RESUME_S3( DC_LOG_HW_RESUME_S3(
"%s: updated values: edp_poweroff=%llu edp_poweron=%llu\n", "%s: updated values: edp_poweroff=%llu edp_poweron=%llu\n",
__func__, __func__,
link->link_trace.time_stamp.edp_poweroff, dp_trace_get_edp_poweroff_timestamp(link),
link->link_trace.time_stamp.edp_poweron); dp_trace_get_edp_poweron_timestamp(link));
if (bp_result != BP_RESULT_OK) if (bp_result != BP_RESULT_OK)
DC_LOG_ERROR( DC_LOG_ERROR(
...@@ -942,14 +939,14 @@ void dce110_edp_wait_for_T12( ...@@ -942,14 +939,14 @@ void dce110_edp_wait_for_T12(
return; return;
if (!link->panel_cntl->funcs->is_panel_powered_on(link->panel_cntl) && 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 int t12_duration = 500; // Default T12 as per spec
unsigned long long current_ts = dm_get_timestamp(ctx); unsigned long long current_ts = dm_get_timestamp(ctx);
unsigned long long time_since_edp_poweroff_ms = unsigned long long time_since_edp_poweroff_ms =
div64_u64(dm_get_elapse_time_in_ns( div64_u64(dm_get_elapse_time_in_ns(
ctx, ctx,
current_ts, 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 t12_duration += link->local_sink->edid_caps.panel_patch.extra_t12_ms; // Add extra T12
......
...@@ -144,3 +144,23 @@ unsigned int dc_dp_trace_get_link_loss_count(struct dc_link *link) ...@@ -144,3 +144,23 @@ unsigned int dc_dp_trace_get_link_loss_count(struct dc_link *link)
{ {
return link->dp_trace.link_loss_count; 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
...@@ -54,4 +54,9 @@ struct dp_trace_lt_counts *dc_dp_trace_get_lt_counts(struct dc_link *link, ...@@ -54,4 +54,9 @@ struct dp_trace_lt_counts *dc_dp_trace_get_lt_counts(struct dc_link *link,
bool in_detection); bool in_detection);
unsigned int dc_dp_trace_get_link_loss_count(struct dc_link *link); 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__ */ #endif /* __LINK_DP_TRACE_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment