Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+22 -19
+22 -19
drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
··· 652 652 struct dpu_kms *dpu_kms, 653 653 struct drm_display_mode *mode, 654 654 struct drm_crtc_state *crtc_state, 655 + struct drm_connector_state *conn_state, 655 656 struct drm_dsc_config *dsc) 656 657 { 658 + struct msm_drm_private *priv = dpu_enc->base.dev->dev_private; 659 + struct msm_display_info *disp_info = &dpu_enc->disp_info; 657 660 struct msm_display_topology topology = {0}; 658 661 int i, intf_count = 0; 659 662 ··· 703 700 topology.num_lm = 1; 704 701 } 705 702 topology.num_intf = 1; 703 + } 704 + 705 + /* 706 + * Use CDM only for writeback or DP at the moment as other interfaces cannot handle it. 707 + * If writeback itself cannot handle cdm for some reason it will fail in its atomic_check() 708 + * earlier. 709 + */ 710 + if (disp_info->intf_type == INTF_WB && conn_state->writeback_job) { 711 + struct drm_framebuffer *fb; 712 + 713 + fb = conn_state->writeback_job->fb; 714 + 715 + if (fb && MSM_FORMAT_IS_YUV(msm_framebuffer_format(fb))) 716 + topology.needs_cdm = true; 717 + } else if (disp_info->intf_type == INTF_DP) { 718 + if (msm_dp_is_yuv_420_enabled(priv->dp[disp_info->h_tile_instance[0]], mode)) 719 + topology.needs_cdm = true; 706 720 } 707 721 708 722 return topology; ··· 769 749 struct dpu_kms *dpu_kms; 770 750 struct drm_display_mode *adj_mode; 771 751 struct msm_display_topology topology; 772 - struct msm_display_info *disp_info; 773 752 struct dpu_global_state *global_state; 774 - struct drm_framebuffer *fb; 775 753 struct drm_dsc_config *dsc; 776 754 int ret = 0; 777 755 ··· 783 765 DPU_DEBUG_ENC(dpu_enc, "\n"); 784 766 785 767 priv = drm_enc->dev->dev_private; 786 - disp_info = &dpu_enc->disp_info; 787 768 dpu_kms = to_dpu_kms(priv->kms); 788 769 adj_mode = &crtc_state->adjusted_mode; 789 770 global_state = dpu_kms_get_global_state(crtc_state->state); ··· 793 776 794 777 dsc = dpu_encoder_get_dsc_config(drm_enc); 795 778 796 - topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode, crtc_state, dsc); 797 - 798 - /* 799 - * Use CDM only for writeback or DP at the moment as other interfaces cannot handle it. 800 - * If writeback itself cannot handle cdm for some reason it will fail in its atomic_check() 801 - * earlier. 802 - */ 803 - if (disp_info->intf_type == INTF_WB && conn_state->writeback_job) { 804 - fb = conn_state->writeback_job->fb; 805 - 806 - if (fb && MSM_FORMAT_IS_YUV(msm_framebuffer_format(fb))) 807 - topology.needs_cdm = true; 808 - } else if (disp_info->intf_type == INTF_DP) { 809 - if (msm_dp_is_yuv_420_enabled(priv->dp[disp_info->h_tile_instance[0]], adj_mode)) 810 - topology.needs_cdm = true; 811 - } 779 + topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode, crtc_state, conn_state, 780 + dsc); 812 781 813 782 if (topology.needs_cdm && !dpu_enc->cur_master->hw_cdm) 814 783 crtc_state->mode_changed = true;