drm/bridge: it6505: fix HDCP CTS KSV list wait timer
[ 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.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-9-e0fdd4844703@ite.corp-partner.google.com Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
4ebd696fe7
commit
52858d7fe6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user