On Mon, Jan 20, 2020 at 01:20:48PM +0100, Thomas Zimmermann wrote: > The new interface drm_crtc_has_vblank() return true if vblanking has > been initialized for a certain CRTC, or false otherwise. This function > will be useful for initializing CRTC state. > > Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > --- > drivers/gpu/drm/drm_vblank.c | 21 +++++++++++++++++++++ > include/drm/drm_vblank.h | 1 + > 2 files changed, 22 insertions(+) > > diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c > index 1659b13b178c..c20102899411 100644 > --- a/drivers/gpu/drm/drm_vblank.c > +++ b/drivers/gpu/drm/drm_vblank.c > @@ -501,6 +501,27 @@ int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs) > } > EXPORT_SYMBOL(drm_vblank_init); > > +/** > + * drm_crtc_has_vblank - test if vblanking has been initialized for > + * a CRTC > + * @crtc: the CRTC > + * > + * Drivers may call this function to test if vblank support is > + * initialized for a CRTC. For most hardware this means that vblanking > + * can also be enabled on the CRTC. > + * > + * Returns: > + * True if vblanking has been initialized for the given CRTC, false > + * otherwise. > + */ > +bool drm_crtc_has_vblank(const struct drm_crtc *crtc) So making this specific to a CRTC sounds like a good idea. But it's not the reality, drm_vblank.c assumes that either everything or nothing supports vblanks. The reason for dev->num_crtcs is historical baggage, it predates kms by a few years. For kms drivers the only two valid values are either 0 or dev->mode_config.num_crtcs. Yes that's an entire different can of worms that's been irking me since forever (ideally drm_vblank_init would somehow loose the num_crtcs argument for kms drivers, but some drivers call this before they've done all the drm_crtc_init calls so it's complicated). Hence drm_dev_has_vblank as I suggested. That would also allow you to replace a bunch of if (dev->num_crtcs) checks in drm_vblank.c, which should help quite a bit in code readability. Cheers, Daniel > +{ > + struct drm_device *dev = crtc->dev; > + > + return crtc->index < dev->num_crtcs; > +} > +EXPORT_SYMBOL(drm_crtc_has_vblank); > + > /** > * drm_crtc_vblank_waitqueue - get vblank waitqueue for the CRTC > * @crtc: which CRTC's vblank waitqueue to retrieve > diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h > index c16c44052b3d..531a6bc12b7e 100644 > --- a/include/drm/drm_vblank.h > +++ b/include/drm/drm_vblank.h > @@ -206,6 +206,7 @@ struct drm_vblank_crtc { > }; > > int drm_vblank_init(struct drm_device *dev, unsigned int num_crtcs); > +bool drm_crtc_has_vblank(const struct drm_crtc *crtc); > u64 drm_crtc_vblank_count(struct drm_crtc *crtc); > u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc, > ktime_t *vblanktime); > -- > 2.24.1 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization