drm/amd/display: DCHUB underflow counter increasing in some scenarios
authorAric Cyr <aric.cyr@amd.com>
Mon, 8 Mar 2021 20:43:34 +0000 (15:43 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 11 May 2021 12:47:25 +0000 (14:47 +0200)
[ Upstream commit 4710430a779e6077d81218ac768787545bff8c49 ]

[Why]
When unplugging a display, the underflow counter can be seen to
increase because PSTATE switch is allowed even when some planes are not
blanked.

[How]
Check that all planes are not active instead of all streams before
allowing PSTATE change.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Aric Cyr <aric.cyr@amd.com>
Acked-by: Solomon Chiu <solomon.chiu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr.c

index 95d883482227e5c7c10f8baeb58a5dc9c75d1699..cab47bb211728ce0885258d0f42088060ef07c85 100644 (file)
@@ -240,6 +240,7 @@ static void dcn3_update_clocks(struct clk_mgr *clk_mgr_base,
        bool force_reset = false;
        bool update_uclk = false;
        bool p_state_change_support;
+       int total_plane_count;
 
        if (dc->work_arounds.skip_clock_update || !clk_mgr->smu_present)
                return;
@@ -280,7 +281,8 @@ static void dcn3_update_clocks(struct clk_mgr *clk_mgr_base,
                clk_mgr_base->clks.socclk_khz = new_clocks->socclk_khz;
 
        clk_mgr_base->clks.prev_p_state_change_support = clk_mgr_base->clks.p_state_change_support;
-       p_state_change_support = new_clocks->p_state_change_support || (display_count == 0);
+       total_plane_count = clk_mgr_helper_get_active_plane_cnt(dc, context);
+       p_state_change_support = new_clocks->p_state_change_support || (total_plane_count == 0);
        if (should_update_pstate_support(safe_to_lower, p_state_change_support, clk_mgr_base->clks.p_state_change_support)) {
                clk_mgr_base->clks.p_state_change_support = p_state_change_support;