Skip to content

Commit 0ae47e9

Browse files
charliu-AMDENGalexdeucher
authored andcommitted
drm/amd/display: avoid reset DTBCLK at clock init
[why & how] this is to init to HW real DTBCLK. and use real HW DTBCLK status to update internal logic state Reviewed-by: Nicholas Kazlauskas <[email protected]> Reviewed-by: Martin Leung <[email protected]> Signed-off-by: Charlene Liu <[email protected]> Signed-off-by: Ausef Yousof <[email protected]> Signed-off-by: Tom Chung <[email protected]> Tested-by: Daniel Wheeler <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 230dced commit 0ae47e9

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

drivers/gpu/drm/amd/display/dc/clk_mgr/dcn35/dcn35_clk_mgr.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base,
401401
if (clk_mgr_base->clks.dtbclk_en && !new_clocks->dtbclk_en) {
402402
if (clk_mgr->base.ctx->dc->config.allow_0_dtb_clk)
403403
dcn35_smu_set_dtbclk(clk_mgr, false);
404+
404405
clk_mgr_base->clks.dtbclk_en = new_clocks->dtbclk_en;
405406
}
406407
/* check that we're not already in lower */
@@ -418,11 +419,17 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base,
418419
}
419420

420421
if (!clk_mgr_base->clks.dtbclk_en && new_clocks->dtbclk_en) {
421-
dcn35_smu_set_dtbclk(clk_mgr, true);
422-
clk_mgr_base->clks.dtbclk_en = new_clocks->dtbclk_en;
422+
int actual_dtbclk = 0;
423423

424424
dcn35_update_clocks_update_dtb_dto(clk_mgr, context, new_clocks->ref_dtbclk_khz);
425-
clk_mgr_base->clks.ref_dtbclk_khz = new_clocks->ref_dtbclk_khz;
425+
dcn35_smu_set_dtbclk(clk_mgr, true);
426+
427+
actual_dtbclk = REG_READ(CLK1_CLK4_CURRENT_CNT);
428+
429+
if (actual_dtbclk) {
430+
clk_mgr_base->clks.ref_dtbclk_khz = new_clocks->ref_dtbclk_khz;
431+
clk_mgr_base->clks.dtbclk_en = new_clocks->dtbclk_en;
432+
}
426433
}
427434

428435
/* check that we're not already in D0 */
@@ -584,12 +591,10 @@ static bool dcn35_is_spll_ssc_enabled(struct clk_mgr *clk_mgr_base)
584591

585592
static void init_clk_states(struct clk_mgr *clk_mgr)
586593
{
587-
struct clk_mgr_internal *clk_mgr_int = TO_CLK_MGR_INTERNAL(clk_mgr);
588594
uint32_t ref_dtbclk = clk_mgr->clks.ref_dtbclk_khz;
595+
589596
memset(&(clk_mgr->clks), 0, sizeof(struct dc_clocks));
590597

591-
if (clk_mgr_int->smu_ver >= SMU_VER_THRESHOLD)
592-
clk_mgr->clks.dtbclk_en = true; // request DTBCLK disable on first commit
593598
clk_mgr->clks.ref_dtbclk_khz = ref_dtbclk; // restore ref_dtbclk
594599
clk_mgr->clks.p_state_change_support = true;
595600
clk_mgr->clks.prev_p_state_change_support = true;
@@ -600,6 +605,7 @@ static void init_clk_states(struct clk_mgr *clk_mgr)
600605
void dcn35_init_clocks(struct clk_mgr *clk_mgr)
601606
{
602607
struct clk_mgr_internal *clk_mgr_int = TO_CLK_MGR_INTERNAL(clk_mgr);
608+
603609
init_clk_states(clk_mgr);
604610

605611
// to adjust dp_dto reference clock if ssc is enable otherwise to apply dprefclk

0 commit comments

Comments
 (0)