mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
drm/msm/dpu: move needs_cdm setting to dpu_encoder_get_topology()
As a preparation for calling dpu_encoder_get_topology() from different places, move the code setting topology->needs_cdm to that function (instead of patching topology separately). Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Patchwork: https://patchwork.freedesktop.org/patch/633395/ Link: https://lore.kernel.org/r/20250123-drm-dirty-modeset-v2-2-bbfd3a6cd1a4@linaro.org
This commit is contained in:
parent
25b4614843
commit
7d39f5bb82
|
|
@ -652,8 +652,11 @@ static struct msm_display_topology dpu_encoder_get_topology(
|
|||
struct dpu_kms *dpu_kms,
|
||||
struct drm_display_mode *mode,
|
||||
struct drm_crtc_state *crtc_state,
|
||||
struct drm_connector_state *conn_state,
|
||||
struct drm_dsc_config *dsc)
|
||||
{
|
||||
struct msm_drm_private *priv = dpu_enc->base.dev->dev_private;
|
||||
struct msm_display_info *disp_info = &dpu_enc->disp_info;
|
||||
struct msm_display_topology topology = {0};
|
||||
int i, intf_count = 0;
|
||||
|
||||
|
|
@ -702,6 +705,23 @@ static struct msm_display_topology dpu_encoder_get_topology(
|
|||
topology.num_intf = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Use CDM only for writeback or DP at the moment as other interfaces cannot handle it.
|
||||
* If writeback itself cannot handle cdm for some reason it will fail in its atomic_check()
|
||||
* earlier.
|
||||
*/
|
||||
if (disp_info->intf_type == INTF_WB && conn_state->writeback_job) {
|
||||
struct drm_framebuffer *fb;
|
||||
|
||||
fb = conn_state->writeback_job->fb;
|
||||
|
||||
if (fb && MSM_FORMAT_IS_YUV(msm_framebuffer_format(fb)))
|
||||
topology.needs_cdm = true;
|
||||
} else if (disp_info->intf_type == INTF_DP) {
|
||||
if (msm_dp_is_yuv_420_enabled(priv->dp[disp_info->h_tile_instance[0]], mode))
|
||||
topology.needs_cdm = true;
|
||||
}
|
||||
|
||||
return topology;
|
||||
}
|
||||
|
||||
|
|
@ -749,9 +769,7 @@ static int dpu_encoder_virt_atomic_check(
|
|||
struct dpu_kms *dpu_kms;
|
||||
struct drm_display_mode *adj_mode;
|
||||
struct msm_display_topology topology;
|
||||
struct msm_display_info *disp_info;
|
||||
struct dpu_global_state *global_state;
|
||||
struct drm_framebuffer *fb;
|
||||
struct drm_dsc_config *dsc;
|
||||
int ret = 0;
|
||||
|
||||
|
|
@ -765,7 +783,6 @@ static int dpu_encoder_virt_atomic_check(
|
|||
DPU_DEBUG_ENC(dpu_enc, "\n");
|
||||
|
||||
priv = drm_enc->dev->dev_private;
|
||||
disp_info = &dpu_enc->disp_info;
|
||||
dpu_kms = to_dpu_kms(priv->kms);
|
||||
adj_mode = &crtc_state->adjusted_mode;
|
||||
global_state = dpu_kms_get_global_state(crtc_state->state);
|
||||
|
|
@ -776,22 +793,8 @@ static int dpu_encoder_virt_atomic_check(
|
|||
|
||||
dsc = dpu_encoder_get_dsc_config(drm_enc);
|
||||
|
||||
topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode, crtc_state, dsc);
|
||||
|
||||
/*
|
||||
* Use CDM only for writeback or DP at the moment as other interfaces cannot handle it.
|
||||
* If writeback itself cannot handle cdm for some reason it will fail in its atomic_check()
|
||||
* earlier.
|
||||
*/
|
||||
if (disp_info->intf_type == INTF_WB && conn_state->writeback_job) {
|
||||
fb = conn_state->writeback_job->fb;
|
||||
|
||||
if (fb && MSM_FORMAT_IS_YUV(msm_framebuffer_format(fb)))
|
||||
topology.needs_cdm = true;
|
||||
} else if (disp_info->intf_type == INTF_DP) {
|
||||
if (msm_dp_is_yuv_420_enabled(priv->dp[disp_info->h_tile_instance[0]], adj_mode))
|
||||
topology.needs_cdm = true;
|
||||
}
|
||||
topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode, crtc_state, conn_state,
|
||||
dsc);
|
||||
|
||||
if (topology.needs_cdm && !dpu_enc->cur_master->hw_cdm)
|
||||
crtc_state->mode_changed = true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user