Commit 9f9eef9e authored by Hermes Wu's avatar Hermes Wu Committed by Dmitry Baryshkov
Browse files

drm/bridge: it6505: fix HDCP CTS KSV list wait timer



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: default avatarHermes Wu <hermes.wu@ite.com.tw>
Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20241230-v7-upstream-v7-9-e0fdd4844703@ite.corp-partner.google.com
parent 0989c02c
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -2096,12 +2096,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;

@@ -2110,13 +2111,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);