diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_drv.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_drv.c | 47 |
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 |