lkml.org 
[lkml]   [2023]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 31/39] drm: renesas: shmobile: Turn vblank on/off when enabling/disabling CRTC
    Hi Geert,

    Thank you for the patch.

    On Thu, Jun 22, 2023 at 11:21:43AM +0200, Geert Uytterhoeven wrote:
    > The DRM core vblank handling mechanism requires drivers to forcefully
    > turn vblank reporting off when disabling the CRTC, and to restore the
    > vblank reporting status when enabling the CRTC.
    > Implement this using the drm_crtc_vblank_{on,off}() helpers.
    >
    > Note that drm_crtc_vblank_off() must be called at startup to synchronize
    > the state of the vblank core code with the hardware, which is initially
    > disabled. This is performed at CRTC creation time, requiring vertical
    > blank initialization to be moved before creating CRTCs.
    >
    > Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>

    Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

    > ---
    > drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c | 10 +++++++++-
    > drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c | 12 ++++++------
    > 2 files changed, 15 insertions(+), 7 deletions(-)
    >
    > diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
    > index d2a0ac5f9368c11c..b184019d8b1ed89c 100644
    > --- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
    > +++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
    > @@ -267,6 +267,9 @@ static void shmob_drm_crtc_start(struct shmob_drm_crtc *scrtc)
    >
    > shmob_drm_crtc_start_stop(scrtc, true);
    >
    > + /* Turn vertical blank interrupt reporting back on. */
    > + drm_crtc_vblank_on(crtc);
    > +
    > scrtc->started = true;
    > }
    >
    > @@ -332,10 +335,12 @@ static void shmob_drm_crtc_stop(struct shmob_drm_crtc *scrtc)
    > return;
    >
    > /*
    > - * Wait for page flip completion before stopping the CRTC as userspace
    > + * Disable vertical blank interrupt reporting. We first need to wait
    > + * for page flip completion before stopping the CRTC as userspace
    > * expects page flips to eventually complete.
    > */
    > shmob_drm_crtc_wait_page_flip(scrtc);
    > + drm_crtc_vblank_off(crtc);
    >
    > /* Stop the LCDC. */
    > shmob_drm_crtc_start_stop(scrtc, false);
    > @@ -571,6 +576,9 @@ int shmob_drm_crtc_create(struct shmob_drm_device *sdev)
    >
    > drm_crtc_helper_add(crtc, &crtc_helper_funcs);
    >
    > + /* Start with vertical blank interrupt reporting disabled. */
    > + drm_crtc_vblank_off(crtc);
    > +
    > return 0;
    > }
    >
    > diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c
    > index 6eaf2c5a104f451a..a29c0c1093725b6e 100644
    > --- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c
    > +++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c
    > @@ -189,17 +189,17 @@ static int shmob_drm_probe(struct platform_device *pdev)
    > if (ret < 0)
    > return ret;
    >
    > - ret = shmob_drm_modeset_init(sdev);
    > - if (ret < 0)
    > - return dev_err_probe(&pdev->dev, ret,
    > - "failed to initialize mode setting\n");
    > -
    > ret = drm_vblank_init(ddev, 1);
    > if (ret < 0) {
    > dev_err(&pdev->dev, "failed to initialize vblank\n");
    > - goto err_modeset_cleanup;
    > + return ret;
    > }
    >
    > + ret = shmob_drm_modeset_init(sdev);
    > + if (ret < 0)
    > + return dev_err_probe(&pdev->dev, ret,
    > + "failed to initialize mode setting\n");
    > +
    > ret = platform_get_irq(pdev, 0);
    > if (ret < 0)
    > goto err_modeset_cleanup;

    --
    Regards,

    Laurent Pinchart

    \
     
     \ /
      Last update: 2023-06-23 19:11    [W:3.644 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site