From beaac7714a793bbc111647d16d57aa98309dd698 Mon Sep 17 00:00:00 2001 From: Wyon Bi Date: Fri, 30 Sep 2022 01:18:21 +0000 Subject: [PATCH] drm/bridge: analogix_dp: Check link status in loader_protect() Signed-off-by: Wyon Bi Change-Id: I8816a0527eb7a1c1d3a2d7b7480057b888e375e0 --- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c index 592efc5318dd..456d33c36d69 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -2099,6 +2099,7 @@ static void analogix_dp_link_train_restore(struct analogix_dp_device *dp) int analogix_dp_loader_protect(struct analogix_dp_device *dp) { + u8 link_status[DP_LINK_STATUS_SIZE]; int ret; ret = analogix_dp_phy_power_on(dp); @@ -2119,6 +2120,18 @@ int analogix_dp_loader_protect(struct analogix_dp_device *dp) goto err_disable; } + ret = drm_dp_dpcd_read_link_status(&dp->aux, link_status); + if (ret < 0) { + dev_err(dp->dev, "Failed to read link status\n"); + goto err_disable; + } + + if (!drm_dp_channel_eq_ok(link_status, dp->link_train.lane_count)) { + dev_err(dp->dev, "Channel EQ or CR not ok\n"); + ret = -EINVAL; + goto err_disable; + } + return 0; err_disable: