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: Wenjing Liu <wenjing.liu@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com> Reviewed-by: Charlene Liu <Charlene.Liu@amd.com> Acked-by: Tom Chung <chiahsuan.chung@amd.com> Signed-off-by: Leo (Hanghong) Ma <hanghong.ma@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
68cdbf631b
commit
176cd4385a
@ -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;
|
||||
};
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
}
|
@ -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__ */
|
||||
|
Loading…
Reference in New Issue
Block a user