OSDN Git Service

drm/amd/display: Add w/a to reset PHY before link training in verify_link_cap
authorGeorge Shen <george.shen@amd.com>
Tue, 17 Dec 2019 19:34:33 +0000 (14:34 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 16 Jan 2020 19:15:17 +0000 (14:15 -0500)
[Why]
PHY will sometimes be in bad state on hotplugging display from USB-C
dongle.

[How]
Add additional calls to disable and then enable PHY before link training
starts during verify_link_cap.

Signed-off-by: George Shen <george.shen@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c

index e415f77..75dc387 100644 (file)
@@ -1892,6 +1892,16 @@ bool dp_verify_link_cap(
        /* disable PHY done possible by BIOS, will be done by driver itself */
        dp_disable_link_phy(link, link->connector_signal);
 
+       /* Temporary Renoir-specific workaround for SWDEV-215184;
+        * PHY will sometimes be in bad state on hotplugging display from certain USB-C dongle,
+        * so add extra cycle of enabling and disabling the PHY before first link training.
+        */
+       if (link->link_enc->features.flags.bits.DP_IS_USB_C &&
+                       link->dc->debug.usbc_combo_phy_reset_wa) {
+               dp_enable_link_phy(link, link->connector_signal, dp_cs_id, cur);
+               dp_disable_link_phy(link, link->connector_signal);
+       }
+
        dp_cs_id = get_clock_source_id(link);
 
        /* link training starts with the maximum common settings
index ecd2257..8c7ff9e 100644 (file)
@@ -421,6 +421,7 @@ struct dc_debug_options {
        bool disable_dram_clock_change_vactive_support;
        bool validate_dml_output;
        bool enable_dmcub_surface_flip;
+       bool usbc_combo_phy_reset_wa;
 };
 
 struct dc_debug_data {
index f1ec344..0c02120 100644 (file)
@@ -835,7 +835,8 @@ static const struct dc_debug_options debug_defaults_drv = {
                .scl_reset_length10 = true,
                .sanity_checks = true,
                .disable_48mhz_pwrdwn = false,
-               .nv12_iflip_vm_wa = true
+               .nv12_iflip_vm_wa = true,
+               .usbc_combo_phy_reset_wa = true
 };
 
 static const struct dc_debug_options debug_defaults_diags = {