Skip to content

Commit 467904a

Browse files
charliu-AMDENGgregkh
authored andcommitted
drm/amd/display: avoid reset DTBCLK at clock init
[ Upstream commit 0ae47e9 ] [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 <nicholas.kazlauskas@amd.com> Reviewed-by: Martin Leung <martin.leung@amd.com> Signed-off-by: Charlene Liu <Charlene.Liu@amd.com> Signed-off-by: Ausef Yousof <Ausef.Yousof@amd.com> Signed-off-by: Tom Chung <chiahsuan.chung@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Stable-dep-of: cfa0904 ("drm/amd/display: Prevent Gating DTBCLK before It Is Properly Latched") Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 7c2d68e commit 467904a

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

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
@@ -393,6 +393,7 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base,
393393
if (clk_mgr_base->clks.dtbclk_en && !new_clocks->dtbclk_en) {
394394
if (clk_mgr->base.ctx->dc->config.allow_0_dtb_clk)
395395
dcn35_smu_set_dtbclk(clk_mgr, false);
396+
396397
clk_mgr_base->clks.dtbclk_en = new_clocks->dtbclk_en;
397398
}
398399
/* check that we're not already in lower */
@@ -410,11 +411,17 @@ void dcn35_update_clocks(struct clk_mgr *clk_mgr_base,
410411
}
411412

412413
if (!clk_mgr_base->clks.dtbclk_en && new_clocks->dtbclk_en) {
413-
dcn35_smu_set_dtbclk(clk_mgr, true);
414-
clk_mgr_base->clks.dtbclk_en = new_clocks->dtbclk_en;
414+
int actual_dtbclk = 0;
415415

416416
dcn35_update_clocks_update_dtb_dto(clk_mgr, context, new_clocks->ref_dtbclk_khz);
417-
clk_mgr_base->clks.ref_dtbclk_khz = new_clocks->ref_dtbclk_khz;
417+
dcn35_smu_set_dtbclk(clk_mgr, true);
418+
419+
actual_dtbclk = REG_READ(CLK1_CLK4_CURRENT_CNT);
420+
421+
if (actual_dtbclk) {
422+
clk_mgr_base->clks.ref_dtbclk_khz = new_clocks->ref_dtbclk_khz;
423+
clk_mgr_base->clks.dtbclk_en = new_clocks->dtbclk_en;
424+
}
418425
}
419426

420427
/* check that we're not already in D0 */
@@ -581,12 +588,10 @@ static bool dcn35_is_spll_ssc_enabled(struct clk_mgr *clk_mgr_base)
581588

582589
static void init_clk_states(struct clk_mgr *clk_mgr)
583590
{
584-
struct clk_mgr_internal *clk_mgr_int = TO_CLK_MGR_INTERNAL(clk_mgr);
585591
uint32_t ref_dtbclk = clk_mgr->clks.ref_dtbclk_khz;
592+
586593
memset(&(clk_mgr->clks), 0, sizeof(struct dc_clocks));
587594

588-
if (clk_mgr_int->smu_ver >= SMU_VER_THRESHOLD)
589-
clk_mgr->clks.dtbclk_en = true; // request DTBCLK disable on first commit
590595
clk_mgr->clks.ref_dtbclk_khz = ref_dtbclk; // restore ref_dtbclk
591596
clk_mgr->clks.p_state_change_support = true;
592597
clk_mgr->clks.prev_p_state_change_support = true;
@@ -597,6 +602,7 @@ static void init_clk_states(struct clk_mgr *clk_mgr)
597602
void dcn35_init_clocks(struct clk_mgr *clk_mgr)
598603
{
599604
struct clk_mgr_internal *clk_mgr_int = TO_CLK_MGR_INTERNAL(clk_mgr);
605+
600606
init_clk_states(clk_mgr);
601607

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

0 commit comments

Comments
 (0)