]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: Add num_slices_h to set_dto_dscclk signature
authorIlya Bakoulin <Ilya.Bakoulin@amd.com>
Thu, 5 Jun 2025 15:48:23 +0000 (11:48 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 24 Jun 2025 13:58:17 +0000 (09:58 -0400)
Add the number of horizontal slices argument to allow configuring clock
based on slice number.

Reviewed-by: Nevenko Stupar <nevenko.stupar@amd.com>
Signed-off-by: Ilya Bakoulin <Ilya.Bakoulin@amd.com>
Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dccg/dcn401/dcn401_dccg.c
drivers/gpu/drm/amd/display/dc/dccg/dcn401/dcn401_dccg.h
drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c
drivers/gpu/drm/amd/display/dc/inc/hw/dccg.h
drivers/gpu/drm/amd/display/dc/link/link_dpms.c

index ffd172231fdfe6304a224530539ed7997b16fb10..668ee2d405fdf520c81f3db1c4849e0abe280b84 100644 (file)
@@ -727,7 +727,7 @@ void dccg401_init(struct dccg *dccg)
        }
 }
 
-void dccg401_set_dto_dscclk(struct dccg *dccg, uint32_t inst)
+void dccg401_set_dto_dscclk(struct dccg *dccg, uint32_t inst, uint32_t num_slices_h)
 {
        struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg);
 
index 55e8718aad22b966ca8fa75ae90b46b002987aa6..5947a35363aace644094b6ba7261b8445ca1558b 100644 (file)
@@ -209,7 +209,7 @@ void dccg401_disable_symclk32_le(
                struct dccg *dccg,
                int hpo_le_inst);
 void dccg401_disable_dpstreamclk(struct dccg *dccg, int dp_hpo_inst);
-void dccg401_set_dto_dscclk(struct dccg *dccg, uint32_t inst);
+void dccg401_set_dto_dscclk(struct dccg *dccg, uint32_t inst, uint32_t num_slices_h);
 void dccg401_set_ref_dscclk(struct dccg *dccg,
                                uint32_t dsc_inst);
 void dccg401_set_src_sel(
@@ -230,7 +230,6 @@ void dccg401_set_dp_dto(
                const struct dp_dto_params *params);
 void dccg401_enable_symclk_se(struct dccg *dccg, uint32_t stream_enc_inst, uint32_t link_enc_inst);
 void dccg401_disable_symclk_se(struct dccg *dccg, uint32_t stream_enc_inst, uint32_t link_enc_inst);
-void dccg401_set_dto_dscclk(struct dccg *dccg, uint32_t inst);
 void dccg401_set_dtbclk_p_src(
                struct dccg *dccg,
                enum streamclk_source src,
index a0b05b9ef660898a20073352ba8d0c03d83889e9..416b1dca3dac919f868074427c449d5c3ef1d5a2 100644 (file)
@@ -1063,15 +1063,17 @@ void dcn32_update_dsc_on_stream(struct pipe_ctx *pipe_ctx, bool enable)
                dsc_cfg.dc_dsc_cfg.num_slices_h /= opp_cnt;
 
                if (should_use_dto_dscclk)
-                       dccg->funcs->set_dto_dscclk(dccg, dsc->inst);
+                       dccg->funcs->set_dto_dscclk(dccg, dsc->inst, dsc_cfg.dc_dsc_cfg.num_slices_h);
                dsc->funcs->dsc_set_config(dsc, &dsc_cfg, &dsc_optc_cfg);
                dsc->funcs->dsc_enable(dsc, pipe_ctx->stream_res.opp->inst);
                for (odm_pipe = pipe_ctx->next_odm_pipe; odm_pipe; odm_pipe = odm_pipe->next_odm_pipe) {
                        struct display_stream_compressor *odm_dsc = odm_pipe->stream_res.dsc;
 
                        ASSERT(odm_dsc);
+                       if (!odm_dsc)
+                               continue;
                        if (should_use_dto_dscclk)
-                               dccg->funcs->set_dto_dscclk(dccg, odm_dsc->inst);
+                               dccg->funcs->set_dto_dscclk(dccg, odm_dsc->inst, dsc_cfg.dc_dsc_cfg.num_slices_h);
                        odm_dsc->funcs->dsc_set_config(odm_dsc, &dsc_cfg, &dsc_optc_cfg);
                        odm_dsc->funcs->dsc_enable(odm_dsc, odm_pipe->stream_res.opp->inst);
                }
index e94e9ba60f55a6906acf83aea6896f8c6c289f97..61c4d2a7db1cebd8ec49ad7f94c419bd89f37a06 100644 (file)
@@ -211,7 +211,7 @@ struct dccg_funcs {
                        struct dccg *dccg,
                        enum streamclk_source src,
                        uint32_t otg_inst);
-       void (*set_dto_dscclk)(struct dccg *dccg, uint32_t dsc_inst);
+       void (*set_dto_dscclk)(struct dccg *dccg, uint32_t dsc_inst, uint32_t num_slices_h);
        void (*set_ref_dscclk)(struct dccg *dccg, uint32_t dsc_inst);
        void (*dccg_root_gate_disable_control)(struct dccg *dccg, uint32_t pipe_idx, uint32_t disable_clock_gating);
 };
index e15631bead09171942fbc1d89c368dfea5831956..8724050b79009f2f007aa28e4ed3be7f4341b23a 100644 (file)
@@ -843,14 +843,14 @@ void link_set_dsc_on_stream(struct pipe_ctx *pipe_ctx, bool enable)
                dsc_cfg.dc_dsc_cfg.num_slices_h /= opp_cnt;
 
                if (should_use_dto_dscclk)
-                       dccg->funcs->set_dto_dscclk(dccg, dsc->inst);
+                       dccg->funcs->set_dto_dscclk(dccg, dsc->inst, dsc_cfg.dc_dsc_cfg.num_slices_h);
                dsc->funcs->dsc_set_config(dsc, &dsc_cfg, &dsc_optc_cfg);
                dsc->funcs->dsc_enable(dsc, pipe_ctx->stream_res.opp->inst);
                for (odm_pipe = pipe_ctx->next_odm_pipe; odm_pipe; odm_pipe = odm_pipe->next_odm_pipe) {
                        struct display_stream_compressor *odm_dsc = odm_pipe->stream_res.dsc;
 
                        if (should_use_dto_dscclk)
-                               dccg->funcs->set_dto_dscclk(dccg, odm_dsc->inst);
+                               dccg->funcs->set_dto_dscclk(dccg, odm_dsc->inst, dsc_cfg.dc_dsc_cfg.num_slices_h);
                        odm_dsc->funcs->dsc_set_config(odm_dsc, &dsc_cfg, &dsc_optc_cfg);
                        odm_dsc->funcs->dsc_enable(odm_dsc, odm_pipe->stream_res.opp->inst);
                }