[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