[PATCH] drm: simple_kms_helper: Handle the vblank events
Marek Vasut
marex at denx.de
Mon Sep 26 09:41:36 UTC 2016
On 09/25/2016 11:00 PM, Daniel Vetter wrote:
> On Sun, Sep 25, 2016 at 09:41:58PM +0200, Marek Vasut wrote:
>> Handle the vblank events in the simple_kms_helper driver, otherwise
>> the drm_atomic_helper flip_done event never happens.
>>
>> Signed-off-by: Marek Vasut <marex at denx.de>
>> Cc: Noralf Trønnes <noralf at tronnes.org>
>> Cc: Daniel Vetter <daniel at ffwll.ch>
>> Cc: David Airlie <airlied at linux.ie>
>> ---
>> drivers/gpu/drm/drm_simple_kms_helper.c | 18 ++++++++++++++++++
>> 1 file changed, 18 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
>> index 7b6d26e..3345b40 100644
>> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
>> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
>> @@ -34,6 +34,23 @@ static const struct drm_encoder_funcs drm_simple_kms_encoder_funcs = {
>> .destroy = drm_encoder_cleanup,
>> };
>>
>> +static void drm_simple_kms_crtc_begin(struct drm_crtc *crtc,
>> + struct drm_crtc_state *state)
>> +{
>> + struct drm_pending_vblank_event *event = crtc->state->event;
>> +
>> + if (event) {
>> + crtc->state->event = NULL;
>> +
>> + spin_lock_irq(&crtc->dev->event_lock);
>> + if (drm_crtc_vblank_get(crtc) == 0)
>> + drm_crtc_arm_vblank_event(crtc, event);
>> + else
>> + drm_crtc_send_vblank_event(crtc, event);
>> + spin_unlock_irq(&crtc->dev->event_lock);
>> + }
>> +}
>
> This should be done by drivers, in the ->update hook. At least if we want
> to pretend that it's semi-accurate and not racy (which the above is).
> -Daniel
Got it and wrapped into mxsfb, thanks.
But then, I see a few drivers (arm hdlcd, fsl-dcu,...) doing the same
thing at random callbacks of CRTC . Shouldn't this event handling be
consolidated into some generic function and those drivers fixed to
call it from atomic update ?
--
Best regards,
Marek Vasut
More information about the dri-devel
mailing list