]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/hisilicon/hibmc: add updating link cap in DP detect()
authorLin He <helin52@huawei.com>
Sat, 9 May 2026 03:22:59 +0000 (11:22 +0800)
committerThomas Zimmermann <tzimmermann@suse.de>
Wed, 13 May 2026 06:54:27 +0000 (08:54 +0200)
In the past, the link cap is updated in link training at encoder enable
stage, but the hibmc_dp_mode_valid() is called before it, which will use
DP link's rate and lanes. So add the hibmc_dp_update_caps() in
hibmc_dp_update_caps() to avoid some potential risks.

Fixes: 607805abfb74 ("drm/hisilicon/hibmc: add dp mode valid check")
Signed-off-by: Lin He <helin52@huawei.com>
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patch.msgid.link/20260509032302.2057227-2-shiyongbang@huawei.com
drivers/gpu/drm/hisilicon/hibmc/dp/dp_comm.h
drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c

index f9ee7ebfec55c30b3180b3386c860b1aaefce130..f53dac256ee0be6a1dc06bb21335773cf446dbba 100644 (file)
@@ -69,5 +69,6 @@ int hibmc_dp_link_training(struct hibmc_dp_dev *dp);
 int hibmc_dp_serdes_init(struct hibmc_dp_dev *dp);
 int hibmc_dp_serdes_rate_switch(u8 rate, struct hibmc_dp_dev *dp);
 int hibmc_dp_serdes_set_tx_cfg(struct hibmc_dp_dev *dp, u8 train_set[HIBMC_DP_LANE_NUM_MAX]);
+void hibmc_dp_update_caps(struct hibmc_dp_dev *dp);
 
 #endif
index 0726cb5b736e604c561d3a70cb1bcc58bcecf8b2..8c53f16db5160fc1a024642eac037952af63a929 100644 (file)
@@ -325,7 +325,7 @@ static int hibmc_dp_link_downgrade_training_eq(struct hibmc_dp_dev *dp)
        return hibmc_dp_link_reduce_rate(dp);
 }
 
-static void hibmc_dp_update_caps(struct hibmc_dp_dev *dp)
+void hibmc_dp_update_caps(struct hibmc_dp_dev *dp)
 {
        dp->link.cap.link_rate = dp->dpcd[DP_MAX_LINK_RATE];
        if (dp->link.cap.link_rate > DP_LINK_BW_8_1 || !dp->link.cap.link_rate)
index 2da04ac89d4d402f241e437da65642ad432026f2..5b9dedfbbdfc8e19650c90aac0e0d1bd70e492a2 100644 (file)
@@ -41,6 +41,8 @@ static bool hibmc_dp_get_dpcd(struct hibmc_dp_dev *dp_dev)
        if (ret)
                return false;
 
+       hibmc_dp_update_caps(dp_dev);
+
        dp_dev->is_branch = drm_dp_is_branch(dp_dev->dpcd);
 
        ret = drm_dp_read_desc(dp_dev->aux, &dp_dev->desc, dp_dev->is_branch);