drm: Stop using drm_vblank_count() as the hw frame counter
drm_vblank_count() returns the software counter. We should not pretend it's the hw counter since we use the hw counter to figuere out what the software counter value should be. So instead provide a new function drm_vblank_no_hw_counter() for drivers that don't have a real hw counter. The new function simply returns 0, which is about the only thing it can do. Cc: Vincent Abriou <vincent.abriou@st.com> Cc: Thierry Reding <treding@nvidia.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Vincent Abriou <vincent.abriou@st.com> [danvet: s/int pipe/unsigned int pipe/ to follow Thierry's interface change.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
88e72717c2
commit
b44f84081b
15 changed files with 31 additions and 13 deletions
|
@ -300,7 +300,7 @@ static struct drm_driver armada_drm_driver = {
|
|||
.lastclose = armada_drm_lastclose,
|
||||
.unload = armada_drm_unload,
|
||||
.set_busid = drm_platform_set_busid,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = armada_drm_enable_vblank,
|
||||
.disable_vblank = armada_drm_disable_vblank,
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
|
|
|
@ -699,7 +699,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
|
|||
.irq_preinstall = atmel_hlcdc_dc_irq_uninstall,
|
||||
.irq_postinstall = atmel_hlcdc_dc_irq_postinstall,
|
||||
.irq_uninstall = atmel_hlcdc_dc_irq_uninstall,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = atmel_hlcdc_dc_enable_vblank,
|
||||
.disable_vblank = atmel_hlcdc_dc_disable_vblank,
|
||||
.gem_free_object = drm_gem_cma_free_object,
|
||||
|
|
|
@ -1798,3 +1798,20 @@ bool drm_crtc_handle_vblank(struct drm_crtc *crtc)
|
|||
return drm_handle_vblank(crtc->dev, drm_crtc_index(crtc));
|
||||
}
|
||||
EXPORT_SYMBOL(drm_crtc_handle_vblank);
|
||||
|
||||
/**
|
||||
* drm_vblank_no_hw_counter - "No hw counter" implementation of .get_vblank_counter()
|
||||
* @dev: DRM device
|
||||
* @pipe: CRTC for which to read the counter
|
||||
*
|
||||
* Drivers can plug this into the .get_vblank_counter() function if
|
||||
* there is no useable hardware frame counter available.
|
||||
*
|
||||
* Returns:
|
||||
* 0
|
||||
*/
|
||||
u32 drm_vblank_no_hw_counter(struct drm_device *dev, unsigned int pipe)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_vblank_no_hw_counter);
|
||||
|
|
|
@ -447,7 +447,7 @@ static struct drm_driver exynos_drm_driver = {
|
|||
.lastclose = exynos_drm_lastclose,
|
||||
.postclose = exynos_drm_postclose,
|
||||
.set_busid = drm_platform_set_busid,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = exynos_drm_crtc_enable_vblank,
|
||||
.disable_vblank = exynos_drm_crtc_disable_vblank,
|
||||
.gem_free_object = exynos_drm_gem_free_object,
|
||||
|
|
|
@ -193,7 +193,7 @@ static struct drm_driver fsl_dcu_drm_driver = {
|
|||
.unload = fsl_dcu_unload,
|
||||
.preclose = fsl_dcu_drm_preclose,
|
||||
.irq_handler = fsl_dcu_drm_irq,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = fsl_dcu_drm_enable_vblank,
|
||||
.disable_vblank = fsl_dcu_drm_disable_vblank,
|
||||
.gem_free_object = drm_gem_cma_free_object,
|
||||
|
|
|
@ -487,7 +487,7 @@ static struct drm_driver imx_drm_driver = {
|
|||
.gem_prime_vmap = drm_gem_cma_prime_vmap,
|
||||
.gem_prime_vunmap = drm_gem_cma_prime_vunmap,
|
||||
.gem_prime_mmap = drm_gem_cma_prime_mmap,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = imx_drm_enable_vblank,
|
||||
.disable_vblank = imx_drm_disable_vblank,
|
||||
.ioctls = imx_drm_ioctls,
|
||||
|
|
|
@ -978,7 +978,7 @@ static struct drm_driver msm_driver = {
|
|||
.irq_preinstall = msm_irq_preinstall,
|
||||
.irq_postinstall = msm_irq_postinstall,
|
||||
.irq_uninstall = msm_irq_uninstall,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = msm_enable_vblank,
|
||||
.disable_vblank = msm_disable_vblank,
|
||||
.gem_free_object = msm_gem_free_object,
|
||||
|
|
|
@ -934,7 +934,7 @@ driver_stub = {
|
|||
.debugfs_cleanup = nouveau_debugfs_takedown,
|
||||
#endif
|
||||
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = nouveau_display_vblank_enable,
|
||||
.disable_vblank = nouveau_display_vblank_disable,
|
||||
.get_scanout_position = nouveau_display_scanoutpos,
|
||||
|
|
|
@ -839,7 +839,7 @@ static struct drm_driver omap_drm_driver = {
|
|||
.preclose = dev_preclose,
|
||||
.postclose = dev_postclose,
|
||||
.set_busid = drm_platform_set_busid,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = omap_irq_enable_vblank,
|
||||
.disable_vblank = omap_irq_disable_vblank,
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
|
|
|
@ -259,7 +259,7 @@ static struct drm_driver rcar_du_driver = {
|
|||
.preclose = rcar_du_preclose,
|
||||
.lastclose = rcar_du_lastclose,
|
||||
.set_busid = drm_platform_set_busid,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = rcar_du_enable_vblank,
|
||||
.disable_vblank = rcar_du_disable_vblank,
|
||||
.gem_free_object = drm_gem_cma_free_object,
|
||||
|
|
|
@ -279,7 +279,7 @@ static struct drm_driver rockchip_drm_driver = {
|
|||
.load = rockchip_drm_load,
|
||||
.unload = rockchip_drm_unload,
|
||||
.lastclose = rockchip_drm_lastclose,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = rockchip_drm_crtc_enable_vblank,
|
||||
.disable_vblank = rockchip_drm_crtc_disable_vblank,
|
||||
.gem_vm_ops = &rockchip_drm_vm_ops,
|
||||
|
|
|
@ -269,7 +269,7 @@ static struct drm_driver shmob_drm_driver = {
|
|||
.preclose = shmob_drm_preclose,
|
||||
.set_busid = drm_platform_set_busid,
|
||||
.irq_handler = shmob_drm_irq,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = shmob_drm_enable_vblank,
|
||||
.disable_vblank = shmob_drm_disable_vblank,
|
||||
.gem_free_object = drm_gem_cma_free_object,
|
||||
|
|
|
@ -201,7 +201,7 @@ static struct drm_driver sti_driver = {
|
|||
.dumb_destroy = drm_gem_dumb_destroy,
|
||||
.fops = &sti_driver_fops,
|
||||
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = sti_crtc_enable_vblank,
|
||||
.disable_vblank = sti_crtc_disable_vblank,
|
||||
|
||||
|
|
|
@ -563,7 +563,7 @@ static struct drm_driver tilcdc_driver = {
|
|||
.irq_preinstall = tilcdc_irq_preinstall,
|
||||
.irq_postinstall = tilcdc_irq_postinstall,
|
||||
.irq_uninstall = tilcdc_irq_uninstall,
|
||||
.get_vblank_counter = drm_vblank_count,
|
||||
.get_vblank_counter = drm_vblank_no_hw_counter,
|
||||
.enable_vblank = tilcdc_enable_vblank,
|
||||
.disable_vblank = tilcdc_disable_vblank,
|
||||
.gem_free_object = drm_gem_cma_free_object,
|
||||
|
|
|
@ -953,6 +953,7 @@ extern void drm_crtc_vblank_off(struct drm_crtc *crtc);
|
|||
extern void drm_crtc_vblank_reset(struct drm_crtc *crtc);
|
||||
extern void drm_crtc_vblank_on(struct drm_crtc *crtc);
|
||||
extern void drm_vblank_cleanup(struct drm_device *dev);
|
||||
extern u32 drm_vblank_no_hw_counter(struct drm_device *dev, unsigned int pipe);
|
||||
|
||||
extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
|
||||
unsigned int pipe, int *max_error,
|
||||
|
|
Loading…
Reference in a new issue