aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/omap_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_drv.c')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_drv.c47
1 files changed, 30 insertions, 17 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 9b3c36b48356..cdf5b0601eba 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -84,23 +84,36 @@ static void omap_atomic_commit_tail(struct drm_atomic_state *old_state)
84 /* Apply the atomic update. */ 84 /* Apply the atomic update. */
85 drm_atomic_helper_commit_modeset_disables(dev, old_state); 85 drm_atomic_helper_commit_modeset_disables(dev, old_state);
86 86
87 /* With the current dss dispc implementation we have to enable 87 if (priv->omaprev != 0x3430) {
88 * the new modeset before we can commit planes. The dispc ovl 88 /* With the current dss dispc implementation we have to enable
89 * configuration relies on the video mode configuration been 89 * the new modeset before we can commit planes. The dispc ovl
90 * written into the HW when the ovl configuration is 90 * configuration relies on the video mode configuration been
91 * calculated. 91 * written into the HW when the ovl configuration is
92 * 92 * calculated.
93 * This approach is not ideal because after a mode change the 93 *
94 * plane update is executed only after the first vblank 94 * This approach is not ideal because after a mode change the
95 * interrupt. The dispc implementation should be fixed so that 95 * plane update is executed only after the first vblank
96 * it is able use uncommitted drm state information. 96 * interrupt. The dispc implementation should be fixed so that
97 */ 97 * it is able use uncommitted drm state information.
98 drm_atomic_helper_commit_modeset_enables(dev, old_state); 98 */
99 omap_atomic_wait_for_completion(dev, old_state); 99 drm_atomic_helper_commit_modeset_enables(dev, old_state);
100 100 omap_atomic_wait_for_completion(dev, old_state);
101 drm_atomic_helper_commit_planes(dev, old_state, 0); 101
102 102 drm_atomic_helper_commit_planes(dev, old_state, 0);
103 drm_atomic_helper_commit_hw_done(old_state); 103
104 drm_atomic_helper_commit_hw_done(old_state);
105 } else {
106 /*
107 * OMAP3 DSS seems to have issues with the work-around above,
108 * resulting in endless sync losts if a crtc is enabled without
109 * a plane. For now, skip the WA for OMAP3.
110 */
111 drm_atomic_helper_commit_planes(dev, old_state, 0);
112
113 drm_atomic_helper_commit_modeset_enables(dev, old_state);
114
115 drm_atomic_helper_commit_hw_done(old_state);
116 }
104 117
105 /* 118 /*
106 * Wait for completion of the page flips to ensure that old buffers 119 * Wait for completion of the page flips to ensure that old buffers