drm/amd/display: Move link_trace for edp to dp_trace
authorLeo (Hanghong) Ma <hanghong.ma@amd.com>
Wed, 23 Mar 2022 19:35:57 +0000 (15:35 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 5 Apr 2022 14:29:48 +0000 (10:29 -0400)
[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>
drivers/gpu/drm/amd/display/dc/dc_link.h
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
drivers/gpu/drm/amd/display/dc/link/link_dp_trace.c
drivers/gpu/drm/amd/display/dc/link/link_dp_trace.h

index aa818bf..a3c37ee 100644 (file)
@@ -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;
 };
index 248602c..9fc1ba1 100644 (file)
@@ -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
 
index e704739..2c1a3bf 100644 (file)
@@ -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
index 702f97c..26700e3 100644 (file)
@@ -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__ */