Hi

Am 08.09.26 um 15:23 schrieb Yongbang Shi:
Do not send the vblank event when the page flip completes, but when
the vblank interrupt fires. Sending the vblank event at the wrong time
can break synchronization of the display update with the vblank period.

Use the vblank helper drm_crtc_vblank_atomic_flush(), which sets up
the vblank event accordingly. In case of an error, it still sends out
the vblank event immediately; thus not starving consumers.

Signed-off-by: Thomas Zimmermann <[email protected]>
---
  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 16 ++--------------
  1 file changed, 2 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
index b4ab53db1c08..72ce696e6d11 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
@@ -20,6 +20,7 @@
  #include <drm/drm_gem_atomic_helper.h>
  #include <drm/drm_gem_framebuffer_helper.h>
  #include <drm/drm_vblank.h>
+#include <drm/drm_vblank_helper.h>
    #include "hibmc_drm_drv.h"
  #include "hibmc_drm_regs.h"
@@ -420,19 +421,6 @@ static void hibmc_crtc_atomic_begin(struct drm_crtc *crtc,
      /* We can add more initialization as needed. */
  }
  -static void hibmc_crtc_atomic_flush(struct drm_crtc *crtc,
-                    struct drm_atomic_commit *state)
-
-{
-    unsigned long flags;
-
-    spin_lock_irqsave(&crtc->dev->event_lock, flags);
-    if (crtc->state->event)
-        drm_crtc_send_vblank_event(crtc, crtc->state->event);
-    crtc->state->event = NULL;
-    spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
-}
-
  static int hibmc_crtc_enable_vblank(struct drm_crtc *crtc)
  {
      struct hibmc_drm_private *priv = to_hibmc_drm_private(crtc->dev);
@@ -502,7 +490,7 @@ static const struct drm_crtc_funcs hibmc_crtc_funcs = {
  static const struct drm_crtc_helper_funcs hibmc_crtc_helper_funcs = {
      .mode_set_nofb    = hibmc_crtc_mode_set_nofb,
      .atomic_begin    = hibmc_crtc_atomic_begin,
-    .atomic_flush    = hibmc_crtc_atomic_flush,
+    .atomic_flush    = drm_crtc_vblank_atomic_flush,
      .atomic_enable    = hibmc_crtc_atomic_enable,
      .atomic_disable    = hibmc_crtc_atomic_disable,
      .mode_valid = hibmc_crtc_mode_valid,

Reviewed-by: Yongbang Shi <[email protected]>

Thanks for reviewing. I've merged the patches into drm-misc-next.

Best regards
Thomas


--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, (HRB 36809, AG Nürnberg)


Reply via email to