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

Reply via email to