From: Hermes Wu <hermes...@ite.com.tw>

[ Upstream commit 9f9eef9ec1a2b57d95a86fe81df758e8253a7766 ]

HDCP must disabled encryption and restart authentication after
waiting KSV for 5s.
The original method uses a counter in a waitting loop that may
wait much longer than it is supposed to.
Use time_after() for KSV wait timeout.

Signed-off-by: Hermes Wu <hermes...@ite.com.tw>
Reviewed-by: AngeloGioacchino Del Regno 
<angelogioacchino.delre...@collabora.com>
Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@linaro.org>
Link: 
https://patchwork.freedesktop.org/patch/msgid/20241230-v7-upstream-v7-9-e0fdd4844...@ite.corp-partner.google.com
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/gpu/drm/bridge/ite-it6505.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/bridge/ite-it6505.c 
b/drivers/gpu/drm/bridge/ite-it6505.c
index 1daa069d71f73..427b32aee6ff3 100644
--- a/drivers/gpu/drm/bridge/ite-it6505.c
+++ b/drivers/gpu/drm/bridge/ite-it6505.c
@@ -2061,12 +2061,13 @@ static void it6505_hdcp_wait_ksv_list(struct 
work_struct *work)
        struct it6505 *it6505 = container_of(work, struct it6505,
                                             hdcp_wait_ksv_list);
        struct device *dev = it6505->dev;
-       unsigned int timeout = 5000;
-       u8 bstatus = 0;
+       u8 bstatus;
        bool ksv_list_check;
+       /* 1B-04 wait ksv list for 5s */
+       unsigned long timeout = jiffies +
+                               msecs_to_jiffies(5000) + 1;
 
-       timeout /= 20;
-       while (timeout > 0) {
+       for (;;) {
                if (!it6505_get_sink_hpd_status(it6505))
                        return;
 
@@ -2075,13 +2076,12 @@ static void it6505_hdcp_wait_ksv_list(struct 
work_struct *work)
                if (bstatus & DP_BSTATUS_READY)
                        break;
 
-               msleep(20);
-               timeout--;
-       }
+               if (time_after(jiffies, timeout)) {
+                       DRM_DEV_DEBUG_DRIVER(dev, "KSV list wait timeout");
+                       goto timeout;
+               }
 
-       if (timeout == 0) {
-               DRM_DEV_DEBUG_DRIVER(dev, "timeout and ksv list wait failed");
-               goto timeout;
+               msleep(20);
        }
 
        ksv_list_check = it6505_hdcp_part2_ksvlist_check(it6505);
-- 
2.39.5

Reply via email to