]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amd/display: WA to ensure MUX chip gets SUPPORTED_LINK_RATES of eDP
authorDale Zhao <dale.zhao@amd.com>
Wed, 21 Oct 2020 13:09:16 +0000 (21:09 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 2 Nov 2020 20:31:51 +0000 (15:31 -0500)
[Why]
Customer make a request to add this WA by driver.

Some MUX chips will power down with eDP 1.4 panel and
lose previous supported link rates(DPCD 0x010) in
customer's hybrid-GPU designs. As a result, during sleep
resuming and screen turns on from idle, link training
will be performed incorrectly and eDP will flicker or
black screen. These MUX chips need source to read DPCD
0x010 again during LKT so that it can restore supported
link rates of panel.

For driver side, supported link rate set is fetched when
link detection, no need to update but just read again
as WA.

[How]
Read DPCD 0x010 again during link training for eDP 1.4.

Signed-off-by: Dale Zhao <dale.zhao@amd.com>
Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com>
Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c

index d30ef6ea194726aa5767afdcafdfa466fd00f171..8a7c4de49a4b418bc55ea77bfe8b858e199456cf 100644 (file)
@@ -183,6 +183,16 @@ static void dpcd_set_link_settings(
        if (link->dpcd_caps.dpcd_rev.raw >= DPCD_REV_14 &&
                        lt_settings->link_settings.use_link_rate_set == true) {
                rate = 0;
+               /* WA for some MUX chips that will power down with eDP and lose supported
+                * link rate set for eDP 1.4. Source reads DPCD 0x010 again to ensure
+                * MUX chip gets link rate set back before link training.
+                */
+               if (link->connector_signal == SIGNAL_TYPE_EDP) {
+                       uint8_t supported_link_rates[16];
+
+                       core_link_read_dpcd(link, DP_SUPPORTED_LINK_RATES,
+                                       supported_link_rates, sizeof(supported_link_rates));
+               }
                core_link_write_dpcd(link, DP_LINK_BW_SET, &rate, 1);
                core_link_write_dpcd(link, DP_LINK_RATE_SET,
                                &lt_settings->link_settings.link_rate_set, 1);