From: Martin Tsai <[email protected]>

[why]
Some MST display may not report the internal panel to DEVICE_COUNT,
that makes the check condition always failed.

[how]
To update this condition with the reported device count + 1
(because the immediate repeater's internal panel is possibly
not included in DEVICE_COUNT)

Signed-off-by: Martin Tsai <[email protected]>
Acked-by: Bindu Ramamurthy <[email protected]>
---
 .../gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c    | 8 ++++++--
 .../gpu/drm/amd/display/modules/hdcp/hdcp2_execution.c    | 7 +++++--
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c 
b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c
index f244b72e74e0..73ca49f05bd3 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp1_execution.c
@@ -128,8 +128,12 @@ static inline uint8_t get_device_count(struct mod_hdcp 
*hdcp)
 
 static inline enum mod_hdcp_status check_device_count(struct mod_hdcp *hdcp)
 {
-       /* device count must be greater than or equal to tracked hdcp displays 
*/
-       return (get_device_count(hdcp) < get_active_display_count(hdcp)) ?
+       /* Some MST display may choose to report the internal panel as an HDCP 
RX.
+        * To update this condition with 1(because the immediate repeater's 
internal
+        * panel is possibly not included in DEVICE_COUNT) + 
get_device_count(hdcp).
+        * Device count must be greater than or equal to tracked hdcp displays.
+        */
+       return ((1 + get_device_count(hdcp)) < get_active_display_count(hdcp)) ?
                        MOD_HDCP_STATUS_HDCP1_DEVICE_COUNT_MISMATCH_FAILURE :
                        MOD_HDCP_STATUS_SUCCESS;
 }
diff --git a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_execution.c 
b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_execution.c
index 549c113abcf7..a0895a7efda2 100644
--- a/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_execution.c
+++ b/drivers/gpu/drm/amd/display/modules/hdcp/hdcp2_execution.c
@@ -207,8 +207,11 @@ static inline uint8_t get_device_count(struct mod_hdcp 
*hdcp)
 
 static enum mod_hdcp_status check_device_count(struct mod_hdcp *hdcp)
 {
-       /* device count must be greater than or equal to tracked hdcp displays 
*/
-       return (get_device_count(hdcp) < get_active_display_count(hdcp)) ?
+       /* Some MST display may choose to report the internal panel as an HDCP 
RX.   */
+       /* To update this condition with 1(because the immediate repeater's 
internal */
+       /* panel is possibly not included in DEVICE_COUNT) + 
get_device_count(hdcp). */
+       /* Device count must be greater than or equal to tracked hdcp displays. 
     */
+       return ((1 + get_device_count(hdcp)) < get_active_display_count(hdcp)) ?
                        MOD_HDCP_STATUS_HDCP2_DEVICE_COUNT_MISMATCH_FAILURE :
                        MOD_HDCP_STATUS_SUCCESS;
 }
-- 
2.25.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to