aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThierry Reding <treding@nvidia.com>2014-10-08 08:48:51 -0400
committerThierry Reding <treding@nvidia.com>2014-11-13 08:07:50 -0500
commit8ff64c17f3bec8cdafc68461532e273babe2a605 (patch)
tree83755dd5a3c6c4250c1d06e0725557465aeae363
parentf114040e3ea6e07372334ade75d1ee0775c355e1 (diff)
drm/tegra: dc: Add missing call to drm_vblank_on()
When the CRTC is enabled, make sure the VBLANK machinery is enabled. Failure to do so will cause drm_vblank_get() to not enable the VBLANK on the CRTC and VBLANK-synchronized page-flips won't work. While at it, get rid of the legacy drm_vblank_pre_modeset() and drm_vblank_post_modeset() calls that are replaced by drm_vblank_on() and drm_vblank_off(). Reported-by: Alexandre Courbot <acourbot@nvidia.com> Tested-by: Alexandre Courbot <acourbot@nvidia.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--drivers/gpu/drm/tegra/dc.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index 6553fd238685..054a79f143ae 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -736,7 +736,6 @@ static const struct drm_crtc_funcs tegra_crtc_funcs = {
736 736
737static void tegra_crtc_disable(struct drm_crtc *crtc) 737static void tegra_crtc_disable(struct drm_crtc *crtc)
738{ 738{
739 struct tegra_dc *dc = to_tegra_dc(crtc);
740 struct drm_device *drm = crtc->dev; 739 struct drm_device *drm = crtc->dev;
741 struct drm_plane *plane; 740 struct drm_plane *plane;
742 741
@@ -752,7 +751,7 @@ static void tegra_crtc_disable(struct drm_crtc *crtc)
752 } 751 }
753 } 752 }
754 753
755 drm_vblank_off(drm, dc->pipe); 754 drm_crtc_vblank_off(crtc);
756} 755}
757 756
758static bool tegra_crtc_mode_fixup(struct drm_crtc *crtc, 757static bool tegra_crtc_mode_fixup(struct drm_crtc *crtc,
@@ -841,8 +840,6 @@ static int tegra_crtc_mode_set(struct drm_crtc *crtc,
841 u32 value; 840 u32 value;
842 int err; 841 int err;
843 842
844 drm_vblank_pre_modeset(crtc->dev, dc->pipe);
845
846 err = tegra_crtc_setup_clk(crtc, mode); 843 err = tegra_crtc_setup_clk(crtc, mode);
847 if (err) { 844 if (err) {
848 dev_err(dc->dev, "failed to setup clock for CRTC: %d\n", err); 845 dev_err(dc->dev, "failed to setup clock for CRTC: %d\n", err);
@@ -896,6 +893,8 @@ static void tegra_crtc_prepare(struct drm_crtc *crtc)
896 unsigned int syncpt; 893 unsigned int syncpt;
897 unsigned long value; 894 unsigned long value;
898 895
896 drm_crtc_vblank_off(crtc);
897
899 /* hardware initialization */ 898 /* hardware initialization */
900 reset_control_deassert(dc->rst); 899 reset_control_deassert(dc->rst);
901 usleep_range(10000, 20000); 900 usleep_range(10000, 20000);
@@ -943,7 +942,7 @@ static void tegra_crtc_commit(struct drm_crtc *crtc)
943 value = GENERAL_ACT_REQ | WIN_A_ACT_REQ; 942 value = GENERAL_ACT_REQ | WIN_A_ACT_REQ;
944 tegra_dc_writel(dc, value, DC_CMD_STATE_CONTROL); 943 tegra_dc_writel(dc, value, DC_CMD_STATE_CONTROL);
945 944
946 drm_vblank_post_modeset(crtc->dev, dc->pipe); 945 drm_crtc_vblank_on(crtc);
947} 946}
948 947
949static void tegra_crtc_load_lut(struct drm_crtc *crtc) 948static void tegra_crtc_load_lut(struct drm_crtc *crtc)