]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amd/display: fix seamless odm transitions
authorDmytro Laktyushkin <dmytro.laktyushkin@amd.com>
Tue, 18 Apr 2023 14:11:56 +0000 (10:11 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 23 Jul 2023 11:49:39 +0000 (13:49 +0200)
commit 75c2b7ed080d7421157c03064be82275364136e7 upstream.

Add missing programming and function pointers

Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Acked-by: Stylon Wang <stylon.wang@amd.com>
Signed-off-by: Dmytro Laktyushkin <dmytro.laktyushkin@amd.com>
Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.h

index 2d49e99a152c434ac6220b2d6fb9f357737bc0fb..622efa556e7adb38c7c8186ce8655b476c08867c 100644 (file)
@@ -1678,6 +1678,17 @@ static void dcn20_program_pipe(
 
                if (hws->funcs.setup_vupdate_interrupt)
                        hws->funcs.setup_vupdate_interrupt(dc, pipe_ctx);
+
+               if (hws->funcs.calculate_dccg_k1_k2_values && dc->res_pool->dccg->funcs->set_pixel_rate_div) {
+                       unsigned int k1_div, k2_div;
+
+                       hws->funcs.calculate_dccg_k1_k2_values(pipe_ctx, &k1_div, &k2_div);
+
+                       dc->res_pool->dccg->funcs->set_pixel_rate_div(
+                               dc->res_pool->dccg,
+                               pipe_ctx->stream_res.tg->inst,
+                               k1_div, k2_div);
+               }
        }
 
        if (pipe_ctx->update_flags.bits.odm)
index 2b33eeb213e2a9a0ecc4e323bbb5308328ebff1b..fe941b103de817b82e65d96fb303e72cc21b5b30 100644 (file)
@@ -98,7 +98,7 @@ static void optc32_set_odm_combine(struct timing_generator *optc, int *opp_id, i
        optc1->opp_count = opp_cnt;
 }
 
-static void optc32_set_h_timing_div_manual_mode(struct timing_generator *optc, bool manual_mode)
+void optc32_set_h_timing_div_manual_mode(struct timing_generator *optc, bool manual_mode)
 {
        struct optc *optc1 = DCN10TG_FROM_TG(optc);
 
index 5e57c39235fab070ae7613080bb5b497944582b8..e5c5343e56404516ffedf0f0188a9a49b212c8f6 100644 (file)
        SF(OTG0_OTG_DRR_CONTROL, OTG_V_TOTAL_LAST_USED_BY_DRR, mask_sh)
 
 void dcn32_timing_generator_init(struct optc *optc1);
+void optc32_set_h_timing_div_manual_mode(struct timing_generator *optc, bool manual_mode);
 
 #endif /* __DC_OPTC_DCN32_H__ */