]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amd/display: determine is mst hdcp based on stream instead of sink signal
authorWenjing Liu <Wenjing.Liu@amd.com>
Mon, 24 Feb 2020 22:22:36 +0000 (17:22 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 9 Mar 2020 17:49:06 +0000 (13:49 -0400)
[why]
It is possible even if sink signal is MST but driver enables SST stream.
We should not determine if we should do MST authentication based on
sink's capability.
Instead we should determine whether to do MST authentication based on
what we have enabled in stream.

Signed-off-by: Wenjing Liu <Wenjing.Liu@amd.com>
Reviewed-by: Ashley Thomas <Ashley.Thomas2@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c
drivers/gpu/drm/amd/display/dc/core/dc_link.c
drivers/gpu/drm/amd/display/dc/dm_cp_psp.h
drivers/gpu/drm/amd/display/modules/hdcp/hdcp.c
drivers/gpu/drm/amd/display/modules/hdcp/hdcp.h
drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h

index c4fd148bf6e0f1ee39b0434a0656bf0ee1097788..5b70ed3cdb884ff13a42d69501204683ce80f349 100644 (file)
@@ -412,6 +412,7 @@ static void update_config(void *handle, struct cp_psp_stream_config *config)
        link->dig_be = config->link_enc_inst;
        link->ddc_line = aconnector->dc_link->ddc_hw_inst + 1;
        link->dp.rev = aconnector->dc_link->dpcd_caps.dpcd_rev.raw;
+       link->dp.mst_supported = config->mst_supported;
        display->adjust.disable = 1;
        link->adjust.auth_delay = 2;
 
index a4680968c8f41b9a7089316b3d99f4be203eddf3..ddd4dca61cc3e4126a265bc515ba5d83c2ebc088 100644 (file)
@@ -2959,6 +2959,8 @@ static void update_psp_stream_config(struct pipe_ctx *pipe_ctx, bool dpms_off)
                config.link_enc_inst = pipe_ctx->stream->link->link_enc_hw_inst;
                config.dpms_off = dpms_off;
                config.dm_stream_ctx = pipe_ctx->stream->dm_stream_context;
+               config.mst_supported = (pipe_ctx->stream->signal ==
+                               SIGNAL_TYPE_DISPLAY_PORT_MST);
                cp_psp->funcs.update_stream_config(cp_psp->handle, &config);
        }
 }
index 626d22d437f467f9f84d77ffe28aad63d5b1a1fc..968c46dfb50621a53acdecb75950cc0586efa9a9 100644 (file)
@@ -32,6 +32,7 @@ struct cp_psp_stream_config {
        uint8_t otg_inst;
        uint8_t link_enc_inst;
        uint8_t stream_enc_inst;
+       uint8_t mst_supported;
        void *dm_stream_ctx;
        bool dpms_off;
 };
index bcba93d3b195d066c8339d53f4ee09eb1fd7a520..7a571b3f62d6e347b8249714c1d15423abf66312 100644 (file)
@@ -481,10 +481,8 @@ enum mod_hdcp_operation_mode mod_hdcp_signal_type_to_operation_mode(
                break;
        case SIGNAL_TYPE_EDP:
        case SIGNAL_TYPE_DISPLAY_PORT:
-               mode = MOD_HDCP_MODE_DP;
-               break;
        case SIGNAL_TYPE_DISPLAY_PORT_MST:
-               mode = MOD_HDCP_MODE_DP_MST;
+               mode = MOD_HDCP_MODE_DP;
                break;
        default:
                break;
index 77fdcec4263e9984f4f3abffa64ad7985d2a10a0..5cb4546be0ef04c7e8a66f1ed33f7c2e4f9641e8 100644 (file)
@@ -392,13 +392,13 @@ enum mod_hdcp_status mod_hdcp_write_content_type(struct mod_hdcp *hdcp);
 /* hdcp version helpers */
 static inline uint8_t is_dp_hdcp(struct mod_hdcp *hdcp)
 {
-       return (hdcp->connection.link.mode == MOD_HDCP_MODE_DP ||
-                       hdcp->connection.link.mode == MOD_HDCP_MODE_DP_MST);
+       return (hdcp->connection.link.mode == MOD_HDCP_MODE_DP);
 }
 
 static inline uint8_t is_dp_mst_hdcp(struct mod_hdcp *hdcp)
 {
-       return (hdcp->connection.link.mode == MOD_HDCP_MODE_DP_MST);
+       return (hdcp->connection.link.mode == MOD_HDCP_MODE_DP &&
+                       hdcp->connection.link.dp.mst_supported);
 }
 
 static inline uint8_t is_hdmi_dvi_sl_hdcp(struct mod_hdcp *hdcp)
index bb855ea5d5a3031a7a5cc7f862f47eafcff6a235..c088602bc1a03cfe413980a84b6386d10b83ec6b 100644 (file)
@@ -102,6 +102,7 @@ enum mod_hdcp_status {
 struct mod_hdcp_displayport {
        uint8_t rev;
        uint8_t assr_supported;
+       uint8_t mst_supported;
 };
 
 struct mod_hdcp_hdmi {
@@ -110,8 +111,7 @@ struct mod_hdcp_hdmi {
 enum mod_hdcp_operation_mode {
        MOD_HDCP_MODE_OFF,
        MOD_HDCP_MODE_DEFAULT,
-       MOD_HDCP_MODE_DP,
-       MOD_HDCP_MODE_DP_MST
+       MOD_HDCP_MODE_DP
 };
 
 enum mod_hdcp_display_state {