From: Dillon Varone <dillon.var...@amd.com>

[WHY&HOW]
- Remove legacy update clocks sequence
- FCLK P-State allow message is not required

Reviewed-by: Alvin Lee <alvin.l...@amd.com>
Signed-off-by: Dillon Varone <dillon.var...@amd.com>
Signed-off-by: Roman Li <roman...@amd.com>
Tested-by: Daniel Wheeler <daniel.whee...@amd.com>
---
 .../dc/clk_mgr/dcn401/dcn401_clk_mgr.c        | 240 ++----------------
 drivers/gpu/drm/amd/display/dc/dc.h           |   1 -
 2 files changed, 17 insertions(+), 224 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c 
b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c
index 5b4e1e8a9ae2..e4360cd6b373 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr.c
@@ -628,207 +628,6 @@ static void dcn401_update_clocks_update_dentist(
 
 }
 
-static void dcn401_update_clocks_legacy(struct clk_mgr *clk_mgr_base,
-                       struct dc_state *context,
-                       bool safe_to_lower)
-{
-       struct clk_mgr_internal *clk_mgr = TO_CLK_MGR_INTERNAL(clk_mgr_base);
-       struct dc_clocks *new_clocks = &context->bw_ctx.bw.dcn.clk;
-       struct dc *dc = clk_mgr_base->ctx->dc;
-       int display_count;
-       bool update_dppclk = false;
-       bool update_dispclk = false;
-       bool enter_display_off = false;
-       bool dpp_clock_lowered = false;
-       struct dmcu *dmcu = clk_mgr_base->ctx->dc->res_pool->dmcu;
-       bool force_reset = false;
-       bool update_uclk = false, update_fclk = false;
-       bool p_state_change_support;
-       bool fclk_p_state_change_support;
-       int total_plane_count;
-
-       if (dc->work_arounds.skip_clock_update)
-               return;
-
-       if (clk_mgr_base->clks.dispclk_khz == 0 ||
-                       (dc->debug.force_clock_mode & 0x1)) {
-               /* This is from resume or boot up, if forced_clock cfg option 
used,
-                * we bypass program dispclk and DPPCLK, but need set them for 
S3.
-                */
-               force_reset = true;
-
-               dcn2_read_clocks_from_hw_dentist(clk_mgr_base);
-
-               /* Force_clock_mode 0x1:  force reset the clock even it is the 
same clock
-                * as long as it is in Passive level.
-                */
-       }
-       display_count = clk_mgr_helper_get_active_display_cnt(dc, context);
-
-       if (display_count == 0)
-               enter_display_off = true;
-
-       if (clk_mgr->smu_present) {
-               if (enter_display_off == safe_to_lower)
-                       dcn401_smu_set_num_of_displays(clk_mgr, display_count);
-
-               clk_mgr_base->clks.fclk_prev_p_state_change_support = 
clk_mgr_base->clks.fclk_p_state_change_support;
-
-               total_plane_count = clk_mgr_helper_get_active_plane_cnt(dc, 
context);
-               fclk_p_state_change_support = 
new_clocks->fclk_p_state_change_support || (total_plane_count == 0);
-
-               if (should_update_pstate_support(safe_to_lower, 
fclk_p_state_change_support, clk_mgr_base->clks.fclk_p_state_change_support)) {
-                       clk_mgr_base->clks.fclk_p_state_change_support = 
fclk_p_state_change_support;
-
-                       /* To enable FCLK P-state switching, send 
PSTATE_SUPPORTED message to PMFW */
-                       if (clk_mgr_base->clks.fclk_p_state_change_support) {
-                               /* Handle the code for sending a message to 
PMFW that FCLK P-state change is supported */
-                               dcn401_smu_send_fclk_pstate_message(clk_mgr, 
true);
-                       }
-               }
-
-               if (dc->debug.force_min_dcfclk_mhz > 0)
-                       new_clocks->dcfclk_khz = (new_clocks->dcfclk_khz > 
(dc->debug.force_min_dcfclk_mhz * 1000)) ?
-                                       new_clocks->dcfclk_khz : 
(dc->debug.force_min_dcfclk_mhz * 1000);
-
-               if (should_set_clock(safe_to_lower, new_clocks->dcfclk_khz, 
clk_mgr_base->clks.dcfclk_khz)) {
-                       clk_mgr_base->clks.dcfclk_khz = new_clocks->dcfclk_khz;
-                       if (dcn401_is_ppclk_dpm_enabled(clk_mgr, PPCLK_DCFCLK))
-                               dcn401_smu_set_hard_min_by_freq(clk_mgr, 
PPCLK_DCFCLK, khz_to_mhz_ceil(clk_mgr_base->clks.dcfclk_khz));
-               }
-
-               if (should_set_clock(safe_to_lower, 
new_clocks->dcfclk_deep_sleep_khz, clk_mgr_base->clks.dcfclk_deep_sleep_khz)) {
-                       clk_mgr_base->clks.dcfclk_deep_sleep_khz = 
new_clocks->dcfclk_deep_sleep_khz;
-                       if (dcn401_is_ppclk_dpm_enabled(clk_mgr, PPCLK_DCFCLK))
-                               dcn401_smu_set_min_deep_sleep_dcef_clk(clk_mgr, 
khz_to_mhz_ceil(clk_mgr_base->clks.dcfclk_deep_sleep_khz));
-               }
-
-               if (should_set_clock(safe_to_lower, new_clocks->socclk_khz, 
clk_mgr_base->clks.socclk_khz))
-                       /* We don't actually care about socclk, don't notify 
SMU of hard min */
-                       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;
-               clk_mgr_base->clks.prev_num_ways = clk_mgr_base->clks.num_ways;
-
-               if (clk_mgr_base->clks.num_ways != new_clocks->num_ways &&
-                               clk_mgr_base->clks.num_ways < 
new_clocks->num_ways) {
-                       clk_mgr_base->clks.num_ways = new_clocks->num_ways;
-                       if (dcn401_is_ppclk_dpm_enabled(clk_mgr, PPCLK_UCLK))
-                               dcn401_smu_send_cab_for_uclk_message(clk_mgr, 
clk_mgr_base->clks.num_ways);
-               }
-
-
-               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.prev_p_state_change_support)) {
-                       clk_mgr_base->clks.p_state_change_support = 
p_state_change_support;
-                       clk_mgr_base->clks.fw_based_mclk_switching = 
p_state_change_support && new_clocks->fw_based_mclk_switching;
-
-                       /* to disable P-State switching, set UCLK min = max */
-                       if (!clk_mgr_base->clks.p_state_change_support && 
dcn401_is_ppclk_dpm_enabled(clk_mgr, PPCLK_UCLK))
-                               dcn401_smu_set_hard_min_by_freq(clk_mgr, 
PPCLK_UCLK,
-                                               
clk_mgr_base->bw_params->clk_table.entries[clk_mgr_base->bw_params->clk_table.num_entries_per_clk.num_memclk_levels
 - 1].memclk_mhz);
-               }
-
-               /* Always update saved value, even if new value not set due to 
P-State switching unsupported. Also check safe_to_lower for FCLK */
-               if (safe_to_lower && 
(clk_mgr_base->clks.fclk_p_state_change_support != 
clk_mgr_base->clks.fclk_prev_p_state_change_support)) {
-                       update_fclk = true;
-               }
-
-               if (!clk_mgr_base->clks.fclk_p_state_change_support &&
-                               update_fclk &&
-                               dcn401_is_ppclk_dpm_enabled(clk_mgr, 
PPCLK_FCLK)) {
-                       /* Handle code for sending a message to PMFW that FCLK 
P-state change is not supported */
-                       dcn401_smu_send_fclk_pstate_message(clk_mgr, false);
-               }
-
-               /* Always update saved value, even if new value not set due to 
P-State switching unsupported */
-               if (should_set_clock(safe_to_lower, new_clocks->dramclk_khz, 
clk_mgr_base->clks.dramclk_khz)) {
-                       clk_mgr_base->clks.dramclk_khz = 
new_clocks->dramclk_khz;
-                       update_uclk = true;
-               }
-
-               /* set UCLK to requested value if P-State switching is 
supported, or to re-enable P-State switching */
-               if (clk_mgr_base->clks.p_state_change_support &&
-                               (update_uclk || 
!clk_mgr_base->clks.prev_p_state_change_support) &&
-                               dcn401_is_ppclk_dpm_enabled(clk_mgr, 
PPCLK_UCLK))
-                       dcn401_smu_set_hard_min_by_freq(clk_mgr, PPCLK_UCLK, 
khz_to_mhz_ceil(clk_mgr_base->clks.dramclk_khz));
-
-               if (clk_mgr_base->clks.num_ways != new_clocks->num_ways &&
-                               clk_mgr_base->clks.num_ways > 
new_clocks->num_ways) {
-                       clk_mgr_base->clks.num_ways = new_clocks->num_ways;
-                       if (dcn401_is_ppclk_dpm_enabled(clk_mgr, PPCLK_UCLK))
-                               dcn401_smu_send_cab_for_uclk_message(clk_mgr, 
clk_mgr_base->clks.num_ways);
-               }
-       }
-
-       if (should_set_clock(safe_to_lower, new_clocks->dppclk_khz, 
clk_mgr_base->clks.dppclk_khz)) {
-               if (clk_mgr_base->clks.dppclk_khz > new_clocks->dppclk_khz)
-                       dpp_clock_lowered = true;
-
-               clk_mgr_base->clks.dppclk_khz = new_clocks->dppclk_khz;
-               clk_mgr_base->clks.actual_dppclk_khz = new_clocks->dppclk_khz;
-
-               if (clk_mgr->smu_present && !dpp_clock_lowered && 
dcn401_is_ppclk_dpm_enabled(clk_mgr, PPCLK_DPPCLK))
-                       clk_mgr_base->clks.actual_dppclk_khz = 
dcn401_set_hard_min_by_freq_optimized(clk_mgr, PPCLK_DPPCLK, 
clk_mgr_base->clks.dppclk_khz);
-               update_dppclk = true;
-       }
-
-       if (should_set_clock(safe_to_lower, new_clocks->dispclk_khz, 
clk_mgr_base->clks.dispclk_khz)) {
-               clk_mgr_base->clks.dispclk_khz = new_clocks->dispclk_khz;
-
-               if (clk_mgr->smu_present && 
dcn401_is_ppclk_dpm_enabled(clk_mgr, PPCLK_DISPCLK))
-                       clk_mgr_base->clks.actual_dispclk_khz = 
dcn401_set_hard_min_by_freq_optimized(clk_mgr, PPCLK_DISPCLK, 
clk_mgr_base->clks.dispclk_khz);
-
-               update_dispclk = true;
-       }
-
-       if (!new_clocks->dtbclk_en && dcn401_is_ppclk_dpm_enabled(clk_mgr, 
PPCLK_DTBCLK)) {
-               new_clocks->ref_dtbclk_khz = 
clk_mgr_base->bw_params->clk_table.entries[0].dtbclk_mhz * 1000;
-       }
-
-       /* clock limits are received with MHz precision, divide by 1000 to 
prevent setting clocks at every call */
-       if (!dc->debug.disable_dtb_ref_clk_switch &&
-                       should_set_clock(safe_to_lower, 
new_clocks->ref_dtbclk_khz / 1000, clk_mgr_base->clks.ref_dtbclk_khz / 1000) &&
-                       dcn401_is_ppclk_dpm_enabled(clk_mgr, PPCLK_DTBCLK)) {
-               /* DCCG requires KHz precision for DTBCLK */
-               clk_mgr_base->clks.ref_dtbclk_khz =
-                               dcn401_smu_set_hard_min_by_freq(clk_mgr, 
PPCLK_DTBCLK, khz_to_mhz_ceil(new_clocks->ref_dtbclk_khz));
-
-               dcn401_update_clocks_update_dtb_dto(clk_mgr, context, 
clk_mgr_base->clks.ref_dtbclk_khz);
-       }
-
-       if (dc->config.forced_clocks == false || (force_reset && 
safe_to_lower)) {
-               if (dpp_clock_lowered) {
-                       /* if clock is being lowered, increase DTO before 
lowering refclk */
-                       dcn401_update_clocks_update_dpp_dto(clk_mgr, context,
-                                       safe_to_lower, 
clk_mgr_base->clks.dppclk_khz);
-                       dcn401_update_clocks_update_dentist(clk_mgr, context);
-                       if (clk_mgr->smu_present && 
dcn401_is_ppclk_dpm_enabled(clk_mgr, PPCLK_DPPCLK)) {
-                               clk_mgr_base->clks.actual_dppclk_khz = 
dcn401_set_hard_min_by_freq_optimized(clk_mgr, PPCLK_DPPCLK,
-                                               clk_mgr_base->clks.dppclk_khz);
-                               dcn401_update_clocks_update_dpp_dto(clk_mgr, 
context, safe_to_lower,
-                                               
clk_mgr_base->clks.actual_dppclk_khz);
-                       }
-
-               } else {
-                       /* if clock is being raised, increase refclk before 
lowering DTO */
-                       if (update_dppclk || update_dispclk)
-                               dcn401_update_clocks_update_dentist(clk_mgr, 
context);
-                       /* There is a check inside 
dcn20_update_clocks_update_dpp_dto which ensures
-                        * that we do not lower dto when it is not safe to 
lower. We do not need to
-                        * compare the current and new dppclk before calling 
this function.
-                        */
-                       dcn401_update_clocks_update_dpp_dto(clk_mgr, context,
-                                       safe_to_lower, 
clk_mgr_base->clks.actual_dppclk_khz);
-               }
-       }
-
-       if (update_dispclk && dmcu && dmcu->funcs->is_dmcu_initialized(dmcu))
-               /*update dmcu for wait_loop count*/
-               dmcu->funcs->set_psr_wait_loop(dmcu,
-                               clk_mgr_base->clks.dispclk_khz / 1000 / 7);
-}
-
 static void dcn401_execute_block_sequence(struct clk_mgr *clk_mgr_base, 
unsigned int num_steps)
 {
        struct clk_mgr_internal *clk_mgr_internal = 
TO_CLK_MGR_INTERNAL(clk_mgr_base);
@@ -1008,15 +807,15 @@ static unsigned int 
dcn401_build_update_bandwidth_clocks_sequence(
                update_active_fclk = true;
                update_idle_fclk = true;
 
-               /* To enable FCLK P-state switching, send PSTATE_SUPPORTED 
message to PMFW */
-               if (clk_mgr_base->clks.fclk_p_state_change_support) {
-                       /* Handle the code for sending a message to PMFW that 
FCLK P-state change is supported */
-                       if (dcn401_is_ppclk_dpm_enabled(clk_mgr_internal, 
PPCLK_FCLK)) {
-                               
block_sequence[num_steps].params.update_pstate_support_params.support = true;
-                               block_sequence[num_steps].func = 
CLK_MGR401_UPDATE_FCLK_PSTATE_SUPPORT;
-                               num_steps++;
-                       }
-               }
+               /* To enable FCLK P-state switching, send PSTATE_SUPPORTED 
message to PMFW (message not supported on DCN401)*/
+               // if (clk_mgr_base->clks.fclk_p_state_change_support) {
+               //      /* Handle the code for sending a message to PMFW that 
FCLK P-state change is supported */
+               //      if (dcn401_is_ppclk_dpm_enabled(clk_mgr_internal, 
PPCLK_FCLK)) {
+               //              
block_sequence[num_steps].params.update_pstate_support_params.support = true;
+               //              block_sequence[num_steps].func = 
CLK_MGR401_UPDATE_FCLK_PSTATE_SUPPORT;
+               //              num_steps++;
+               //      }
+               // }
        }
 
        if (!clk_mgr_base->clks.fclk_p_state_change_support && 
dcn401_is_ppclk_dpm_enabled(clk_mgr_internal, PPCLK_FCLK)) {
@@ -1224,14 +1023,14 @@ static unsigned int 
dcn401_build_update_bandwidth_clocks_sequence(
                //      (*num_steps)++;
                // }
 
-               /* disable FCLK P-State support if needed */
-               if (!fclk_p_state_change_support &&
-                               should_update_pstate_support(safe_to_lower, 
fclk_p_state_change_support, 
clk_mgr_base->clks.fclk_prev_p_state_change_support) &&
-                               dcn401_is_ppclk_dpm_enabled(clk_mgr_internal, 
PPCLK_FCLK)) {
-                       
block_sequence[num_steps].params.update_pstate_support_params.support = false;
-                       block_sequence[num_steps].func = 
CLK_MGR401_UPDATE_FCLK_PSTATE_SUPPORT;
-                       num_steps++;
-               }
+               /* disable FCLK P-State support if needed (message not 
supported on DCN401)*/
+               // if (!fclk_p_state_change_support &&
+               //              should_update_pstate_support(safe_to_lower, 
fclk_p_state_change_support, 
clk_mgr_base->clks.fclk_prev_p_state_change_support) &&
+               //              dcn401_is_ppclk_dpm_enabled(clk_mgr_internal, 
PPCLK_FCLK)) {
+               //      
block_sequence[num_steps].params.update_pstate_support_params.support = false;
+               //      block_sequence[num_steps].func = 
CLK_MGR401_UPDATE_FCLK_PSTATE_SUPPORT;
+               //      num_steps++;
+               // }
        }
 
        if (new_clocks->fw_based_mclk_switching != 
clk_mgr_base->clks.fw_based_mclk_switching &&
@@ -1412,11 +1211,6 @@ static void dcn401_update_clocks(struct clk_mgr 
*clk_mgr_base,
 
        unsigned int num_steps = 0;
 
-       if (dc->debug.enable_legacy_clock_update) {
-               dcn401_update_clocks_legacy(clk_mgr_base, context, 
safe_to_lower);
-               return;
-       }
-
        /* build bandwidth related clocks update sequence */
        num_steps = dcn401_build_update_bandwidth_clocks_sequence(clk_mgr_base,
                        context,
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
b/drivers/gpu/drm/amd/display/dc/dc.h
index 8c6347413038..cccffffaf768 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1060,7 +1060,6 @@ struct dc_debug_options {
        uint32_t dml21_disable_pstate_method_mask;
        union fw_assisted_mclk_switch_version fams_version;
        union dmub_fams2_global_feature_config fams2_config;
-       bool enable_legacy_clock_update;
        unsigned int force_cositing;
        unsigned int disable_spl;
        unsigned int force_easf;
-- 
2.34.1

Reply via email to