diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4508-drm-amd-display-add-force-Type0-1-flag.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4508-drm-amd-display-add-force-Type0-1-flag.patch | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4508-drm-amd-display-add-force-Type0-1-flag.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4508-drm-amd-display-add-force-Type0-1-flag.patch new file mode 100644 index 00000000..58278366 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4508-drm-amd-display-add-force-Type0-1-flag.patch @@ -0,0 +1,157 @@ +From bc8f313777b528428a92ed7477258eb6c38dbbe0 Mon Sep 17 00:00:00 2001 +From: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +Date: Thu, 29 Aug 2019 15:26:54 -0400 +Subject: [PATCH 4508/4736] drm/amd/display: add force Type0/1 flag + +[Why] +Before we had a disable_type1 flag, this forced HDCP 2.2 to type0 +There was no way to force type1. + +[How] +Remove disable_type1 flag and instead add a flag to force type0/1. + +Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +Reviewed-by: Harry Wentland <harry.wentland@amd.com> +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +- + .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c | 12 +++++++++--- + .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h | 2 +- + .../drm/amd/display/modules/hdcp/hdcp2_transition.c | 2 +- + drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c | 7 +++++-- + drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h | 11 +++++++++-- + 6 files changed, 26 insertions(+), 10 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index 9ca6806f7cef..430008124373 100755 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -6728,7 +6728,7 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state) + if (is_content_protection_different(new_con_state, old_con_state, connector, adev->dm.hdcp_workqueue)) + hdcp_update_display( + adev->dm.hdcp_workqueue, aconnector->dc_link->link_index, aconnector, +- new_con_state->hdcp_content_type == DRM_MODE_HDCP_CONTENT_TYPE0 ? true : false, ++ new_con_state->hdcp_content_type, + new_con_state->content_protection == DRM_MODE_CONTENT_PROTECTION_DESIRED ? true + : false); + } +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 53e382bff54d..244a8e80334a 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 +@@ -90,7 +90,7 @@ static void process_output(struct hdcp_workqueue *hdcp_work) + void hdcp_update_display(struct hdcp_workqueue *hdcp_work, + unsigned int link_index, + struct amdgpu_dm_connector *aconnector, +- bool disable_type1, ++ uint8_t content_type, + bool enable_encryption) + { + struct hdcp_workqueue *hdcp_w = &hdcp_work[link_index]; +@@ -108,9 +108,15 @@ void hdcp_update_display(struct hdcp_workqueue *hdcp_work, + memcpy(display, query.display, sizeof(struct mod_hdcp_display)); + mod_hdcp_remove_display(&hdcp_w->hdcp, aconnector->base.index, &hdcp_w->output); + ++ hdcp_w->link.adjust.hdcp2.force_type = MOD_HDCP_FORCE_TYPE_0; ++ + if (enable_encryption) { + display->adjust.disable = 0; +- hdcp_w->link.adjust.hdcp2.disable_type1 = disable_type1; ++ if (content_type == DRM_MODE_HDCP_CONTENT_TYPE0) ++ hdcp_w->link.adjust.hdcp2.force_type = MOD_HDCP_FORCE_TYPE_0; ++ else if (content_type == DRM_MODE_HDCP_CONTENT_TYPE1) ++ hdcp_w->link.adjust.hdcp2.force_type = MOD_HDCP_FORCE_TYPE_1; ++ + schedule_delayed_work(&hdcp_w->property_validate_dwork, + msecs_to_jiffies(DRM_HDCP_CHECK_PERIOD_MS)); + } else { +@@ -308,7 +314,7 @@ static void update_config(void *handle, struct cp_psp_stream_config *config) + display->adjust.disable = 1; + link->adjust.auth_delay = 2; + +- hdcp_update_display(hdcp_work, link_index, aconnector, false, false); ++ hdcp_update_display(hdcp_work, link_index, aconnector, DRM_MODE_HDCP_CONTENT_TYPE0, false); + } + + struct hdcp_workqueue *hdcp_create_workqueue(void *psp_context, struct cp_psp *cp_psp, struct dc *dc) +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h +index 71e121f037cb..6abde86bce4a 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h +@@ -57,7 +57,7 @@ struct hdcp_workqueue { + void hdcp_update_display(struct hdcp_workqueue *hdcp_work, + unsigned int link_index, + struct amdgpu_dm_connector *aconnector, +- bool disable_type1, ++ uint8_t content_type, + bool enable_encryption); + + void hdcp_reset_display(struct hdcp_workqueue *work, unsigned int link_index); +diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_transition.c b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_transition.c +index 94a0e5fa931b..e8043c903a84 100644 +--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_transition.c ++++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_transition.c +@@ -570,7 +570,7 @@ enum mod_hdcp_status mod_hdcp_hdcp2_dp_transition(struct mod_hdcp *hdcp, + break; + } else if (input->link_integrity_check_dp != PASS) { + if (hdcp->connection.hdcp2_retry_count >= 1) +- adjust->hdcp2.disable_type1 = 1; ++ adjust->hdcp2.force_type = MOD_HDCP_FORCE_TYPE_0; + fail_and_restart_in_ms(0, &status, output); + break; + } else if (event_ctx->rx_id_list_ready && conn->is_repeater) { +diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c +index a9511612f426..2dd5feec8e6c 100644 +--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c ++++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp_psp.c +@@ -358,10 +358,13 @@ enum mod_hdcp_status mod_hdcp_hdcp2_create_session(struct mod_hdcp *hdcp) + + hdcp_cmd->in_msg.hdcp2_create_session_v2.display_handle = display->index; + +- if (hdcp->connection.link.adjust.hdcp2.disable_type1) ++ if (hdcp->connection.link.adjust.hdcp2.force_type == MOD_HDCP_FORCE_TYPE_0) + hdcp_cmd->in_msg.hdcp2_create_session_v2.negotiate_content_type = + TA_HDCP2_CONTENT_TYPE_NEGOTIATION_TYPE__FORCE_TYPE0; +- else ++ else if (hdcp->connection.link.adjust.hdcp2.force_type == MOD_HDCP_FORCE_TYPE_1) ++ hdcp_cmd->in_msg.hdcp2_create_session_v2.negotiate_content_type = ++ TA_HDCP2_CONTENT_TYPE_NEGOTIATION_TYPE__FORCE_TYPE1; ++ else if (hdcp->connection.link.adjust.hdcp2.force_type == MOD_HDCP_FORCE_TYPE_MAX) + hdcp_cmd->in_msg.hdcp2_create_session_v2.negotiate_content_type = + TA_HDCP2_CONTENT_TYPE_NEGOTIATION_TYPE__MAX_SUPPORTED; + +diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h b/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h +index 97ecbf5bfec1..ff2bb2bfbb53 100644 +--- a/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h ++++ b/drivers/gpu/drm/amd/display/modules/inc/mod_hdcp.h +@@ -158,12 +158,18 @@ struct mod_hdcp_link_adjustment_hdcp1 { + uint8_t reserved : 6; + }; + ++enum mod_hdcp_force_hdcp_type { ++ MOD_HDCP_FORCE_TYPE_MAX = 0, ++ MOD_HDCP_FORCE_TYPE_0, ++ MOD_HDCP_FORCE_TYPE_1 ++}; ++ + struct mod_hdcp_link_adjustment_hdcp2 { + uint8_t disable : 1; +- uint8_t disable_type1 : 1; ++ uint8_t force_type : 2; + uint8_t force_no_stored_km : 1; + uint8_t increase_h_prime_timeout: 1; +- uint8_t reserved : 4; ++ uint8_t reserved : 3; + }; + + struct mod_hdcp_link_adjustment { +@@ -185,6 +191,7 @@ struct mod_hdcp_trace { + enum mod_hdcp_encryption_status { + MOD_HDCP_ENCRYPTION_STATUS_HDCP_OFF = 0, + MOD_HDCP_ENCRYPTION_STATUS_HDCP1_ON, ++ MOD_HDCP_ENCRYPTION_STATUS_HDCP2_ON, + MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE0_ON, + MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE1_ON + }; +-- +2.17.1 + |