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;
-               pp_smu->set_pstate_handshake_support(&pp_smu->pp_smu, clk_mgr_base->clks.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);
        }
 
        if (should_set_clock(safe_to_lower, new_clocks->dramclk_khz, clk_mgr_base->clks.dramclk_khz)) {
 
        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);