]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/bridge: it6505: fix HDCP encryption when R0 ready
authorHermes Wu <hermes.wu@ite.com.tw>
Mon, 30 Dec 2024 10:51:24 +0000 (18:51 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Feb 2025 12:49:30 +0000 (13:49 +0100)
[ Upstream commit 8c01b0bae2f9e58f2fee0e811cb90d8331986554 ]

When starting HDCP authentication, HDCP encryption should be enabled
when R0'is checked.

Change encryption enables time at R0' ready.
The hardware HDCP engine trigger is changed and the repeater KSV fails
will restart HDCP.

Signed-off-by: Hermes Wu <hermes.wu@ite.com.tw>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20241230-v7-upstream-v7-6-e0fdd4844703@ite.corp-partner.google.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/bridge/ite-it6505.c

index 7e82f36f9fd025e9b2ca697512ea9c76c6781519..c0bc9e0ce9810360984b997ffa4deb3ed7fdf343 100644 (file)
@@ -2069,15 +2069,12 @@ static void it6505_hdcp_wait_ksv_list(struct work_struct *work)
        ksv_list_check = it6505_hdcp_part2_ksvlist_check(it6505);
        DRM_DEV_DEBUG_DRIVER(dev, "ksv list ready, ksv list check %s",
                             ksv_list_check ? "pass" : "fail");
-       if (ksv_list_check) {
-               it6505_set_bits(it6505, REG_HDCP_TRIGGER,
-                               HDCP_TRIGGER_KSV_DONE, HDCP_TRIGGER_KSV_DONE);
+
+       if (ksv_list_check)
                return;
-       }
+
 timeout:
-       it6505_set_bits(it6505, REG_HDCP_TRIGGER,
-                       HDCP_TRIGGER_KSV_DONE | HDCP_TRIGGER_KSV_FAIL,
-                       HDCP_TRIGGER_KSV_DONE | HDCP_TRIGGER_KSV_FAIL);
+       it6505_start_hdcp(it6505);
 }
 
 static void it6505_hdcp_work(struct work_struct *work)
@@ -2425,7 +2422,11 @@ static void it6505_irq_hdcp_ksv_check(struct it6505 *it6505)
 {
        struct device *dev = &it6505->client->dev;
 
-       DRM_DEV_DEBUG_DRIVER(dev, "HDCP event Interrupt");
+       DRM_DEV_DEBUG_DRIVER(dev, "HDCP repeater R0 event Interrupt");
+       /* 1B01 HDCP encription should start when R0 is ready*/
+       it6505_set_bits(it6505, REG_HDCP_TRIGGER,
+                       HDCP_TRIGGER_KSV_DONE, HDCP_TRIGGER_KSV_DONE);
+
        schedule_work(&it6505->hdcp_wait_ksv_list);
 }