|
@@ -84,23 +84,36 @@ static void omap_atomic_commit_tail(struct drm_atomic_state *old_state)
|
|
/* Apply the atomic update. */
|
|
/* Apply the atomic update. */
|
|
drm_atomic_helper_commit_modeset_disables(dev, old_state);
|
|
drm_atomic_helper_commit_modeset_disables(dev, old_state);
|
|
|
|
|
|
- /* With the current dss dispc implementation we have to enable
|
|
|
|
- * the new modeset before we can commit planes. The dispc ovl
|
|
|
|
- * configuration relies on the video mode configuration been
|
|
|
|
- * written into the HW when the ovl configuration is
|
|
|
|
- * calculated.
|
|
|
|
- *
|
|
|
|
- * This approach is not ideal because after a mode change the
|
|
|
|
- * plane update is executed only after the first vblank
|
|
|
|
- * interrupt. The dispc implementation should be fixed so that
|
|
|
|
- * it is able use uncommitted drm state information.
|
|
|
|
- */
|
|
|
|
- drm_atomic_helper_commit_modeset_enables(dev, old_state);
|
|
|
|
- omap_atomic_wait_for_completion(dev, old_state);
|
|
|
|
-
|
|
|
|
- drm_atomic_helper_commit_planes(dev, old_state, 0);
|
|
|
|
-
|
|
|
|
- drm_atomic_helper_commit_hw_done(old_state);
|
|
|
|
|
|
+ if (priv->omaprev != 0x3430) {
|
|
|
|
+ /* With the current dss dispc implementation we have to enable
|
|
|
|
+ * the new modeset before we can commit planes. The dispc ovl
|
|
|
|
+ * configuration relies on the video mode configuration been
|
|
|
|
+ * written into the HW when the ovl configuration is
|
|
|
|
+ * calculated.
|
|
|
|
+ *
|
|
|
|
+ * This approach is not ideal because after a mode change the
|
|
|
|
+ * plane update is executed only after the first vblank
|
|
|
|
+ * interrupt. The dispc implementation should be fixed so that
|
|
|
|
+ * it is able use uncommitted drm state information.
|
|
|
|
+ */
|
|
|
|
+ drm_atomic_helper_commit_modeset_enables(dev, old_state);
|
|
|
|
+ omap_atomic_wait_for_completion(dev, old_state);
|
|
|
|
+
|
|
|
|
+ drm_atomic_helper_commit_planes(dev, old_state, 0);
|
|
|
|
+
|
|
|
|
+ drm_atomic_helper_commit_hw_done(old_state);
|
|
|
|
+ } else {
|
|
|
|
+ /*
|
|
|
|
+ * OMAP3 DSS seems to have issues with the work-around above,
|
|
|
|
+ * resulting in endless sync losts if a crtc is enabled without
|
|
|
|
+ * a plane. For now, skip the WA for OMAP3.
|
|
|
|
+ */
|
|
|
|
+ drm_atomic_helper_commit_planes(dev, old_state, 0);
|
|
|
|
+
|
|
|
|
+ drm_atomic_helper_commit_modeset_enables(dev, old_state);
|
|
|
|
+
|
|
|
|
+ drm_atomic_helper_commit_hw_done(old_state);
|
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
/*
|
|
* Wait for completion of the page flips to ensure that old buffers
|
|
* Wait for completion of the page flips to ensure that old buffers
|