<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<p style="font-family:Arial;font-size:11pt;color:#0078D7;margin:5pt;" align="Left">
[AMD Official Use Only - Internal Distribution Only]<br>
</p>
<br>
<div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
This patch introduces a null pointer deref on MST hotplug, so this shall be dropped.<br>
</div>
<div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="Signature">
<div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
--</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks & Regards,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Aurabindo Pillai<br>
</div>
</div>
</div>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Aurabindo Pillai <aurabindo.pillai@amd.com><br>
<b>Sent:</b> Friday, April 16, 2021 10:34 AM<br>
<b>To:</b> amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc:</b> Wentland, Harry <Harry.Wentland@amd.com>; Li, Sun peng (Leo) <Sunpeng.Li@amd.com>; Lakha, Bhawanpreet <Bhawanpreet.Lakha@amd.com>; Siqueira, Rodrigo <Rodrigo.Siqueira@amd.com>; Pillai, Aurabindo <Aurabindo.Pillai@amd.com>; Zhuo, Qingqing <Qingqing.Zhuo@amd.com>;
 Brol, Eryk <Eryk.Brol@amd.com>; R, Bindu <Bindu.R@amd.com>; Jacob, Anson <Anson.Jacob@amd.com>; Zhang, Dingchen (David) <Dingchen.Zhang@amd.com>; Zhang, Dingchen (David) <Dingchen.Zhang@amd.com><br>
<b>Subject:</b> [PATCH 13/19] drm/amd/display: force CP to DESIRED when removing display.</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">From: "Dingchen (David) Zhang" <dingchen.zhang@amd.com><br>
<br>
[why]<br>
It is possible that the commit from userspace to cause link stream<br>
disable and hdcp auth reset when the HDCP has been enabled at the<br>
moment. We'd expect the CP prop back to DESIRED from ENABLED.<br>
<br>
[how]<br>
In the helper of hdcp display removal, we check and change the CP prop<br>
to DESIRED if at the moment CP is ENABLED before the auth reset and<br>
removal of linked list element.<br>
<br>
Signed-off-by: Dingchen (David) Zhang <dingchen.zhang@amd.com><br>
Reviewed-by: Dingchen Zhang <Dingchen.Zhang@amd.com><br>
Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com><br>
---<br>
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c  | 13 +++++++++++++<br>
 1 file changed, 13 insertions(+)<br>
<br>
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<br>
index 616f5b1ea3a8..50f6b3a86931 100644<br>
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c<br>
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c<br>
@@ -160,6 +160,7 @@ static void link_lock(struct hdcp_workqueue *work, bool lock)<br>
                         mutex_unlock(&work[i].mutex);<br>
         }<br>
 }<br>
+<br>
 void hdcp_update_display(struct hdcp_workqueue *hdcp_work,<br>
                          unsigned int link_index,<br>
                          struct amdgpu_dm_connector *aconnector,<br>
@@ -222,10 +223,22 @@ static void hdcp_remove_display(struct hdcp_workqueue *hdcp_work,<br>
                          struct amdgpu_dm_connector *aconnector)<br>
 {<br>
         struct hdcp_workqueue *hdcp_w = &hdcp_work[link_index];<br>
+       struct drm_connector_state *conn_state = aconnector->base.state;<br>
 <br>
         mutex_lock(&hdcp_w->mutex);<br>
         hdcp_w->aconnector = aconnector;<br>
 <br>
+       /* the removal of display will invoke auth reset -> hdcp destroy and<br>
+        * we'd expect the CP prop changed back to DESIRED if at the time ENABLED.<br>
+        * the CP prop change should occur before the element removed from linked list.<br>
+        */<br>
+       if (conn_state && conn_state->content_protection == DRM_MODE_CONTENT_PROTECTION_ENABLED) {<br>
+               conn_state->content_protection = DRM_MODE_CONTENT_PROTECTION_DESIRED;<br>
+<br>
+               pr_debug("[HDCP_DM] display %d, CP 2 -> 1, type %u, DPMS %u\n",<br>
+                        aconnector->base.index, conn_state->hdcp_content_type, aconnector->base.dpms);<br>
+       }<br>
+<br>
         mod_hdcp_remove_display(&hdcp_w->hdcp, aconnector->base.index, &hdcp_w->output);<br>
 <br>
         process_output(hdcp_w);<br>
-- <br>
2.31.1<br>
<br>
</div>
</span></font></div>
</div>
</body>
</html>