diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3440-drm-amd-display-check-hpd-before-retry-verify-link-c.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3440-drm-amd-display-check-hpd-before-retry-verify-link-c.patch | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3440-drm-amd-display-check-hpd-before-retry-verify-link-c.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3440-drm-amd-display-check-hpd-before-retry-verify-link-c.patch new file mode 100644 index 00000000..f5abd36c --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3440-drm-amd-display-check-hpd-before-retry-verify-link-c.patch @@ -0,0 +1,129 @@ +From 17bb08b1420d8cb71ef456d6e4a2038ec0dad2dc Mon Sep 17 00:00:00 2001 +From: Wenjing Liu <Wenjing.Liu@amd.com> +Date: Fri, 26 Jul 2019 14:53:20 -0400 +Subject: [PATCH 3440/4256] drm/amd/display: check hpd before retry verify link + cap + +[why] +During detection link training if a display is disconnected, +the current code will retry 3 times of link training +on disconnected link before giving up. + +[how] +Before each retry check for HPD status, only retry +verify link cap when HPD is still high. +Also put a 10ms delay between each retry to improve +the chance of success. + +Signed-off-by: Wenjing Liu <Wenjing.Liu@amd.com> +Reviewed-by: Jun Lei <Jun.Lei@amd.com> +Acked-by: Abdoulaye Berthe <Abdoulaye.Berthe@amd.com> +Acked-by: Leo Li <sunpeng.li@amd.com> +--- + drivers/gpu/drm/amd/display/dc/core/dc_link.c | 27 +++++-------------- + .../gpu/drm/amd/display/dc/core/dc_link_dp.c | 27 +++++++++++++++++++ + .../gpu/drm/amd/display/dc/inc/dc_link_dp.h | 5 ++++ + 3 files changed, 38 insertions(+), 21 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c +index 429c1ad59089..c953f6d2770a 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c +@@ -852,16 +852,9 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) + dc_sink_release(prev_sink); + } else { + /* Empty dongle plug in */ +- for (i = 0; i < LINK_TRAINING_MAX_VERIFY_RETRY; i++) { +- int fail_count = 0; +- +- dp_verify_link_cap(link, +- &link->reported_link_cap, +- &fail_count); +- +- if (fail_count == 0) +- break; +- } ++ dp_verify_link_cap_with_retries(link, ++ &link->reported_link_cap, ++ LINK_TRAINING_MAX_VERIFY_RETRY); + } + return true; + } +@@ -965,17 +958,9 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) + */ + + /* deal with non-mst cases */ +- for (i = 0; i < LINK_TRAINING_MAX_VERIFY_RETRY; i++) { +- int fail_count = 0; +- +- dp_verify_link_cap(link, +- &link->reported_link_cap, +- &fail_count); +- +- if (fail_count == 0) +- break; +- } +- ++ dp_verify_link_cap_with_retries(link, ++ &link->reported_link_cap, ++ LINK_TRAINING_MAX_VERIFY_RETRY); + } else { + // If edid is the same, then discard new sink and revert back to original sink + if (same_edid) { +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +index 8e66b2e9d6af..2e87942b3e9c 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +@@ -1643,6 +1643,33 @@ bool dp_verify_link_cap( + return success; + } + ++bool dp_verify_link_cap_with_retries( ++ struct dc_link *link, ++ struct dc_link_settings *known_limit_link_setting, ++ int attempts) ++{ ++ uint8_t i = 0; ++ bool success = false; ++ ++ for (i = 0; i < attempts; i++) { ++ int fail_count = 0; ++ enum dc_connection_type type; ++ ++ memset(&link->verified_link_cap, 0, ++ sizeof(struct dc_link_settings)); ++ if (!dc_link_detect_sink(link, &type)) { ++ break; ++ } else if (dp_verify_link_cap(link, ++ &link->reported_link_cap, ++ &fail_count) && fail_count == 0) { ++ success = true; ++ break; ++ } ++ msleep(10); ++ } ++ return success; ++} ++ + static struct dc_link_settings get_common_supported_link_settings( + struct dc_link_settings link_setting_a, + struct dc_link_settings link_setting_b) +diff --git a/drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h b/drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h +index b4e7b0c56f83..08a4df2c61a8 100644 +--- a/drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h ++++ b/drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h +@@ -38,6 +38,11 @@ bool dp_verify_link_cap( + struct dc_link_settings *known_limit_link_setting, + int *fail_count); + ++bool dp_verify_link_cap_with_retries( ++ struct dc_link *link, ++ struct dc_link_settings *known_limit_link_setting, ++ int attempts); ++ + bool dp_validate_mode_timing( + struct dc_link *link, + const struct dc_crtc_timing *timing); +-- +2.17.1 + |