]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/msm/dpu: sync mode_config limits to the FB limits in dpu_plane.c
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tue, 3 Sep 2024 03:22:58 +0000 (06:22 +0300)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Mon, 21 Oct 2024 11:11:12 +0000 (14:11 +0300)
Lift mode_config limits set by the DPU driver to the actual FB limits as
handled by the dpu_plane.c. Move 2*max_lm_width check where it belongs,
to the drm_crtc_helper_funcs::mode_valid() callback.

Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Tested-by: Abhinav Kumar <quic_abhinavk@quicinc.com> # sc7280
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/612259/
Link: https://lore.kernel.org/r/20240903-dpu-mode-config-width-v6-15-617e1ecc4b7a@linaro.org
drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c

index db6c57900781d94de7c5ceb956c1664e3cd40c66..58595dcc38891875b02bb732fb548d3a2694c69e 100644 (file)
@@ -1230,6 +1230,19 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc,
        return 0;
 }
 
+static enum drm_mode_status dpu_crtc_mode_valid(struct drm_crtc *crtc,
+                                               const struct drm_display_mode *mode)
+{
+       struct dpu_kms *dpu_kms = _dpu_crtc_get_kms(crtc);
+
+       /*
+        * max crtc width is equal to the max mixer width * 2 and max height is 4K
+        */
+       return drm_mode_validate_size(mode,
+                                     2 * dpu_kms->catalog->caps->max_mixer_width,
+                                     4096);
+}
+
 int dpu_crtc_vblank(struct drm_crtc *crtc, bool en)
 {
        struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
@@ -1445,6 +1458,7 @@ static const struct drm_crtc_helper_funcs dpu_crtc_helper_funcs = {
        .atomic_check = dpu_crtc_atomic_check,
        .atomic_begin = dpu_crtc_atomic_begin,
        .atomic_flush = dpu_crtc_atomic_flush,
+       .mode_valid = dpu_crtc_mode_valid,
        .get_scanout_position = dpu_crtc_get_scanout_position,
 };
 
index 639f94852ead71c30dc956ee854c819778579263..15679dd50c66038816cd1fc6a92f3c99138c985f 100644 (file)
@@ -1201,13 +1201,8 @@ static int dpu_kms_hw_init(struct msm_kms *kms)
        dev->mode_config.min_width = 0;
        dev->mode_config.min_height = 0;
 
-       /*
-        * max crtc width is equal to the max mixer width * 2 and max height is
-        * is 4K
-        */
-       dev->mode_config.max_width =
-                       dpu_kms->catalog->caps->max_mixer_width * 2;
-       dev->mode_config.max_height = 4096;
+       dev->mode_config.max_width = DPU_MAX_IMG_WIDTH;
+       dev->mode_config.max_height = DPU_MAX_IMG_HEIGHT;
 
        dev->max_vblank_count = 0xffffffff;
        /* Disable vblank irqs aggressively for power-saving */