OSDN Git Service

drm/msm: provide fb_dirty implemenation
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Mon, 12 Jun 2023 03:16:15 +0000 (06:16 +0300)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Thu, 15 Jun 2023 10:08:51 +0000 (13:08 +0300)
Since commit 93e81e38e197 ("drm/fb_helper: Minimize damage-helper
overhead") the drm_fb_helper_funcs::fb_dirty helper is required for
proper dirty/damage processing. The drm/msm driver requires that to
function to let CMD panels to work. Use simplified version of
drm_fbdev_generic_helper_fb_dirty() to fix support for CMD mode panels.

Reported-by: Degdag Mohamed <degdagmohamed@gmail.com>
Fixes: 93e81e38e197 ("drm/fb_helper: Minimize damage-helper overhead")
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Marijn Suijten <marijn.suijten@somainline.org>
Patchwork: https://patchwork.freedesktop.org/patch/542002/
Link: https://lore.kernel.org/r/20230612031616.3620134-1-dmitry.baryshkov@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/msm/msm_fbdev.c

index fa9c1cb..b933a85 100644 (file)
@@ -139,8 +139,28 @@ fail:
        return ret;
 }
 
+static int msm_fbdev_fb_dirty(struct drm_fb_helper *helper,
+                             struct drm_clip_rect *clip)
+{
+       struct drm_device *dev = helper->dev;
+       int ret;
+
+       /* Call damage handlers only if necessary */
+       if (!(clip->x1 < clip->x2 && clip->y1 < clip->y2))
+               return 0;
+
+       if (helper->fb->funcs->dirty) {
+               ret = helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, clip, 1);
+               if (drm_WARN_ONCE(dev, ret, "Dirty helper failed: ret=%d\n", ret))
+                       return ret;
+       }
+
+       return 0;
+}
+
 static const struct drm_fb_helper_funcs msm_fb_helper_funcs = {
        .fb_probe = msm_fbdev_create,
+       .fb_dirty = msm_fbdev_fb_dirty,
 };
 
 /*