[PATCHv2 28/45] drm: omapdrm: Remove omap_plane enabled field

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>

The field tracks the plane state to avoid double-enable or -disable.
This isn't required anymore, as

- the DRM atomic core guarantees that the plane atomic_update and
  atomic_disable functions will never be called on an enabled/disabled
  plane

- the CRTC enable/disable operations that enable/disable the plane are
  already guarded against double enable/disable

We can thus remove the enabled field completely. The
omap_plane_set_enable() function then becomes a wrapper around
omap_plane_setup() which can be called directly.

Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxx>
---
 drivers/gpu/drm/omapdrm/omap_crtc.c  | 11 +++++----
 drivers/gpu/drm/omapdrm/omap_drv.h   |  2 +-
 drivers/gpu/drm/omapdrm/omap_plane.c | 45 +++++++-----------------------------
 3 files changed, 16 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index e93ed34dea33..82d03ed92576 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -452,19 +452,21 @@ static void omap_crtc_enable(struct drm_crtc *crtc)
 
 	DBG("%s", omap_crtc->name);
 
+	dispc_runtime_get();
+
 	/* Enable all planes associated with the CRTC. */
 	for (i = 0; i < priv->num_planes; i++) {
 		struct drm_plane *plane = priv->planes[i];
 
 		if (plane->crtc == crtc)
-			WARN_ON(omap_plane_set_enable(plane, true));
+			WARN_ON(omap_plane_setup(plane));
 	}
 
 	omap_crtc_encoder_setup(crtc, true);
 	omap_crtc_flush(crtc);
 
-	dispc_runtime_get();
 	drm_crtc_vblank_on(crtc);
+
 	dispc_runtime_put();
 }
 
@@ -479,18 +481,19 @@ static void omap_crtc_disable(struct drm_crtc *crtc)
 	omap_crtc_wait_page_flip(crtc);
 	dispc_runtime_get();
 	drm_crtc_vblank_off(crtc);
-	dispc_runtime_put();
 
 	/* Disable all planes associated with the CRTC. */
 	for (i = 0; i < priv->num_planes; i++) {
 		struct drm_plane *plane = priv->planes[i];
 
 		if (plane->crtc == crtc)
-			WARN_ON(omap_plane_set_enable(plane, false));
+			WARN_ON(omap_plane_setup(plane));
 	}
 
 	omap_crtc_encoder_setup(crtc, false);
 	omap_crtc_flush(crtc);
+
+	dispc_runtime_put();
 }
 
 static void omap_crtc_mode_set_nofb(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.h b/drivers/gpu/drm/omapdrm/omap_drv.h
index f5209412fae6..7f815552fe7e 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.h
+++ b/drivers/gpu/drm/omapdrm/omap_drv.h
@@ -151,7 +151,7 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,
 
 struct drm_plane *omap_plane_init(struct drm_device *dev,
 		int id, enum drm_plane_type type);
-int omap_plane_set_enable(struct drm_plane *plane, bool enable);
+int omap_plane_setup(struct drm_plane *plane);
 void omap_plane_install_properties(struct drm_plane *plane,
 		struct drm_mode_object *obj);
 
diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c
index 465fd9cafd7b..d18fe106e256 100644
--- a/drivers/gpu/drm/omapdrm/omap_plane.c
+++ b/drivers/gpu/drm/omapdrm/omap_plane.c
@@ -40,8 +40,6 @@ struct omap_plane {
 	int id;  /* TODO rename omap_plane -> omap_plane_id in omapdss so I can use the enum */
 	const char *name;
 
-	bool enabled;
-
 	uint32_t nformats;
 	uint32_t formats[32];
 
@@ -60,18 +58,19 @@ to_omap_plane_state(struct drm_plane_state *state)
 	return container_of(state, struct omap_plane_state, base);
 }
 
-static int omap_plane_setup(struct omap_plane *omap_plane)
+int omap_plane_setup(struct drm_plane *plane)
 {
-	struct drm_plane_state *state = omap_plane->base.state;
+	struct omap_plane *omap_plane = to_omap_plane(plane);
+	struct drm_plane_state *state = plane->state;
 	struct omap_plane_state *omap_state = to_omap_plane_state(state);
-	struct drm_device *dev = omap_plane->base.dev;
+	struct drm_device *dev = plane->dev;
 	struct omap_overlay_info info;
 	struct omap_drm_window win;
 	int ret;
 
-	DBG("%s, enabled=%d", omap_plane->name, omap_plane->enabled);
+	DBG("%s, crtc=%p fb=%p", omap_plane->name, state->crtc, state->fb);
 
-	if (!omap_plane->enabled) {
+	if (!state->crtc) {
 		dispc_ovl_enable(omap_plane->id, false);
 		return 0;
 	}
@@ -134,23 +133,6 @@ static int omap_plane_setup(struct omap_plane *omap_plane)
 	return 0;
 }
 
-int omap_plane_set_enable(struct drm_plane *plane, bool enable)
-{
-	struct omap_plane *omap_plane = to_omap_plane(plane);
-	int ret;
-
-	if (enable == omap_plane->enabled)
-		return 0;
-
-	omap_plane->enabled = enable;
-
-	dispc_runtime_get();
-	ret = omap_plane_setup(omap_plane);
-	dispc_runtime_put();
-
-	return ret;
-}
-
 static int omap_plane_prepare_fb(struct drm_plane *plane,
 				 struct drm_framebuffer *fb,
 				 const struct drm_plane_state *new_state)
@@ -168,14 +150,7 @@ static void omap_plane_cleanup_fb(struct drm_plane *plane,
 static void omap_plane_atomic_update(struct drm_plane *plane,
 				     struct drm_plane_state *old_state)
 {
-	struct omap_plane *omap_plane = to_omap_plane(plane);
-	struct drm_plane_state *state = plane->state;
-
-	if (!state->fb || !state->crtc)
-		return;
-
-	omap_plane->enabled = true;
-	omap_plane_setup(omap_plane);
+	omap_plane_setup(plane);
 }
 
 static void omap_plane_atomic_disable(struct drm_plane *plane,
@@ -188,11 +163,7 @@ static void omap_plane_atomic_disable(struct drm_plane *plane,
 	omap_state->zorder = plane->type == DRM_PLANE_TYPE_PRIMARY
 			   ? 0 : omap_plane->id;
 
-	if (!omap_plane->enabled)
-		return;
-
-	omap_plane->enabled = false;
-	omap_plane_setup(omap_plane);
+	omap_plane_setup(plane);
 }
 
 static const struct drm_plane_helper_funcs omap_plane_helper_funcs = {
-- 
2.1.4

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel





[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux