Boris Brezillon [off-list ref] writes:
There are two problems related to VBLANK handling in the current CRTC
driver:
* VBLANK events are missed when the CRTC is being disabled because the
driver does not wait till the end of the frame before stopping the
HVS and PV blocks. In this case, we should explicitly issue a VBLANK
event if there's one waiting
* when we are enabling a CRTC, drm_crtc_vblank_get() is called before
drm_crtc_vblank_on(), which is not supposed to happen (hence the
WARN_ON() in the code). To solve the problem, we delay the 'update
display list' operation after the CRTC is actually enabled.
Does drm_crtc_vblank_get() actually fail when drm_crtc_vblank_on()
hasn't been called? The code is a bit twisty, but it looked like we
would track the get refcount and then turn on the interrupt once
drm_crtc_vblank_on() was called.
The first change of the two seems straightforward and good, though (and
possible to separate, right?).