drm/amd/display: add way to determine if link is active
authorAnthony Koo <Anthony.Koo@amd.com>
Sun, 20 Jan 2019 06:32:55 +0000 (01:32 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 6 Feb 2019 18:30:59 +0000 (13:30 -0500)
[Why]
Need to understand whether link is active aside from stream state.
This could be used to check what links are enabled by GOP.

[How]
Store link_active state in link status and initialize it by checking
if the DIG is enabled.
Keep it updated on every link enable and disable

Signed-off-by: Anthony Koo <Anthony.Koo@amd.com>
Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link.c
drivers/gpu/drm/amd/display/dc/dc_link.h
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c

index 137d3c1266320687bbaee945e8e1384f7898cf21..e2e7bf2ba84b93916b700846e7ace531677e0f27 100644 (file)
@@ -2612,6 +2612,8 @@ void core_link_enable_stream(
                        }
                }
 
+               stream->link->link_status.link_active = true;
+
                core_dc->hwss.enable_audio_stream(pipe_ctx);
 
                /* turn off otg test pattern if enable */
@@ -2646,6 +2648,8 @@ void core_link_disable_stream(struct pipe_ctx *pipe_ctx, int option)
        core_dc->hwss.disable_stream(pipe_ctx, option);
 
        disable_link(pipe_ctx->stream->link, pipe_ctx->stream->signal);
+
+       pipe_ctx->stream->link->link_status.link_active = false;
 }
 
 void core_link_set_avmute(struct pipe_ctx *pipe_ctx, bool enable)
index d26bbda61ad278c330b3f0da84616c5acc5a0687..8fc223defed4abcecde1af18c76135ccdf3fb313 100644 (file)
@@ -30,6 +30,7 @@
 #include "grph_object_defs.h"
 
 struct dc_link_status {
+       bool link_active;
        struct dpcd_caps *dpcd_caps;
 };
 
index 7cead0398c159268b496f81a640803a9ae710f89..7117144d48bdebb2a39d7d4c21e15d77ef0176aa 100644 (file)
@@ -1027,6 +1027,11 @@ static void dcn10_init_hw(struct dc *dc)
                                dc->hwss.edp_power_control(link, true);
 
                        link->link_enc->funcs->hw_init(link->link_enc);
+
+                       /* Check for enabled DIG to identify enabled display */
+                       if (link->link_enc->funcs->is_dig_enabled &&
+                               link->link_enc->funcs->is_dig_enabled(link->link_enc))
+                               link->link_status.link_active = true;
                }
        }