drm/atomic-helper: Don't call atomic_update_plane when it stays off
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 10 Apr 2015 14:22:39 +0000 (16:22 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 16 Apr 2015 07:50:27 +0000 (09:50 +0200)
It's a silly thing to do and surprises driver writers. Most likely
this did already blow up for exynos.

It's also a silly thing to change plane state when it's off, but fbdev
is silly (it does an unconditional modeset over all planes). And
userspace can be evil. So I think we need this.

With this check in the helpers we can remove the one in i915 code for
the same conditions (becuase ->crtc iff ->fb).

Cc: Gustavo Padovan <gustavo@padovan.org>
Cc: dri-devel@lists.freedesktop.org
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
drivers/gpu/drm/drm_atomic_helper.c
drivers/gpu/drm/i915/intel_atomic_plane.c

index a2fb0d45217ad3f98ccabf6653d51212dee09112..d536817699c194e3a8cd9449ac0a2f2d2b165965 100644 (file)
@@ -1138,7 +1138,8 @@ void drm_atomic_helper_commit_planes(struct drm_device *dev,
                if (drm_atomic_plane_disabling(plane, old_plane_state) &&
                    funcs->atomic_disable)
                        funcs->atomic_disable(plane, old_plane_state);
-               else
+               else if (plane->state->crtc ||
+                        drm_atomic_plane_disabling(plane, old_plane_state))
                        funcs->atomic_update(plane, old_plane_state);
        }
 
index 976b8915657077ac6096151ece85834d638cd521..cb383a0fc39251aab5d1aa229550d00ca35035d7 100644 (file)
@@ -172,10 +172,6 @@ static void intel_plane_atomic_update(struct drm_plane *plane,
        struct intel_plane_state *intel_state =
                to_intel_plane_state(plane->state);
 
-       /* Don't disable an already disabled plane */
-       if (!plane->state->fb && !old_state->fb)
-               return;
-
        intel_plane->commit_plane(plane, intel_state);
 }