Commit b44f8408 authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Daniel Vetter

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: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: default avatarVincent Abriou <vincent.abriou@st.com>
[danvet: s/int pipe/unsigned int pipe/ to follow Thierry's interface
change.]
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 88e72717
...@@ -300,7 +300,7 @@ static struct drm_driver armada_drm_driver = { ...@@ -300,7 +300,7 @@ static struct drm_driver armada_drm_driver = {
.lastclose = armada_drm_lastclose, .lastclose = armada_drm_lastclose,
.unload = armada_drm_unload, .unload = armada_drm_unload,
.set_busid = drm_platform_set_busid, .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, .enable_vblank = armada_drm_enable_vblank,
.disable_vblank = armada_drm_disable_vblank, .disable_vblank = armada_drm_disable_vblank,
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
......
...@@ -699,7 +699,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = { ...@@ -699,7 +699,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
.irq_preinstall = atmel_hlcdc_dc_irq_uninstall, .irq_preinstall = atmel_hlcdc_dc_irq_uninstall,
.irq_postinstall = atmel_hlcdc_dc_irq_postinstall, .irq_postinstall = atmel_hlcdc_dc_irq_postinstall,
.irq_uninstall = atmel_hlcdc_dc_irq_uninstall, .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, .enable_vblank = atmel_hlcdc_dc_enable_vblank,
.disable_vblank = atmel_hlcdc_dc_disable_vblank, .disable_vblank = atmel_hlcdc_dc_disable_vblank,
.gem_free_object = drm_gem_cma_free_object, .gem_free_object = drm_gem_cma_free_object,
......
...@@ -1798,3 +1798,20 @@ bool drm_crtc_handle_vblank(struct drm_crtc *crtc) ...@@ -1798,3 +1798,20 @@ bool drm_crtc_handle_vblank(struct drm_crtc *crtc)
return drm_handle_vblank(crtc->dev, drm_crtc_index(crtc)); return drm_handle_vblank(crtc->dev, drm_crtc_index(crtc));
} }
EXPORT_SYMBOL(drm_crtc_handle_vblank); 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 = { ...@@ -447,7 +447,7 @@ static struct drm_driver exynos_drm_driver = {
.lastclose = exynos_drm_lastclose, .lastclose = exynos_drm_lastclose,
.postclose = exynos_drm_postclose, .postclose = exynos_drm_postclose,
.set_busid = drm_platform_set_busid, .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, .enable_vblank = exynos_drm_crtc_enable_vblank,
.disable_vblank = exynos_drm_crtc_disable_vblank, .disable_vblank = exynos_drm_crtc_disable_vblank,
.gem_free_object = exynos_drm_gem_free_object, .gem_free_object = exynos_drm_gem_free_object,
......
...@@ -193,7 +193,7 @@ static struct drm_driver fsl_dcu_drm_driver = { ...@@ -193,7 +193,7 @@ static struct drm_driver fsl_dcu_drm_driver = {
.unload = fsl_dcu_unload, .unload = fsl_dcu_unload,
.preclose = fsl_dcu_drm_preclose, .preclose = fsl_dcu_drm_preclose,
.irq_handler = fsl_dcu_drm_irq, .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, .enable_vblank = fsl_dcu_drm_enable_vblank,
.disable_vblank = fsl_dcu_drm_disable_vblank, .disable_vblank = fsl_dcu_drm_disable_vblank,
.gem_free_object = drm_gem_cma_free_object, .gem_free_object = drm_gem_cma_free_object,
......
...@@ -487,7 +487,7 @@ static struct drm_driver imx_drm_driver = { ...@@ -487,7 +487,7 @@ static struct drm_driver imx_drm_driver = {
.gem_prime_vmap = drm_gem_cma_prime_vmap, .gem_prime_vmap = drm_gem_cma_prime_vmap,
.gem_prime_vunmap = drm_gem_cma_prime_vunmap, .gem_prime_vunmap = drm_gem_cma_prime_vunmap,
.gem_prime_mmap = drm_gem_cma_prime_mmap, .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, .enable_vblank = imx_drm_enable_vblank,
.disable_vblank = imx_drm_disable_vblank, .disable_vblank = imx_drm_disable_vblank,
.ioctls = imx_drm_ioctls, .ioctls = imx_drm_ioctls,
......
...@@ -978,7 +978,7 @@ static struct drm_driver msm_driver = { ...@@ -978,7 +978,7 @@ static struct drm_driver msm_driver = {
.irq_preinstall = msm_irq_preinstall, .irq_preinstall = msm_irq_preinstall,
.irq_postinstall = msm_irq_postinstall, .irq_postinstall = msm_irq_postinstall,
.irq_uninstall = msm_irq_uninstall, .irq_uninstall = msm_irq_uninstall,
.get_vblank_counter = drm_vblank_count, .get_vblank_counter = drm_vblank_no_hw_counter,
.enable_vblank = msm_enable_vblank, .enable_vblank = msm_enable_vblank,
.disable_vblank = msm_disable_vblank, .disable_vblank = msm_disable_vblank,
.gem_free_object = msm_gem_free_object, .gem_free_object = msm_gem_free_object,
......
...@@ -934,7 +934,7 @@ driver_stub = { ...@@ -934,7 +934,7 @@ driver_stub = {
.debugfs_cleanup = nouveau_debugfs_takedown, .debugfs_cleanup = nouveau_debugfs_takedown,
#endif #endif
.get_vblank_counter = drm_vblank_count, .get_vblank_counter = drm_vblank_no_hw_counter,
.enable_vblank = nouveau_display_vblank_enable, .enable_vblank = nouveau_display_vblank_enable,
.disable_vblank = nouveau_display_vblank_disable, .disable_vblank = nouveau_display_vblank_disable,
.get_scanout_position = nouveau_display_scanoutpos, .get_scanout_position = nouveau_display_scanoutpos,
......
...@@ -839,7 +839,7 @@ static struct drm_driver omap_drm_driver = { ...@@ -839,7 +839,7 @@ static struct drm_driver omap_drm_driver = {
.preclose = dev_preclose, .preclose = dev_preclose,
.postclose = dev_postclose, .postclose = dev_postclose,
.set_busid = drm_platform_set_busid, .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, .enable_vblank = omap_irq_enable_vblank,
.disable_vblank = omap_irq_disable_vblank, .disable_vblank = omap_irq_disable_vblank,
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
......
...@@ -259,7 +259,7 @@ static struct drm_driver rcar_du_driver = { ...@@ -259,7 +259,7 @@ static struct drm_driver rcar_du_driver = {
.preclose = rcar_du_preclose, .preclose = rcar_du_preclose,
.lastclose = rcar_du_lastclose, .lastclose = rcar_du_lastclose,
.set_busid = drm_platform_set_busid, .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, .enable_vblank = rcar_du_enable_vblank,
.disable_vblank = rcar_du_disable_vblank, .disable_vblank = rcar_du_disable_vblank,
.gem_free_object = drm_gem_cma_free_object, .gem_free_object = drm_gem_cma_free_object,
......
...@@ -279,7 +279,7 @@ static struct drm_driver rockchip_drm_driver = { ...@@ -279,7 +279,7 @@ static struct drm_driver rockchip_drm_driver = {
.load = rockchip_drm_load, .load = rockchip_drm_load,
.unload = rockchip_drm_unload, .unload = rockchip_drm_unload,
.lastclose = rockchip_drm_lastclose, .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, .enable_vblank = rockchip_drm_crtc_enable_vblank,
.disable_vblank = rockchip_drm_crtc_disable_vblank, .disable_vblank = rockchip_drm_crtc_disable_vblank,
.gem_vm_ops = &rockchip_drm_vm_ops, .gem_vm_ops = &rockchip_drm_vm_ops,
......
...@@ -269,7 +269,7 @@ static struct drm_driver shmob_drm_driver = { ...@@ -269,7 +269,7 @@ static struct drm_driver shmob_drm_driver = {
.preclose = shmob_drm_preclose, .preclose = shmob_drm_preclose,
.set_busid = drm_platform_set_busid, .set_busid = drm_platform_set_busid,
.irq_handler = shmob_drm_irq, .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, .enable_vblank = shmob_drm_enable_vblank,
.disable_vblank = shmob_drm_disable_vblank, .disable_vblank = shmob_drm_disable_vblank,
.gem_free_object = drm_gem_cma_free_object, .gem_free_object = drm_gem_cma_free_object,
......
...@@ -201,7 +201,7 @@ static struct drm_driver sti_driver = { ...@@ -201,7 +201,7 @@ static struct drm_driver sti_driver = {
.dumb_destroy = drm_gem_dumb_destroy, .dumb_destroy = drm_gem_dumb_destroy,
.fops = &sti_driver_fops, .fops = &sti_driver_fops,
.get_vblank_counter = drm_vblank_count, .get_vblank_counter = drm_vblank_no_hw_counter,
.enable_vblank = sti_crtc_enable_vblank, .enable_vblank = sti_crtc_enable_vblank,
.disable_vblank = sti_crtc_disable_vblank, .disable_vblank = sti_crtc_disable_vblank,
......
...@@ -563,7 +563,7 @@ static struct drm_driver tilcdc_driver = { ...@@ -563,7 +563,7 @@ static struct drm_driver tilcdc_driver = {
.irq_preinstall = tilcdc_irq_preinstall, .irq_preinstall = tilcdc_irq_preinstall,
.irq_postinstall = tilcdc_irq_postinstall, .irq_postinstall = tilcdc_irq_postinstall,
.irq_uninstall = tilcdc_irq_uninstall, .irq_uninstall = tilcdc_irq_uninstall,
.get_vblank_counter = drm_vblank_count, .get_vblank_counter = drm_vblank_no_hw_counter,
.enable_vblank = tilcdc_enable_vblank, .enable_vblank = tilcdc_enable_vblank,
.disable_vblank = tilcdc_disable_vblank, .disable_vblank = tilcdc_disable_vblank,
.gem_free_object = drm_gem_cma_free_object, .gem_free_object = drm_gem_cma_free_object,
......
...@@ -953,6 +953,7 @@ extern void drm_crtc_vblank_off(struct drm_crtc *crtc); ...@@ -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_reset(struct drm_crtc *crtc);
extern void drm_crtc_vblank_on(struct drm_crtc *crtc); extern void drm_crtc_vblank_on(struct drm_crtc *crtc);
extern void drm_vblank_cleanup(struct drm_device *dev); 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, extern int drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev,
unsigned int pipe, int *max_error, unsigned int pipe, int *max_error,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment