diff mbox

[v3,03/10] drm/imx: atomic phase 1: Use transitional atomic CRTC and plane helpers

Message ID 20160813140910.GA11506@n2100.armlinux.org.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Russell King (Oracle) Aug. 13, 2016, 2:09 p.m. UTC
Okay, this is what I've ended up with - I'm not sure whether it's
correct or not, but this dirty patch allows the full series to be
applied and still have working userspace.

I still need to undo all the reverts I have touching imx-drm between
patch 10 of this set and 4.8-rc1...
diff mbox

Patch

diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
index 3f5f9566b152..6f9a43880381 100644
--- a/drivers/gpu/drm/imx/ipuv3-plane.c
+++ b/drivers/gpu/drm/imx/ipuv3-plane.c
@@ -275,7 +275,7 @@  static int ipu_plane_atomic_check(struct drm_plane *plane,
 	if (WARN_ON(!crtc_state))
 		return -EINVAL;
 
-	/* CRTC should be enabled */
+	/* CRTC should be enabled -- why? */
 	if (!crtc_state->enable)
 		return -EINVAL;
 
@@ -319,10 +319,14 @@  static int ipu_plane_atomic_check(struct drm_plane *plane,
 	 * since we cannot touch active IDMAC channels, we do not support
 	 * resizing the enabled plane or changing its format
 	 */
+#if 0
 	if (old_fb && (state->src_w != old_state->src_w ||
 			      state->src_h != old_state->src_h ||
-			      fb->pixel_format != old_fb->pixel_format))
+			      fb->pixel_format != old_fb->pixel_format)) {
+		printk("%s:%d: fail\n", __func__, __LINE__);
 		return -EINVAL;
+	}
+#endif
 
 	eba = drm_plane_state_to_eba(state);
 
@@ -332,8 +336,12 @@  static int ipu_plane_atomic_check(struct drm_plane *plane,
 	if (fb->pitches[0] < 1 || fb->pitches[0] > 16384)
 		return -EINVAL;
 
-	if (old_fb && fb->pitches[0] != old_fb->pitches[0])
+#if 0
+	if (old_fb && fb->pitches[0] != old_fb->pitches[0]) {
+		printk("%s:%d: fail\n", __func__, __LINE__);
 		return -EINVAL;
+	}
+#endif
 
 	switch (fb->pixel_format) {
 	case DRM_FORMAT_YUV420:
@@ -388,10 +396,14 @@  static void ipu_plane_atomic_update(struct drm_plane *plane,
 	struct drm_plane_state *state = plane->state;
 	enum ipu_color_space ics;
 
+#if 0
 	if (old_state->fb) {
 		ipu_plane_atomic_set_base(ipu_plane, old_state);
 		return;
 	}
+#endif
+
+	ipu_plane_disable(ipu_plane);
 
 	switch (ipu_plane->dp_flow) {
 	case IPU_DP_FLOW_SYNC_BG: