If a plane is part of the state but old_state->fb is null and
state->fb is null the update is a noop.

Signed-off-by: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 30 ++++++++++++++++++++----------
 drivers/gpu/drm/i915/intel_sprite.c  | 36 +++++++++++++++++-------------------
 2 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index def26889a58f..12da97d9f386 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13491,18 +13491,23 @@ intel_commit_primary_plane(struct drm_plane *plane,
        crtc = crtc ? crtc : plane->crtc;
        intel_crtc = to_intel_crtc(crtc);
 
+       if (!crtc)
+               return;
+
        plane->fb = fb;
        crtc->x = src->x1 >> 16;
        crtc->y = src->y1 >> 16;
 
-       if (intel_crtc->active) {
-               if (state->visible)
-                       /* FIXME: kill this fastboot hack */
-                       intel_update_pipe_size(intel_crtc);
+       if (!intel_crtc->active)
+               return;
+
+       if (state->visible)
+               /* FIXME: kill this fastboot hack */
+               intel_update_pipe_size(intel_crtc);
+       else
+               fb = NULL;
 
-               dev_priv->display.update_primary_plane(crtc, plane->fb,
-                                                      crtc->x, crtc->y);
-       }
+       dev_priv->display.update_primary_plane(crtc, fb, crtc->x, crtc->y);
 }
 
 static void
@@ -13746,10 +13751,16 @@ intel_commit_cursor_plane(struct drm_plane *plane,
        crtc = crtc ? crtc : plane->crtc;
        intel_crtc = to_intel_crtc(crtc);
 
+       if (!crtc)
+               return;
+
        plane->fb = state->base.fb;
        crtc->cursor_x = state->base.crtc_x;
        crtc->cursor_y = state->base.crtc_y;
 
+       if (!intel_crtc->active)
+               return;
+
        if (intel_crtc->cursor_bo == obj)
                goto update;
 
@@ -13762,10 +13773,9 @@ intel_commit_cursor_plane(struct drm_plane *plane,
 
        intel_crtc->cursor_addr = addr;
        intel_crtc->cursor_bo = obj;
-update:
 
-       if (intel_crtc->active)
-               intel_crtc_update_cursor(crtc, state->visible);
+update:
+       intel_crtc_update_cursor(crtc, state->visible);
 }
 
 static struct drm_plane *intel_cursor_plane_create(struct drm_device *dev,
diff --git a/drivers/gpu/drm/i915/intel_sprite.c 
b/drivers/gpu/drm/i915/intel_sprite.c
index f5921b652b90..6b5d25f2a90b 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -927,31 +927,29 @@ intel_commit_sprite_plane(struct drm_plane *plane,
        struct intel_crtc *intel_crtc;
        struct intel_plane *intel_plane = to_intel_plane(plane);
        struct drm_framebuffer *fb = state->base.fb;
-       int crtc_x, crtc_y;
-       unsigned int crtc_w, crtc_h;
-       uint32_t src_x, src_y, src_w, src_h;
 
        crtc = crtc ? crtc : plane->crtc;
        intel_crtc = to_intel_crtc(crtc);
 
+       if (!crtc)
+               return;
+
        plane->fb = fb;
 
-       if (intel_crtc->active) {
-               if (state->visible) {
-                       crtc_x = state->dst.x1;
-                       crtc_y = state->dst.y1;
-                       crtc_w = drm_rect_width(&state->dst);
-                       crtc_h = drm_rect_height(&state->dst);
-                       src_x = state->src.x1 >> 16;
-                       src_y = state->src.y1 >> 16;
-                       src_w = drm_rect_width(&state->src) >> 16;
-                       src_h = drm_rect_height(&state->src) >> 16;
-                       intel_plane->update_plane(plane, crtc, fb,
-                                                 crtc_x, crtc_y, crtc_w, 
crtc_h,
-                                                 src_x, src_y, src_w, src_h);
-               } else {
-                       intel_plane->disable_plane(plane, crtc, false);
-               }
+       if (!intel_crtc->active)
+               return;
+
+       if (state->visible) {
+               intel_plane->update_plane(plane, crtc, fb,
+                                         state->dst.x1, state->dst.y1,
+                                         drm_rect_width(&state->dst),
+                                         drm_rect_height(&state->dst),
+                                         state->src.x1 >> 16,
+                                         state->src.y1 >> 16,
+                                         drm_rect_width(&state->src) >> 16,
+                                         drm_rect_height(&state->src) >> 16);
+       } else {
+               intel_plane->disable_plane(plane, crtc, false);
        }
 }
 
-- 
2.1.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to