Commit 6e17b5b8 authored by Jun Lei's avatar Jun Lei Committed by Alex Deucher
Browse files

drm/amd/display: update DCN2 uclk switch time



[why]
value commited to by HW team is going to be higher
than pre-silicon, and will cause underflow if driver not
updated

[how]
update hardcoded value, update pstate switching logic
to fix case where with long uclk time we won't allow switch
even when we should

Signed-off-by: default avatarJun Lei <Jun.Lei@amd.com>
Reviewed-by: default avatarEric Yang <eric.yang2@amd.com>
Acked-by: default avatarBhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent cf020d49
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -195,11 +195,9 @@ void dcn2_update_clocks(struct clk_mgr *clk_mgr_base,
			pp_smu->set_hard_min_socclk_by_freq(&pp_smu->pp_smu, clk_mgr_base->clks.socclk_khz / 1000);
	}

	if (!safe_to_lower && pp_smu && pp_smu->set_pstate_handshake_support) {
		clk_mgr_base->clks.p_state_change_support = false;
		pp_smu->set_pstate_handshake_support(&pp_smu->pp_smu, false);
	} else if (safe_to_lower && pp_smu && pp_smu->set_pstate_handshake_support) {
	if (should_update_pstate_support(safe_to_lower, new_clocks->p_state_change_support, clk_mgr_base->clks.p_state_change_support)) {
		clk_mgr_base->clks.p_state_change_support = new_clocks->p_state_change_support;
		if (pp_smu && pp_smu->set_pstate_handshake_support)
			pp_smu->set_pstate_handshake_support(&pp_smu->pp_smu, clk_mgr_base->clks.p_state_change_support);
	}

+6 −0
Original line number Diff line number Diff line
@@ -274,6 +274,12 @@ static inline bool should_set_clock(bool safe_to_lower, int calc_clk, int cur_cl
	return ((safe_to_lower && calc_clk < cur_clk) || calc_clk > cur_clk);
}

static inline bool should_update_pstate_support(bool safe_to_lower, bool calc_support, bool cur_support)
{
	// Whenever we are transitioning pstate support, we always want to notify prior to committing state
	return (calc_support != cur_support) ? !safe_to_lower : false;
}

int clk_mgr_helper_get_active_display_cnt(
		struct dc *dc,
		struct dc_state *context);