From: Ivan Lipski <[email protected]>

[Why&How]
Periodic detection callbacks from DCN35 was removed for higher IPS
residency causing some displays to fail to recover after DPMS sleep. The
monitors bounces HPD ~1.2s after link training, and without periodic
detection the system enters IPS with no mechanism to wake and rediscover
the display.

Restore the periodic detection calls in dcn35_clk_mgr for now. It should
be replaced with a proper IPS-aware solution long term using DMUB.

Also remove it from dcn31 and dcn314_clk_mgr.c since they do not have IPS,
thus should not affect them.

Fixes: 3f6c060846be ("drm/amd/display: Remove periodic detection callbacks from 
dcn35+")
Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/5318
Reviewed-by: Nicholas Kazlauskas <[email protected]>
Signed-off-by: Ivan Lipski <[email protected]>
Signed-off-by: Aurabindo Pillai <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c   | 2 --
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c | 2 --
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c   | 2 ++
 3 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c
index 00c4be7c3aa4..ff47af3854b6 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c
@@ -158,7 +158,6 @@ void dcn31_update_clocks(struct clk_mgr *clk_mgr_base,
                if (new_clocks->zstate_support != DCN_ZSTATE_SUPPORT_DISALLOW &&
                                new_clocks->zstate_support != 
clk_mgr_base->clks.zstate_support) {
                        dcn31_smu_set_zstate_support(clk_mgr, 
new_clocks->zstate_support);
-                       dm_helpers_enable_periodic_detection(clk_mgr_base->ctx, 
true);
                        clk_mgr_base->clks.zstate_support = 
new_clocks->zstate_support;
                }
 
@@ -184,7 +183,6 @@ void dcn31_update_clocks(struct clk_mgr *clk_mgr_base,
                if (new_clocks->zstate_support == DCN_ZSTATE_SUPPORT_DISALLOW &&
                                new_clocks->zstate_support != 
clk_mgr_base->clks.zstate_support) {
                        dcn31_smu_set_zstate_support(clk_mgr, 
DCN_ZSTATE_SUPPORT_DISALLOW);
-                       dm_helpers_enable_periodic_detection(clk_mgr_base->ctx, 
false);
                        clk_mgr_base->clks.zstate_support = 
new_clocks->zstate_support;
                }
 
diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c
index dd6f11ecb9c9..24f6304011ae 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_clk_mgr.c
@@ -230,7 +230,6 @@ void dcn314_update_clocks(struct clk_mgr *clk_mgr_base,
                if (new_clocks->zstate_support != DCN_ZSTATE_SUPPORT_DISALLOW &&
                                new_clocks->zstate_support != 
clk_mgr_base->clks.zstate_support) {
                        dcn314_smu_set_zstate_support(clk_mgr, 
new_clocks->zstate_support);
-                       dm_helpers_enable_periodic_detection(clk_mgr_base->ctx, 
true);
                        clk_mgr_base->clks.zstate_support = 
new_clocks->zstate_support;
                }
 
@@ -255,7 +254,6 @@ void dcn314_update_clocks(struct clk_mgr *clk_mgr_base,
                if (new_clocks->zstate_support == DCN_ZSTATE_SUPPORT_DISALLOW &&
                                new_clocks->zstate_support != 
clk_mgr_base->clks.zstate_support) {
                        dcn314_smu_set_zstate_support(clk_mgr, 
DCN_ZSTATE_SUPPORT_DISALLOW);
-                       dm_helpers_enable_periodic_detection(clk_mgr_base->ctx, 
false);
                        clk_mgr_base->clks.zstate_support = 
new_clocks->zstate_support;
                }
 
diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c
index 103013e2a0de..a69824e1eb26 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c
@@ -419,6 +419,7 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base,
                if (new_clocks->zstate_support != DCN_ZSTATE_SUPPORT_DISALLOW &&
                                new_clocks->zstate_support != 
clk_mgr_base->clks.zstate_support) {
                        dcn35_smu_set_zstate_support(clk_mgr, 
new_clocks->zstate_support);
+                       dm_helpers_enable_periodic_detection(clk_mgr_base->ctx, 
true);
                        clk_mgr_base->clks.zstate_support = 
new_clocks->zstate_support;
                }
 
@@ -438,6 +439,7 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base,
                if (new_clocks->zstate_support == DCN_ZSTATE_SUPPORT_DISALLOW &&
                                new_clocks->zstate_support != 
clk_mgr_base->clks.zstate_support) {
                        dcn35_smu_set_zstate_support(clk_mgr, 
DCN_ZSTATE_SUPPORT_DISALLOW);
+                       dm_helpers_enable_periodic_detection(clk_mgr_base->ctx, 
false);
                        clk_mgr_base->clks.zstate_support = 
new_clocks->zstate_support;
                }
 
-- 
2.54.0

Reply via email to