From: Wayne Lin <[email protected]>

[Why]
While updating the config of hdcp, we use the sink_singal type of the
dc_sink to decide the HDCP operation mode. However, it doesn't consider
the case when the sink is a emulated one.

[How]
Take dc_em_sink into account while updating HDCP config.

Reviewed-by: Aurabindo Jayamohanan Pillai <[email protected]>
Acked-by: Rodrigo Siqueira <[email protected]>
Signed-off-by: Wayne Lin <[email protected]>
---
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c    | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
index 236a5ebab5ab..71e6d98410fc 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
@@ -448,6 +448,8 @@ static void update_config(void *handle, struct 
cp_psp_stream_config *config)
        struct mod_hdcp_display *display = &hdcp_work[link_index].display;
        struct mod_hdcp_link *link = &hdcp_work[link_index].link;
        struct drm_connector_state *conn_state;
+       struct dc_sink *sink = NULL;
+       bool link_is_hdcp14 = false;
 
        if (config->dpms_off) {
                hdcp_remove_display(hdcp_work, link_index, aconnector);
@@ -460,8 +462,13 @@ static void update_config(void *handle, struct 
cp_psp_stream_config *config)
        display->index = aconnector->base.index;
        display->state = MOD_HDCP_DISPLAY_ACTIVE;
 
-       if (aconnector->dc_sink != NULL)
-               link->mode = 
mod_hdcp_signal_type_to_operation_mode(aconnector->dc_sink->sink_signal);
+       if (aconnector->dc_sink)
+               sink = aconnector->dc_sink;
+       else if (aconnector->dc_em_sink)
+               sink = aconnector->dc_em_sink;
+
+       if (sink != NULL)
+               link->mode = 
mod_hdcp_signal_type_to_operation_mode(sink->sink_signal);
 
        display->controller = CONTROLLER_ID_D0 + config->otg_inst;
        display->dig_fe = config->dig_fe;
@@ -472,8 +479,8 @@ static void update_config(void *handle, struct 
cp_psp_stream_config *config)
        link->dio_output_id = config->dio_output_idx;
        link->phy_idx = config->phy_idx;
 
-       link->hdcp_supported_informational = 
dc_link_is_hdcp14(aconnector->dc_link,
-                       aconnector->dc_sink->sink_signal) ? 1 : 0;
+       if (sink)
+               link_is_hdcp14 = dc_link_is_hdcp14(aconnector->dc_link, 
sink->sink_signal);
        link->hdcp_supported_informational = link_is_hdcp14;
        link->dp.rev = aconnector->dc_link->dpcd_caps.dpcd_rev.raw;
        link->dp.assr_enabled = config->assr_enabled;
-- 
2.25.1

Reply via email to