From: Ville Syrjälä <ville.syrj...@linux.intel.com>

DDB/watermarks are always double buffered on the vblank, so we
can't safely change them during async flips. Currently this never
happens, but we'll be making changing between sync and async
flips a bit more flexible, in which case we can actually end up
here.

Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
---
 drivers/gpu/drm/i915/display/skl_watermark.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c 
b/drivers/gpu/drm/i915/display/skl_watermark.c
index bc341abcab2f..1fa416a70d51 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -2540,6 +2540,12 @@ skl_ddb_add_affected_planes(const struct 
intel_crtc_state *old_crtc_state,
                                        
&new_crtc_state->wm.skl.plane_ddb_y[plane_id]))
                        continue;
 
+               if (new_crtc_state->do_async_flip) {
+                       drm_dbg_kms(&i915->drm, "[PLANE:%d:%s] Can't change DDB 
during async flip\n",
+                                   plane->base.base.id, plane->base.name);
+                       return -EINVAL;
+               }
+
                plane_state = intel_atomic_get_plane_state(state, plane);
                if (IS_ERR(plane_state))
                        return PTR_ERR(plane_state);
@@ -2906,6 +2912,12 @@ static int skl_wm_add_affected_planes(struct 
intel_atomic_state *state,
                                                 
&new_crtc_state->wm.skl.optimal))
                        continue;
 
+               if (new_crtc_state->do_async_flip) {
+                       drm_dbg_kms(&i915->drm, "[PLANE:%d:%s] Can't change 
watermarks during async flip\n",
+                                   plane->base.base.id, plane->base.name);
+                       return -EINVAL;
+               }
+
                plane_state = intel_atomic_get_plane_state(state, plane);
                if (IS_ERR(plane_state))
                        return PTR_ERR(plane_state);
-- 
2.43.2

Reply via email to