All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Cleanup CRTC .enable()/.disable() cargo-cult
@ 2017-06-30  9:36 Laurent Pinchart
  2017-06-30  9:36 ` [PATCH v2 1/3] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Laurent Pinchart @ 2017-06-30  9:36 UTC (permalink / raw)
  To: dri-devel
  Cc: Neil Armstrong, Liviu Dudau, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom, Alexey Brodkin,
	Xinliang Liu, Xinwei Kong, Tomi Valkeinen, VMware Graphics,
	Mali DP Maintainers, Chen Feng, Jyri Sarha, Dave Airlie,
	Vincent Abriou, Alison Wang, Seung-Woo Kim, Philippe Cornu,
	Yannick Fertre, Kyungmin Park

Hello,

The first version of this patch series removed legacy CRTC helper operations
from most atomic drivers, and got partially merged in the drm-misc tree. This
second version is a repost of the two unmerged patches from the original
series, with an additional patch to complete removal of the last atomic user
of the legacy CRTC .prepare() helper operation.

The patches are based on top of the drm-misc-next branch and have been
compile-tested only except for rcar-du-drm that has been tested on real
hardware. Given the high risk of conflicts I would like to get them merged as
soon as possible (after, of course, proper review and testing).

Laurent Pinchart (3):
  drm: Add old state pointer to CRTC .enable() helper function
  drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  drm: vmwgfx: Remove the legacy CRTC .prepare() helper operations

 drivers/gpu/drm/arc/arcpgu_crtc.c               | 10 +++--
 drivers/gpu/drm/arm/hdlcd_crtc.c                | 10 +++--
 drivers/gpu/drm/arm/malidp_crtc.c               | 10 +++--
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c  | 10 +++--
 drivers/gpu/drm/drm_atomic_helper.c             |  7 ++--
 drivers/gpu/drm/drm_simple_kms_helper.c         | 10 +++--
 drivers/gpu/drm/exynos/exynos_drm_crtc.c        | 10 +++--
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c      |  5 ++-
 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c  | 10 +++--
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 10 +++--
 drivers/gpu/drm/imx/ipuv3-crtc.c                |  5 ++-
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c         | 10 +++--
 drivers/gpu/drm/meson/meson_crtc.c              | 10 +++--
 drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c        | 10 +++--
 drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c        | 10 +++--
 drivers/gpu/drm/omapdrm/omap_crtc.c             | 10 +++--
 drivers/gpu/drm/qxl/qxl_display.c               | 10 +++--
 drivers/gpu/drm/rcar-du/rcar_du_crtc.c          | 10 +++--
 drivers/gpu/drm/rockchip/rockchip_drm_vop.c     | 10 +++--
 drivers/gpu/drm/sti/sti_crtc.c                  | 10 +++--
 drivers/gpu/drm/stm/ltdc.c                      | 10 +++--
 drivers/gpu/drm/sun4i/sun4i_crtc.c              | 10 +++--
 drivers/gpu/drm/tegra/dc.c                      | 10 +++--
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c            | 16 ++++++-
 drivers/gpu/drm/vc4/vc4_crtc.c                  | 10 +++--
 drivers/gpu/drm/virtio/virtgpu_display.c        | 10 +++--
 drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c             | 14 ++++---
 drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c            | 29 +++++--------
 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c            | 20 ++++-----
 drivers/gpu/drm/zte/zx_vou.c                    | 10 +++--
 include/drm/drm_modeset_helper_vtables.h        | 56 ++++++++++++++-----------
 31 files changed, 221 insertions(+), 161 deletions(-)

-- 
Regards,

Laurent Pinchart

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2 1/3] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-30  9:36 [PATCH v2 0/3] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
@ 2017-06-30  9:36 ` Laurent Pinchart
  2017-06-30  9:36 ` [PATCH v2 2/3] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
  2017-06-30  9:36 ` [PATCH v2 3/3] drm: vmwgfx: Remove the legacy CRTC .prepare() helper operations Laurent Pinchart
  2 siblings, 0 replies; 8+ messages in thread
From: Laurent Pinchart @ 2017-06-30  9:36 UTC (permalink / raw)
  To: dri-devel
  Cc: Neil Armstrong, Liviu Dudau, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom, Alexey Brodkin,
	Xinliang Liu, Xinwei Kong, Tomi Valkeinen, VMware Graphics,
	Mali DP Maintainers, Chen Feng, Jyri Sarha, Dave Airlie,
	Vincent Abriou, Alison Wang, Seung-Woo Kim, Philippe Cornu,
	Yannick Fertre, Kyungmin Park

The old state is useful for drivers that need to perform operations at
enable time that depend on the transition between the old and new
states.

While at it, rename the operation to .atomic_enable() to be consistent
with .atomic_disable(), as the .enable() operation is used by atomic
helpers only.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> # for sun4i
Acked-by: Philipp Zabel <p.zabel@pengutronix.de> # for imx-drm and mediatek
Acked-by: Alexey Brodkin <abrodkin@synopsys.com> # for arcpgu
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com> # for atmel-hlcdc
Acked-by: Liviu Dudau <Liviu.Dudau@arm.com> # for hdlcd and mali-dp
Acked-by: Stefan Agner <stefan@agner.ch> # for fsl-dcu
Tested-by: Philippe Cornu <philippe.cornu@st.com> # for stm
Acked-by: Philippe Cornu <philippe.cornu@st.com> # for stm
Acked-by: Vincent Abriou <vincent.abriou@st.com> # for sti
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com> # for vmwgfx
---
Changes since v1:

- Update kerneldoc
---
 drivers/gpu/drm/arc/arcpgu_crtc.c               |  5 ++-
 drivers/gpu/drm/arm/hdlcd_crtc.c                |  5 ++-
 drivers/gpu/drm/arm/malidp_crtc.c               |  5 ++-
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c  |  5 ++-
 drivers/gpu/drm/drm_atomic_helper.c             |  7 ++--
 drivers/gpu/drm/drm_simple_kms_helper.c         |  5 ++-
 drivers/gpu/drm/exynos/exynos_drm_crtc.c        |  5 ++-
 drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c      |  5 ++-
 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c  |  5 ++-
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |  5 ++-
 drivers/gpu/drm/imx/ipuv3-crtc.c                |  5 ++-
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c         |  5 ++-
 drivers/gpu/drm/meson/meson_crtc.c              |  5 ++-
 drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c        |  5 ++-
 drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c        |  5 ++-
 drivers/gpu/drm/omapdrm/omap_crtc.c             |  5 ++-
 drivers/gpu/drm/qxl/qxl_display.c               |  5 ++-
 drivers/gpu/drm/rcar-du/rcar_du_crtc.c          |  5 ++-
 drivers/gpu/drm/rockchip/rockchip_drm_vop.c     |  5 ++-
 drivers/gpu/drm/sti/sti_crtc.c                  |  5 ++-
 drivers/gpu/drm/stm/ltdc.c                      |  5 ++-
 drivers/gpu/drm/sun4i/sun4i_crtc.c              |  5 ++-
 drivers/gpu/drm/tegra/dc.c                      |  5 ++-
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c            |  8 +++-
 drivers/gpu/drm/vc4/vc4_crtc.c                  |  5 ++-
 drivers/gpu/drm/virtio/virtgpu_display.c        |  5 ++-
 drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c             |  7 ++--
 drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c            |  7 ++--
 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c            |  5 ++-
 drivers/gpu/drm/zte/zx_vou.c                    |  5 ++-
 include/drm/drm_modeset_helper_vtables.h        | 56 ++++++++++++++-----------
 31 files changed, 128 insertions(+), 87 deletions(-)

diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
index 1f306781c9d5..c9bc6a90ac83 100644
--- a/drivers/gpu/drm/arc/arcpgu_crtc.c
+++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
@@ -119,7 +119,8 @@ static void arc_pgu_crtc_mode_set_nofb(struct drm_crtc *crtc)
 	clk_set_rate(arcpgu->clk, m->crtc_clock * 1000);
 }
 
-static void arc_pgu_crtc_enable(struct drm_crtc *crtc)
+static void arc_pgu_crtc_atomic_enable(struct drm_crtc *crtc,
+				       struct drm_crtc_state *old_state)
 {
 	struct arcpgu_drm_private *arcpgu = crtc_to_arcpgu_priv(crtc);
 
@@ -161,9 +162,9 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
 	.mode_set	= drm_helper_crtc_mode_set,
 	.mode_set_base	= drm_helper_crtc_mode_set_base,
 	.mode_set_nofb	= arc_pgu_crtc_mode_set_nofb,
-	.enable		= arc_pgu_crtc_enable,
 	.disable	= arc_pgu_crtc_disable,
 	.atomic_begin	= arc_pgu_crtc_atomic_begin,
+	.atomic_enable	= arc_pgu_crtc_atomic_enable,
 };
 
 static void arc_pgu_plane_atomic_update(struct drm_plane *plane,
diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index d67b6f15e8b8..2b7f4f05d91f 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -165,7 +165,8 @@ static void hdlcd_crtc_mode_set_nofb(struct drm_crtc *crtc)
 	clk_set_rate(hdlcd->clk, m->crtc_clock * 1000);
 }
 
-static void hdlcd_crtc_enable(struct drm_crtc *crtc)
+static void hdlcd_crtc_atomic_enable(struct drm_crtc *crtc,
+				     struct drm_crtc_state *old_state)
 {
 	struct hdlcd_drm_private *hdlcd = crtc_to_hdlcd_priv(crtc);
 
@@ -218,10 +219,10 @@ static void hdlcd_crtc_atomic_begin(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
-	.enable		= hdlcd_crtc_enable,
 	.disable	= hdlcd_crtc_disable,
 	.atomic_check	= hdlcd_crtc_atomic_check,
 	.atomic_begin	= hdlcd_crtc_atomic_begin,
+	.atomic_enable	= hdlcd_crtc_atomic_enable,
 };
 
 static int hdlcd_plane_atomic_check(struct drm_plane *plane,
diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
index 4bb38a21efec..8e5b1c0181ab 100644
--- a/drivers/gpu/drm/arm/malidp_crtc.c
+++ b/drivers/gpu/drm/arm/malidp_crtc.c
@@ -46,7 +46,8 @@ static enum drm_mode_status malidp_crtc_mode_valid(struct drm_crtc *crtc,
 	return MODE_OK;
 }
 
-static void malidp_crtc_enable(struct drm_crtc *crtc)
+static void malidp_crtc_atomic_enable(struct drm_crtc *crtc,
+				      struct drm_crtc_state *old_state)
 {
 	struct malidp_drm *malidp = crtc_to_malidp_device(crtc);
 	struct malidp_hw_device *hwdev = malidp->dev;
@@ -408,9 +409,9 @@ static int malidp_crtc_atomic_check(struct drm_crtc *crtc,
 
 static const struct drm_crtc_helper_funcs malidp_crtc_helper_funcs = {
 	.mode_valid = malidp_crtc_mode_valid,
-	.enable = malidp_crtc_enable,
 	.disable = malidp_crtc_disable,
 	.atomic_check = malidp_crtc_atomic_check,
+	.atomic_enable = malidp_crtc_atomic_enable,
 };
 
 static struct drm_crtc_state *malidp_crtc_duplicate_state(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
index f6b8c5908a20..e54e503180f4 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
@@ -183,7 +183,8 @@ static void atmel_hlcdc_crtc_disable(struct drm_crtc *c)
 	pm_runtime_put_sync(dev->dev);
 }
 
-static void atmel_hlcdc_crtc_enable(struct drm_crtc *c)
+static void atmel_hlcdc_crtc_atomic_enable(struct drm_crtc *c,
+					   struct drm_crtc_state *old_state)
 {
 	struct drm_device *dev = c->dev;
 	struct atmel_hlcdc_crtc *crtc = drm_crtc_to_atmel_hlcdc_crtc(c);
@@ -320,10 +321,10 @@ static const struct drm_crtc_helper_funcs lcdc_crtc_helper_funcs = {
 	.mode_set_nofb = atmel_hlcdc_crtc_mode_set_nofb,
 	.mode_set_base = drm_helper_crtc_mode_set_base,
 	.disable = atmel_hlcdc_crtc_disable,
-	.enable = atmel_hlcdc_crtc_enable,
 	.atomic_check = atmel_hlcdc_crtc_atomic_check,
 	.atomic_begin = atmel_hlcdc_crtc_atomic_begin,
 	.atomic_flush = atmel_hlcdc_crtc_atomic_flush,
+	.atomic_enable = atmel_hlcdc_crtc_atomic_enable,
 };
 
 static void atmel_hlcdc_crtc_destroy(struct drm_crtc *c)
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 2f269e4267da..23e4661a62fe 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -1069,12 +1069,13 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
 					      struct drm_atomic_state *old_state)
 {
 	struct drm_crtc *crtc;
+	struct drm_crtc_state *old_crtc_state;
 	struct drm_crtc_state *new_crtc_state;
 	struct drm_connector *connector;
 	struct drm_connector_state *new_conn_state;
 	int i;
 
-	for_each_new_crtc_in_state(old_state, crtc, new_crtc_state, i) {
+	for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
 		const struct drm_crtc_helper_funcs *funcs;
 
 		/* Need to filter out CRTCs where only planes change. */
@@ -1090,8 +1091,8 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
 			DRM_DEBUG_ATOMIC("enabling [CRTC:%d:%s]\n",
 					 crtc->base.id, crtc->name);
 
-			if (funcs->enable)
-				funcs->enable(crtc);
+			if (funcs->atomic_enable)
+				funcs->atomic_enable(crtc, old_crtc_state);
 			else
 				funcs->commit(crtc);
 		}
diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
index e084f9f8ca66..58c27ab1756f 100644
--- a/drivers/gpu/drm/drm_simple_kms_helper.c
+++ b/drivers/gpu/drm/drm_simple_kms_helper.c
@@ -40,7 +40,8 @@ static int drm_simple_kms_crtc_check(struct drm_crtc *crtc,
 	return drm_atomic_add_affected_planes(state->state, crtc);
 }
 
-static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc)
+static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc,
+				       struct drm_crtc_state *old_state)
 {
 	struct drm_simple_display_pipe *pipe;
 
@@ -64,8 +65,8 @@ static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc)
 
 static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = {
 	.atomic_check = drm_simple_kms_crtc_check,
+	.atomic_enable = drm_simple_kms_crtc_enable,
 	.disable = drm_simple_kms_crtc_disable,
-	.enable = drm_simple_kms_crtc_enable,
 };
 
 static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index d72777f6411a..b7e2fadb6442 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -21,7 +21,8 @@
 #include "exynos_drm_drv.h"
 #include "exynos_drm_plane.h"
 
-static void exynos_drm_crtc_enable(struct drm_crtc *crtc)
+static void exynos_drm_crtc_atomic_enable(struct drm_crtc *crtc,
+					  struct drm_crtc_state *old_state)
 {
 	struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
 
@@ -82,11 +83,11 @@ static void exynos_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
-	.enable		= exynos_drm_crtc_enable,
 	.disable	= exynos_drm_crtc_disable,
 	.atomic_check	= exynos_crtc_atomic_check,
 	.atomic_begin	= exynos_crtc_atomic_begin,
 	.atomic_flush	= exynos_crtc_atomic_flush,
+	.atomic_enable	= exynos_drm_crtc_atomic_enable,
 };
 
 void exynos_crtc_handle_event(struct exynos_drm_crtc *exynos_crtc)
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
index cc4e944a1d3c..0e3752437e44 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
@@ -63,7 +63,8 @@ static void fsl_dcu_drm_crtc_atomic_disable(struct drm_crtc *crtc,
 	clk_disable_unprepare(fsl_dev->pix_clk);
 }
 
-static void fsl_dcu_drm_crtc_enable(struct drm_crtc *crtc)
+static void fsl_dcu_drm_crtc_atomic_enable(struct drm_crtc *crtc,
+					   struct drm_crtc_state *old_state)
 {
 	struct drm_device *dev = crtc->dev;
 	struct fsl_dcu_drm_device *fsl_dev = dev->dev_private;
@@ -133,7 +134,7 @@ static void fsl_dcu_drm_crtc_mode_set_nofb(struct drm_crtc *crtc)
 static const struct drm_crtc_helper_funcs fsl_dcu_drm_crtc_helper_funcs = {
 	.atomic_disable = fsl_dcu_drm_crtc_atomic_disable,
 	.atomic_flush = fsl_dcu_drm_crtc_atomic_flush,
-	.enable = fsl_dcu_drm_crtc_enable,
+	.atomic_enable = fsl_dcu_drm_crtc_atomic_enable,
 	.mode_set_nofb = fsl_dcu_drm_crtc_mode_set_nofb,
 };
 
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
index 59542bddc980..49ef47c0c81a 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
@@ -192,7 +192,8 @@ static struct drm_plane *hibmc_plane_init(struct hibmc_drm_private *priv)
 	return plane;
 }
 
-static void hibmc_crtc_enable(struct drm_crtc *crtc)
+static void hibmc_crtc_atomic_enable(struct drm_crtc *crtc,
+				     struct drm_crtc_state *old_state)
 {
 	unsigned int reg;
 	struct hibmc_drm_private *priv = crtc->dev->dev_private;
@@ -453,11 +454,11 @@ static const struct drm_crtc_funcs hibmc_crtc_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs hibmc_crtc_helper_funcs = {
-	.enable		= hibmc_crtc_enable,
 	.disable	= hibmc_crtc_disable,
 	.mode_set_nofb	= hibmc_crtc_mode_set_nofb,
 	.atomic_begin	= hibmc_crtc_atomic_begin,
 	.atomic_flush	= hibmc_crtc_atomic_flush,
+	.atomic_enable	= hibmc_crtc_atomic_enable,
 };
 
 int hibmc_de_init(struct hibmc_drm_private *priv)
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
index c96c228a9898..8e00818b24fc 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
@@ -467,7 +467,8 @@ static void ade_dump_regs(void __iomem *base)
 static void ade_dump_regs(void __iomem *base) { }
 #endif
 
-static void ade_crtc_enable(struct drm_crtc *crtc)
+static void ade_crtc_atomic_enable(struct drm_crtc *crtc,
+				   struct drm_crtc_state *old_state)
 {
 	struct ade_crtc *acrtc = to_ade_crtc(crtc);
 	struct ade_hw_ctx *ctx = acrtc->ctx;
@@ -553,11 +554,11 @@ static void ade_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs ade_crtc_helper_funcs = {
-	.enable		= ade_crtc_enable,
 	.disable	= ade_crtc_disable,
 	.mode_set_nofb	= ade_crtc_mode_set_nofb,
 	.atomic_begin	= ade_crtc_atomic_begin,
 	.atomic_flush	= ade_crtc_atomic_flush,
+	.atomic_enable	= ade_crtc_atomic_enable,
 };
 
 static const struct drm_crtc_funcs ade_crtc_funcs = {
diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c
index 5456c15d962c..53e0b24beda6 100644
--- a/drivers/gpu/drm/imx/ipuv3-crtc.c
+++ b/drivers/gpu/drm/imx/ipuv3-crtc.c
@@ -50,7 +50,8 @@ static inline struct ipu_crtc *to_ipu_crtc(struct drm_crtc *crtc)
 	return container_of(crtc, struct ipu_crtc, base);
 }
 
-static void ipu_crtc_enable(struct drm_crtc *crtc)
+static void ipu_crtc_atomic_enable(struct drm_crtc *crtc,
+				   struct drm_crtc_state *old_state)
 {
 	struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc);
 	struct ipu_soc *ipu = dev_get_drvdata(ipu_crtc->dev->parent);
@@ -293,7 +294,7 @@ static const struct drm_crtc_helper_funcs ipu_helper_funcs = {
 	.atomic_check = ipu_crtc_atomic_check,
 	.atomic_begin = ipu_crtc_atomic_begin,
 	.atomic_disable = ipu_crtc_atomic_disable,
-	.enable = ipu_crtc_enable,
+	.atomic_enable = ipu_crtc_atomic_enable,
 };
 
 static void ipu_put_resources(struct ipu_crtc *ipu_crtc)
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index 6582e1f56d37..5971b0827d1b 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -366,7 +366,8 @@ static void mtk_crtc_ddp_config(struct drm_crtc *crtc)
 	}
 }
 
-static void mtk_drm_crtc_enable(struct drm_crtc *crtc)
+static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc,
+				       struct drm_crtc_state *old_state)
 {
 	struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
 	struct mtk_ddp_comp *ovl = mtk_crtc->ddp_comp[0];
@@ -487,10 +488,10 @@ static const struct drm_crtc_funcs mtk_crtc_funcs = {
 static const struct drm_crtc_helper_funcs mtk_crtc_helper_funcs = {
 	.mode_fixup	= mtk_drm_crtc_mode_fixup,
 	.mode_set_nofb	= mtk_drm_crtc_mode_set_nofb,
-	.enable		= mtk_drm_crtc_enable,
 	.disable	= mtk_drm_crtc_disable,
 	.atomic_begin	= mtk_drm_crtc_atomic_begin,
 	.atomic_flush	= mtk_drm_crtc_atomic_flush,
+	.atomic_enable	= mtk_drm_crtc_atomic_enable,
 };
 
 static int mtk_drm_crtc_init(struct drm_device *drm,
diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c
index c986eb03b9d9..6f148307b0e0 100644
--- a/drivers/gpu/drm/meson/meson_crtc.c
+++ b/drivers/gpu/drm/meson/meson_crtc.c
@@ -79,7 +79,8 @@ static const struct drm_crtc_funcs meson_crtc_funcs = {
 
 };
 
-static void meson_crtc_enable(struct drm_crtc *crtc)
+static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
+				     struct drm_crtc_state *old_state)
 {
 	struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
 	struct drm_crtc_state *crtc_state = crtc->state;
@@ -149,10 +150,10 @@ static void meson_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs meson_crtc_helper_funcs = {
-	.enable		= meson_crtc_enable,
 	.disable	= meson_crtc_disable,
 	.atomic_begin	= meson_crtc_atomic_begin,
 	.atomic_flush	= meson_crtc_atomic_flush,
+	.atomic_enable	= meson_crtc_atomic_enable,
 };
 
 void meson_crtc_irq(struct meson_drm *priv)
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
index 615e1def64d9..9c20133f3f8d 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
@@ -295,7 +295,8 @@ static void mdp4_crtc_disable(struct drm_crtc *crtc)
 	mdp4_crtc->enabled = false;
 }
 
-static void mdp4_crtc_enable(struct drm_crtc *crtc)
+static void mdp4_crtc_atomic_enable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
 {
 	struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
 	struct mdp4_kms *mdp4_kms = get_kms(crtc);
@@ -493,10 +494,10 @@ static const struct drm_crtc_funcs mdp4_crtc_funcs = {
 static const struct drm_crtc_helper_funcs mdp4_crtc_helper_funcs = {
 	.mode_set_nofb = mdp4_crtc_mode_set_nofb,
 	.disable = mdp4_crtc_disable,
-	.enable = mdp4_crtc_enable,
 	.atomic_check = mdp4_crtc_atomic_check,
 	.atomic_begin = mdp4_crtc_atomic_begin,
 	.atomic_flush = mdp4_crtc_atomic_flush,
+	.atomic_enable = mdp4_crtc_atomic_enable,
 };
 
 static void mdp4_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus)
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
index cb5415d6c04b..d39d9d24d169 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
@@ -429,7 +429,8 @@ static void mdp5_crtc_disable(struct drm_crtc *crtc)
 	mdp5_crtc->enabled = false;
 }
 
-static void mdp5_crtc_enable(struct drm_crtc *crtc)
+static void mdp5_crtc_atomic_enable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
 {
 	struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
 	struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state);
@@ -940,10 +941,10 @@ static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = {
 static const struct drm_crtc_helper_funcs mdp5_crtc_helper_funcs = {
 	.mode_set_nofb = mdp5_crtc_mode_set_nofb,
 	.disable = mdp5_crtc_disable,
-	.enable = mdp5_crtc_enable,
 	.atomic_check = mdp5_crtc_atomic_check,
 	.atomic_begin = mdp5_crtc_atomic_begin,
 	.atomic_flush = mdp5_crtc_atomic_flush,
+	.atomic_enable = mdp5_crtc_atomic_enable,
 };
 
 static void mdp5_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus)
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index dd0ef40ca469..7a1b7a9cc270 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -356,7 +356,8 @@ static void omap_crtc_arm_event(struct drm_crtc *crtc)
 	}
 }
 
-static void omap_crtc_enable(struct drm_crtc *crtc)
+static void omap_crtc_atomic_enable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
 {
 	struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
 	int ret;
@@ -568,10 +569,10 @@ static const struct drm_crtc_funcs omap_crtc_funcs = {
 static const struct drm_crtc_helper_funcs omap_crtc_helper_funcs = {
 	.mode_set_nofb = omap_crtc_mode_set_nofb,
 	.disable = omap_crtc_disable,
-	.enable = omap_crtc_enable,
 	.atomic_check = omap_crtc_atomic_check,
 	.atomic_begin = omap_crtc_atomic_begin,
 	.atomic_flush = omap_crtc_atomic_flush,
+	.atomic_enable = omap_crtc_atomic_enable,
 };
 
 /* -----------------------------------------------------------------------------
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 7ede5f131a5c..ea95e7e7cc7f 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -447,7 +447,8 @@ static void qxl_mode_set_nofb(struct drm_crtc *crtc)
 
 }
 
-static void qxl_crtc_enable(struct drm_crtc *crtc)
+static void qxl_crtc_atomic_enable(struct drm_crtc *crtc,
+				   struct drm_crtc_state *old_state)
 {
 	DRM_DEBUG("\n");
 }
@@ -466,8 +467,8 @@ static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = {
 	.disable = qxl_crtc_disable,
 	.mode_fixup = qxl_crtc_mode_fixup,
 	.mode_set_nofb = qxl_mode_set_nofb,
-	.enable = qxl_crtc_enable,
 	.atomic_flush = qxl_crtc_atomic_flush,
+	.atomic_enable = qxl_crtc_atomic_enable,
 };
 
 static int qxl_primary_atomic_check(struct drm_plane *plane,
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
index 345eff72f581..6aa3fa8d06f9 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
@@ -552,7 +552,8 @@ void rcar_du_crtc_resume(struct rcar_du_crtc *rcrtc)
  * CRTC Functions
  */
 
-static void rcar_du_crtc_enable(struct drm_crtc *crtc)
+static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc,
+				       struct drm_crtc_state *old_state)
 {
 	struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
 
@@ -610,9 +611,9 @@ static void rcar_du_crtc_atomic_flush(struct drm_crtc *crtc,
 
 static const struct drm_crtc_helper_funcs crtc_helper_funcs = {
 	.disable = rcar_du_crtc_disable,
-	.enable = rcar_du_crtc_enable,
 	.atomic_begin = rcar_du_crtc_atomic_begin,
 	.atomic_flush = rcar_du_crtc_atomic_flush,
+	.atomic_enable = rcar_du_crtc_atomic_enable,
 };
 
 static int rcar_du_crtc_enable_vblank(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index 5d450332c2fd..bb59f7410634 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -871,7 +871,8 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
 	return true;
 }
 
-static void vop_crtc_enable(struct drm_crtc *crtc)
+static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
+				   struct drm_crtc_state *old_state)
 {
 	struct vop *vop = to_vop(crtc);
 	const struct vop_data *vop_data = vop->data;
@@ -1079,11 +1080,11 @@ static void vop_crtc_atomic_begin(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = {
-	.enable = vop_crtc_enable,
 	.disable = vop_crtc_disable,
 	.mode_fixup = vop_crtc_mode_fixup,
 	.atomic_flush = vop_crtc_atomic_flush,
 	.atomic_begin = vop_crtc_atomic_begin,
+	.atomic_enable = vop_crtc_atomic_enable,
 };
 
 static void vop_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/sti/sti_crtc.c b/drivers/gpu/drm/sti/sti_crtc.c
index d45a4335df5d..bb864345fedf 100644
--- a/drivers/gpu/drm/sti/sti_crtc.c
+++ b/drivers/gpu/drm/sti/sti_crtc.c
@@ -20,7 +20,8 @@
 #include "sti_vid.h"
 #include "sti_vtg.h"
 
-static void sti_crtc_enable(struct drm_crtc *crtc)
+static void sti_crtc_atomic_enable(struct drm_crtc *crtc,
+				   struct drm_crtc_state *old_state)
 {
 	struct sti_mixer *mixer = to_sti_mixer(crtc);
 
@@ -222,10 +223,10 @@ static void sti_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs sti_crtc_helper_funcs = {
-	.enable = sti_crtc_enable,
 	.disable = sti_crtc_disabling,
 	.mode_set_nofb = sti_crtc_mode_set_nofb,
 	.atomic_flush = sti_crtc_atomic_flush,
+	.atomic_enable = sti_crtc_atomic_enable,
 };
 
 static void sti_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
index 1b9483d4f2a4..337fce004d08 100644
--- a/drivers/gpu/drm/stm/ltdc.c
+++ b/drivers/gpu/drm/stm/ltdc.c
@@ -386,7 +386,8 @@ static void ltdc_crtc_load_lut(struct drm_crtc *crtc)
 				  ldev->clut[i]);
 }
 
-static void ltdc_crtc_enable(struct drm_crtc *crtc)
+static void ltdc_crtc_atomic_enable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
 {
 	struct ltdc_device *ldev = crtc_to_ltdc(crtc);
 
@@ -524,10 +525,10 @@ static void ltdc_crtc_atomic_flush(struct drm_crtc *crtc,
 
 static struct drm_crtc_helper_funcs ltdc_crtc_helper_funcs = {
 	.load_lut = ltdc_crtc_load_lut,
-	.enable = ltdc_crtc_enable,
 	.disable = ltdc_crtc_disable,
 	.mode_set_nofb = ltdc_crtc_mode_set_nofb,
 	.atomic_flush = ltdc_crtc_atomic_flush,
+	.atomic_enable = ltdc_crtc_atomic_enable,
 };
 
 int ltdc_crtc_enable_vblank(struct drm_device *ddev, unsigned int pipe)
diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
index f8c70439d1e2..509e4d8014f3 100644
--- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
+++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
@@ -86,7 +86,8 @@ static void sun4i_crtc_disable(struct drm_crtc *crtc)
 	}
 }
 
-static void sun4i_crtc_enable(struct drm_crtc *crtc)
+static void sun4i_crtc_atomic_enable(struct drm_crtc *crtc,
+				     struct drm_crtc_state *old_state)
 {
 	struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
 
@@ -98,8 +99,8 @@ static void sun4i_crtc_enable(struct drm_crtc *crtc)
 static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = {
 	.atomic_begin	= sun4i_crtc_atomic_begin,
 	.atomic_flush	= sun4i_crtc_atomic_flush,
+	.atomic_enable	= sun4i_crtc_atomic_enable,
 	.disable	= sun4i_crtc_disable,
-	.enable		= sun4i_crtc_enable,
 };
 
 static int sun4i_crtc_enable_vblank(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index c875f11786b9..2e0d167cb657 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -1243,7 +1243,8 @@ static void tegra_crtc_disable(struct drm_crtc *crtc)
 	pm_runtime_put_sync(dc->dev);
 }
 
-static void tegra_crtc_enable(struct drm_crtc *crtc)
+static void tegra_crtc_atomic_enable(struct drm_crtc *crtc,
+				     struct drm_crtc_state *old_state)
 {
 	struct drm_display_mode *mode = &crtc->state->adjusted_mode;
 	struct tegra_dc_state *state = to_dc_state(crtc->state);
@@ -1352,10 +1353,10 @@ static void tegra_crtc_atomic_flush(struct drm_crtc *crtc,
 
 static const struct drm_crtc_helper_funcs tegra_crtc_helper_funcs = {
 	.disable = tegra_crtc_disable,
-	.enable = tegra_crtc_enable,
 	.atomic_check = tegra_crtc_atomic_check,
 	.atomic_begin = tegra_crtc_atomic_begin,
 	.atomic_flush = tegra_crtc_atomic_flush,
+	.atomic_enable = tegra_crtc_atomic_enable,
 };
 
 static irqreturn_t tegra_dc_irq(int irq, void *data)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index d524ed0d5146..6c5892763d27 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -504,6 +504,12 @@ static void tilcdc_crtc_enable(struct drm_crtc *crtc)
 	mutex_unlock(&tilcdc_crtc->enable_lock);
 }
 
+static void tilcdc_crtc_atomic_enable(struct drm_crtc *crtc,
+				      struct drm_crtc_state *old_state)
+{
+	tilcdc_crtc_enable(crtc);
+}
+
 static void tilcdc_crtc_off(struct drm_crtc *crtc, bool shutdown)
 {
 	struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
@@ -729,9 +735,9 @@ static const struct drm_crtc_funcs tilcdc_crtc_funcs = {
 
 static const struct drm_crtc_helper_funcs tilcdc_crtc_helper_funcs = {
 		.mode_fixup     = tilcdc_crtc_mode_fixup,
-		.enable		= tilcdc_crtc_enable,
 		.disable	= tilcdc_crtc_disable,
 		.atomic_check	= tilcdc_crtc_atomic_check,
+		.atomic_enable	= tilcdc_crtc_atomic_enable,
 };
 
 int tilcdc_crtc_max_width(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index f20c01759c0d..4c03a565b276 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -533,7 +533,8 @@ static void vc4_crtc_disable(struct drm_crtc *crtc)
 	}
 }
 
-static void vc4_crtc_enable(struct drm_crtc *crtc)
+static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
+				   struct drm_crtc_state *old_state)
 {
 	struct drm_device *dev = crtc->dev;
 	struct vc4_dev *vc4 = to_vc4_dev(dev);
@@ -870,10 +871,10 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = {
 static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = {
 	.mode_set_nofb = vc4_crtc_mode_set_nofb,
 	.disable = vc4_crtc_disable,
-	.enable = vc4_crtc_enable,
 	.mode_valid = vc4_crtc_mode_valid,
 	.atomic_check = vc4_crtc_atomic_check,
 	.atomic_flush = vc4_crtc_atomic_flush,
+	.atomic_enable = vc4_crtc_atomic_enable,
 };
 
 static const struct vc4_crtc_data pv0_data = {
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index d51bd4521f17..03a3c12ed100 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -113,7 +113,8 @@ static void virtio_gpu_crtc_mode_set_nofb(struct drm_crtc *crtc)
 				   crtc->mode.vdisplay, 0, 0);
 }
 
-static void virtio_gpu_crtc_enable(struct drm_crtc *crtc)
+static void virtio_gpu_crtc_atomic_enable(struct drm_crtc *crtc,
+					  struct drm_crtc_state *old_state)
 {
 }
 
@@ -145,11 +146,11 @@ static void virtio_gpu_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = {
-	.enable        = virtio_gpu_crtc_enable,
 	.disable       = virtio_gpu_crtc_disable,
 	.mode_set_nofb = virtio_gpu_crtc_mode_set_nofb,
 	.atomic_check  = virtio_gpu_crtc_atomic_check,
 	.atomic_flush  = virtio_gpu_crtc_atomic_flush,
+	.atomic_enable = virtio_gpu_crtc_atomic_enable,
 };
 
 static void virtio_gpu_enc_mode_set(struct drm_encoder *encoder,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index f8acd3a15523..832b83c582c2 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
@@ -203,7 +203,7 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc)
 }
 
 /**
- * vmw_ldu_crtc_helper_enable - Noop
+ * vmw_ldu_crtc_atomic_enable - Noop
  *
  * @crtc: CRTC associated with the new screen
  *
@@ -212,7 +212,8 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc)
  * but since for LDU the display plane is closely tied to the
  * CRTC, it makes more sense to do those at plane update time.
  */
-static void vmw_ldu_crtc_helper_enable(struct drm_crtc *crtc)
+static void vmw_ldu_crtc_atomic_enable(struct drm_crtc *crtc,
+				       struct drm_crtc_state *old_state)
 {
 }
 
@@ -376,12 +377,12 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
-	.enable = vmw_ldu_crtc_helper_enable,
 	.disable = vmw_ldu_crtc_helper_disable,
 	.mode_set_nofb = vmw_ldu_crtc_mode_set_nofb,
 	.atomic_check = vmw_du_crtc_atomic_check,
 	.atomic_begin = vmw_du_crtc_atomic_begin,
 	.atomic_flush = vmw_du_crtc_atomic_flush,
+	.atomic_enable = vmw_ldu_crtc_atomic_enable,
 };
 
 
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index 1cb826c503bf..8ba3bad06909 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -270,13 +270,14 @@ static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
 }
 
 /**
- * vmw_sou_crtc_helper_enable - Noop
+ * vmw_sou_crtc_atomic_enable - Noop
  *
  * @crtc: CRTC associated with the new screen
  *
  * This is called after a mode set has been completed.
  */
-static void vmw_sou_crtc_helper_enable(struct drm_crtc *crtc)
+static void vmw_sou_crtc_atomic_enable(struct drm_crtc *crtc,
+				       struct drm_crtc_state *old_state)
 {
 }
 
@@ -573,12 +574,12 @@ drm_plane_helper_funcs vmw_sou_primary_plane_helper_funcs = {
 
 static const struct drm_crtc_helper_funcs vmw_sou_crtc_helper_funcs = {
 	.prepare = vmw_sou_crtc_helper_prepare,
-	.enable = vmw_sou_crtc_helper_enable,
 	.disable = vmw_sou_crtc_helper_disable,
 	.mode_set_nofb = vmw_sou_crtc_mode_set_nofb,
 	.atomic_check = vmw_du_crtc_atomic_check,
 	.atomic_begin = vmw_du_crtc_atomic_begin,
 	.atomic_flush = vmw_du_crtc_atomic_flush,
+	.atomic_enable = vmw_sou_crtc_atomic_enable,
 };
 
 
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index 4eb93b47d6db..f2b39d9c51cc 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -412,7 +412,8 @@ static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
 }
 
 
-static void vmw_stdu_crtc_helper_enable(struct drm_crtc *crtc)
+static void vmw_stdu_crtc_atomic_enable(struct drm_crtc *crtc,
+					struct drm_crtc_state *old_state)
 {
 	struct vmw_private *dev_priv;
 	struct vmw_screen_target_display_unit *stdu;
@@ -1415,12 +1416,12 @@ drm_plane_helper_funcs vmw_stdu_primary_plane_helper_funcs = {
 
 static const struct drm_crtc_helper_funcs vmw_stdu_crtc_helper_funcs = {
 	.prepare = vmw_stdu_crtc_helper_prepare,
-	.enable = vmw_stdu_crtc_helper_enable,
 	.disable = vmw_stdu_crtc_helper_disable,
 	.mode_set_nofb = vmw_stdu_crtc_mode_set_nofb,
 	.atomic_check = vmw_du_crtc_atomic_check,
 	.atomic_begin = vmw_du_crtc_atomic_begin,
 	.atomic_flush = vmw_du_crtc_atomic_flush,
+	.atomic_enable = vmw_stdu_crtc_atomic_enable,
 };
 
 
diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c
index 5fbd10b60ee5..ccb4b0bdb8c6 100644
--- a/drivers/gpu/drm/zte/zx_vou.c
+++ b/drivers/gpu/drm/zte/zx_vou.c
@@ -350,7 +350,8 @@ static inline void vou_chn_set_update(struct zx_crtc *zcrtc)
 	zx_writel(zcrtc->chnreg + CHN_UPDATE, 1);
 }
 
-static void zx_crtc_enable(struct drm_crtc *crtc)
+static void zx_crtc_atomic_enable(struct drm_crtc *crtc,
+				  struct drm_crtc_state *old_state)
 {
 	struct drm_display_mode *mode = &crtc->state->adjusted_mode;
 	bool interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE;
@@ -490,9 +491,9 @@ static void zx_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs zx_crtc_helper_funcs = {
-	.enable = zx_crtc_enable,
 	.disable = zx_crtc_disable,
 	.atomic_flush = zx_crtc_atomic_flush,
+	.atomic_enable = zx_crtc_atomic_enable,
 };
 
 static int zx_vou_enable_vblank(struct drm_crtc *crtc)
diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
index 474a1029ec79..c85124f687ba 100644
--- a/include/drm/drm_modeset_helper_vtables.h
+++ b/include/drm/drm_modeset_helper_vtables.h
@@ -71,7 +71,7 @@ struct drm_crtc_helper_funcs {
 	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
 	 * also support using this hook for enabling and disabling a CRTC to
 	 * facilitate transitions to atomic, but it is deprecated. Instead
-	 * @enable and @disable should be used.
+	 * @atomic_enable and @atomic_disable should be used.
 	 */
 	void (*dpms)(struct drm_crtc *crtc, int mode);
 
@@ -85,8 +85,8 @@ struct drm_crtc_helper_funcs {
 	 *
 	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
 	 * also support using this hook for disabling a CRTC to facilitate
-	 * transitions to atomic, but it is deprecated. Instead @disable should
-	 * be used.
+	 * transitions to atomic, but it is deprecated. Instead @atomic_disable
+	 * should be used.
 	 */
 	void (*prepare)(struct drm_crtc *crtc);
 
@@ -100,8 +100,8 @@ struct drm_crtc_helper_funcs {
 	 *
 	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
 	 * also support using this hook for enabling a CRTC to facilitate
-	 * transitions to atomic, but it is deprecated. Instead @enable should
-	 * be used.
+	 * transitions to atomic, but it is deprecated. Instead @atomic_enable
+	 * should be used.
 	 */
 	void (*commit)(struct drm_crtc *crtc);
 
@@ -222,7 +222,7 @@ struct drm_crtc_helper_funcs {
 	 * pipeline is suspended using either DPMS or the new "ACTIVE" property.
 	 * Which means register values set in this callback might get reset when
 	 * the CRTC is suspended, but not restored.  Such drivers should instead
-	 * move all their CRTC setup into the @enable callback.
+	 * move all their CRTC setup into the @atomic_enable callback.
 	 *
 	 * This callback is optional.
 	 */
@@ -297,7 +297,7 @@ struct drm_crtc_helper_funcs {
 	 * Atomic drivers don't need to implement it if there's no need to
 	 * disable anything at the CRTC level. To ensure that runtime PM
 	 * handling (using either DPMS or the new "ACTIVE" property) works
-	 * @disable must be the inverse of @enable for atomic drivers.
+	 * @disable must be the inverse of @atomic_enable for atomic drivers.
 	 * Atomic drivers should consider to use @atomic_disable instead of
 	 * this one.
 	 *
@@ -316,24 +316,6 @@ struct drm_crtc_helper_funcs {
 	void (*disable)(struct drm_crtc *crtc);
 
 	/**
-	 * @enable:
-	 *
-	 * This callback should be used to enable the CRTC. With the atomic
-	 * drivers it is called before all encoders connected to this CRTC are
-	 * enabled through the encoder's own &drm_encoder_helper_funcs.enable
-	 * hook.  If that sequence is too simple drivers can just add their own
-	 * hooks and call it from this CRTC callback here by looping over all
-	 * encoders connected to it using for_each_encoder_on_crtc().
-	 *
-	 * This hook is used only by atomic helpers, for symmetry with @disable.
-	 * Atomic drivers don't need to implement it if there's no need to
-	 * enable anything at the CRTC level. To ensure that runtime PM handling
-	 * (using either DPMS or the new "ACTIVE" property) works
-	 * @enable must be the inverse of @disable for atomic drivers.
-	 */
-	void (*enable)(struct drm_crtc *crtc);
-
-	/**
 	 * @atomic_check:
 	 *
 	 * Drivers should check plane-update related CRTC constraints in this
@@ -433,6 +415,30 @@ struct drm_crtc_helper_funcs {
 			     struct drm_crtc_state *old_crtc_state);
 
 	/**
+	 * @atomic_enable:
+	 *
+	 * This callback should be used to enable the CRTC. With the atomic
+	 * drivers it is called before all encoders connected to this CRTC are
+	 * enabled through the encoder's own &drm_encoder_helper_funcs.enable
+	 * hook.  If that sequence is too simple drivers can just add their own
+	 * hooks and call it from this CRTC callback here by looping over all
+	 * encoders connected to it using for_each_encoder_on_crtc().
+	 *
+	 * This hook is used only by atomic helpers, for symmetry with
+	 * @atomic_disable. Atomic drivers don't need to implement it if there's
+	 * no need to enable anything at the CRTC level. To ensure that runtime
+	 * PM handling (using either DPMS or the new "ACTIVE" property) works
+	 * @atomic_enable must be the inverse of @atomic_disable for atomic
+	 * drivers.
+	 *
+	 * Drivers can use the @old_crtc_state input parameter if the operations
+	 * needed to enable the CRTC don't depend solely on the new state but
+	 * also on the transition between the old state and the new state.
+	 */
+	void (*atomic_enable)(struct drm_crtc *crtc,
+			      struct drm_crtc_state *old_crtc_state);
+
+	/**
 	 * @atomic_disable:
 	 *
 	 * This callback should be used to disable the CRTC. With the atomic
-- 
Regards,

Laurent Pinchart

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

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 2/3] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-30  9:36 [PATCH v2 0/3] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
  2017-06-30  9:36 ` [PATCH v2 1/3] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
@ 2017-06-30  9:36 ` Laurent Pinchart
  2017-06-30 12:53   ` Daniel Vetter
  2017-06-30  9:36 ` [PATCH v2 3/3] drm: vmwgfx: Remove the legacy CRTC .prepare() helper operations Laurent Pinchart
  2 siblings, 1 reply; 8+ messages in thread
From: Laurent Pinchart @ 2017-06-30  9:36 UTC (permalink / raw)
  To: dri-devel
  Cc: Neil Armstrong, Liviu Dudau, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom, Alexey Brodkin,
	Xinliang Liu, Xinwei Kong, Tomi Valkeinen, VMware Graphics,
	Mali DP Maintainers, Chen Feng, Jyri Sarha, Dave Airlie,
	Vincent Abriou, Seung-Woo Kim, Philippe Cornu, Yannick Fertre,
	Kyungmin Park, Rongrong Zou

The CRTC .disable() helper operation is deprecated for atomic drivers,
the new .atomic_disable() helper operation being preferred. Convert all
atomic drivers to .atomic_disable() to avoid cargo-cult use of
.disable() in new drivers.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> # for sun4i
Acked-by: Philipp Zabel <p.zabel@pengutronix.de> # for mediatek
Acked-by: Alexey Brodkin <abrodkin@synopsys.com> # for arcpgu
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com> # for atmel-hlcdc
Tested-by: Philippe Cornu <philippe.cornu@st.com> # for stm
Acked-by: Philippe Cornu <philippe.cornu@st.com> # for stm
Acked-by: Vincent Abriou <vincent.abriou@st.com> # for sti
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com> # for vmwgfx
---
 drivers/gpu/drm/arc/arcpgu_crtc.c               | 5 +++--
 drivers/gpu/drm/arm/hdlcd_crtc.c                | 5 +++--
 drivers/gpu/drm/arm/malidp_crtc.c               | 5 +++--
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c  | 5 +++--
 drivers/gpu/drm/drm_simple_kms_helper.c         | 5 +++--
 drivers/gpu/drm/exynos/exynos_drm_crtc.c        | 5 +++--
 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c  | 5 +++--
 drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 5 +++--
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c         | 5 +++--
 drivers/gpu/drm/meson/meson_crtc.c              | 5 +++--
 drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c        | 5 +++--
 drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c        | 5 +++--
 drivers/gpu/drm/omapdrm/omap_crtc.c             | 5 +++--
 drivers/gpu/drm/qxl/qxl_display.c               | 5 +++--
 drivers/gpu/drm/rcar-du/rcar_du_crtc.c          | 5 +++--
 drivers/gpu/drm/rockchip/rockchip_drm_vop.c     | 5 +++--
 drivers/gpu/drm/sti/sti_crtc.c                  | 5 +++--
 drivers/gpu/drm/stm/ltdc.c                      | 5 +++--
 drivers/gpu/drm/sun4i/sun4i_crtc.c              | 5 +++--
 drivers/gpu/drm/tegra/dc.c                      | 5 +++--
 drivers/gpu/drm/tilcdc/tilcdc_crtc.c            | 8 +++++++-
 drivers/gpu/drm/vc4/vc4_crtc.c                  | 5 +++--
 drivers/gpu/drm/virtio/virtgpu_display.c        | 5 +++--
 drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c             | 7 ++++---
 drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c            | 7 ++++---
 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c            | 5 +++--
 drivers/gpu/drm/zte/zx_vou.c                    | 5 +++--
 27 files changed, 87 insertions(+), 55 deletions(-)

diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
index c9bc6a90ac83..1859dd3ad622 100644
--- a/drivers/gpu/drm/arc/arcpgu_crtc.c
+++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
@@ -130,7 +130,8 @@ static void arc_pgu_crtc_atomic_enable(struct drm_crtc *crtc,
 		      ARCPGU_CTRL_ENABLE_MASK);
 }
 
-static void arc_pgu_crtc_disable(struct drm_crtc *crtc)
+static void arc_pgu_crtc_atomic_disable(struct drm_crtc *crtc,
+					struct drm_crtc_state *old_state)
 {
 	struct arcpgu_drm_private *arcpgu = crtc_to_arcpgu_priv(crtc);
 
@@ -162,9 +163,9 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
 	.mode_set	= drm_helper_crtc_mode_set,
 	.mode_set_base	= drm_helper_crtc_mode_set_base,
 	.mode_set_nofb	= arc_pgu_crtc_mode_set_nofb,
-	.disable	= arc_pgu_crtc_disable,
 	.atomic_begin	= arc_pgu_crtc_atomic_begin,
 	.atomic_enable	= arc_pgu_crtc_atomic_enable,
+	.atomic_disable	= arc_pgu_crtc_atomic_disable,
 };
 
 static void arc_pgu_plane_atomic_update(struct drm_plane *plane,
diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index 2b7f4f05d91f..16e1e20cf04c 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -176,7 +176,8 @@ static void hdlcd_crtc_atomic_enable(struct drm_crtc *crtc,
 	drm_crtc_vblank_on(crtc);
 }
 
-static void hdlcd_crtc_disable(struct drm_crtc *crtc)
+static void hdlcd_crtc_atomic_disable(struct drm_crtc *crtc,
+				      struct drm_crtc_state *old_state)
 {
 	struct hdlcd_drm_private *hdlcd = crtc_to_hdlcd_priv(crtc);
 
@@ -219,10 +220,10 @@ static void hdlcd_crtc_atomic_begin(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
-	.disable	= hdlcd_crtc_disable,
 	.atomic_check	= hdlcd_crtc_atomic_check,
 	.atomic_begin	= hdlcd_crtc_atomic_begin,
 	.atomic_enable	= hdlcd_crtc_atomic_enable,
+	.atomic_disable	= hdlcd_crtc_atomic_disable,
 };
 
 static int hdlcd_plane_atomic_check(struct drm_plane *plane,
diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
index 8e5b1c0181ab..3615d18a7ddf 100644
--- a/drivers/gpu/drm/arm/malidp_crtc.c
+++ b/drivers/gpu/drm/arm/malidp_crtc.c
@@ -70,7 +70,8 @@ static void malidp_crtc_atomic_enable(struct drm_crtc *crtc,
 	drm_crtc_vblank_on(crtc);
 }
 
-static void malidp_crtc_disable(struct drm_crtc *crtc)
+static void malidp_crtc_atomic_disable(struct drm_crtc *crtc,
+				       struct drm_crtc_state *old_state)
 {
 	struct malidp_drm *malidp = crtc_to_malidp_device(crtc);
 	struct malidp_hw_device *hwdev = malidp->dev;
@@ -409,9 +410,9 @@ static int malidp_crtc_atomic_check(struct drm_crtc *crtc,
 
 static const struct drm_crtc_helper_funcs malidp_crtc_helper_funcs = {
 	.mode_valid = malidp_crtc_mode_valid,
-	.disable = malidp_crtc_disable,
 	.atomic_check = malidp_crtc_atomic_check,
 	.atomic_enable = malidp_crtc_atomic_enable,
+	.atomic_disable = malidp_crtc_atomic_disable,
 };
 
 static struct drm_crtc_state *malidp_crtc_duplicate_state(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
index e54e503180f4..441769c5bcd4 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
@@ -149,7 +149,8 @@ atmel_hlcdc_crtc_mode_valid(struct drm_crtc *c,
 	return atmel_hlcdc_dc_mode_valid(crtc->dc, mode);
 }
 
-static void atmel_hlcdc_crtc_disable(struct drm_crtc *c)
+static void atmel_hlcdc_crtc_atomic_disable(struct drm_crtc *c,
+					    struct drm_crtc_state *old_state)
 {
 	struct drm_device *dev = c->dev;
 	struct atmel_hlcdc_crtc *crtc = drm_crtc_to_atmel_hlcdc_crtc(c);
@@ -320,11 +321,11 @@ static const struct drm_crtc_helper_funcs lcdc_crtc_helper_funcs = {
 	.mode_set = drm_helper_crtc_mode_set,
 	.mode_set_nofb = atmel_hlcdc_crtc_mode_set_nofb,
 	.mode_set_base = drm_helper_crtc_mode_set_base,
-	.disable = atmel_hlcdc_crtc_disable,
 	.atomic_check = atmel_hlcdc_crtc_atomic_check,
 	.atomic_begin = atmel_hlcdc_crtc_atomic_begin,
 	.atomic_flush = atmel_hlcdc_crtc_atomic_flush,
 	.atomic_enable = atmel_hlcdc_crtc_atomic_enable,
+	.atomic_disable = atmel_hlcdc_crtc_atomic_disable,
 };
 
 static void atmel_hlcdc_crtc_destroy(struct drm_crtc *c)
diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
index 58c27ab1756f..98250854af75 100644
--- a/drivers/gpu/drm/drm_simple_kms_helper.c
+++ b/drivers/gpu/drm/drm_simple_kms_helper.c
@@ -52,7 +52,8 @@ static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc,
 	pipe->funcs->enable(pipe, crtc->state);
 }
 
-static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc)
+static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc,
+					struct drm_crtc_state *old_state)
 {
 	struct drm_simple_display_pipe *pipe;
 
@@ -66,7 +67,7 @@ static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc)
 static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = {
 	.atomic_check = drm_simple_kms_crtc_check,
 	.atomic_enable = drm_simple_kms_crtc_enable,
-	.disable = drm_simple_kms_crtc_disable,
+	.atomic_disable = drm_simple_kms_crtc_disable,
 };
 
 static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
index b7e2fadb6442..c37078fbe0ea 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
@@ -32,7 +32,8 @@ static void exynos_drm_crtc_atomic_enable(struct drm_crtc *crtc,
 	drm_crtc_vblank_on(crtc);
 }
 
-static void exynos_drm_crtc_disable(struct drm_crtc *crtc)
+static void exynos_drm_crtc_atomic_disable(struct drm_crtc *crtc,
+					   struct drm_crtc_state *old_state)
 {
 	struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
 
@@ -83,11 +84,11 @@ static void exynos_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
-	.disable	= exynos_drm_crtc_disable,
 	.atomic_check	= exynos_crtc_atomic_check,
 	.atomic_begin	= exynos_crtc_atomic_begin,
 	.atomic_flush	= exynos_crtc_atomic_flush,
 	.atomic_enable	= exynos_drm_crtc_atomic_enable,
+	.atomic_disable	= exynos_drm_crtc_atomic_disable,
 };
 
 void exynos_crtc_handle_event(struct exynos_drm_crtc *exynos_crtc)
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
index 49ef47c0c81a..54a4542a40f1 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
@@ -210,7 +210,8 @@ static void hibmc_crtc_atomic_enable(struct drm_crtc *crtc,
 	drm_crtc_vblank_on(crtc);
 }
 
-static void hibmc_crtc_disable(struct drm_crtc *crtc)
+static void hibmc_crtc_atomic_disable(struct drm_crtc *crtc,
+				      struct drm_crtc_state *old_state)
 {
 	unsigned int reg;
 	struct hibmc_drm_private *priv = crtc->dev->dev_private;
@@ -454,11 +455,11 @@ static const struct drm_crtc_funcs hibmc_crtc_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs hibmc_crtc_helper_funcs = {
-	.disable	= hibmc_crtc_disable,
 	.mode_set_nofb	= hibmc_crtc_mode_set_nofb,
 	.atomic_begin	= hibmc_crtc_atomic_begin,
 	.atomic_flush	= hibmc_crtc_atomic_flush,
 	.atomic_enable	= hibmc_crtc_atomic_enable,
+	.atomic_disable	= hibmc_crtc_atomic_disable,
 };
 
 int hibmc_de_init(struct hibmc_drm_private *priv)
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
index 8e00818b24fc..7e3abbf4ef73 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
@@ -490,7 +490,8 @@ static void ade_crtc_atomic_enable(struct drm_crtc *crtc,
 	acrtc->enable = true;
 }
 
-static void ade_crtc_disable(struct drm_crtc *crtc)
+static void ade_crtc_atomic_disable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
 {
 	struct ade_crtc *acrtc = to_ade_crtc(crtc);
 	struct ade_hw_ctx *ctx = acrtc->ctx;
@@ -554,11 +555,11 @@ static void ade_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs ade_crtc_helper_funcs = {
-	.disable	= ade_crtc_disable,
 	.mode_set_nofb	= ade_crtc_mode_set_nofb,
 	.atomic_begin	= ade_crtc_atomic_begin,
 	.atomic_flush	= ade_crtc_atomic_flush,
 	.atomic_enable	= ade_crtc_atomic_enable,
+	.atomic_disable	= ade_crtc_atomic_disable,
 };
 
 static const struct drm_crtc_funcs ade_crtc_funcs = {
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
index 5971b0827d1b..fc65c57dda8c 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
@@ -391,7 +391,8 @@ static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc,
 	mtk_crtc->enabled = true;
 }
 
-static void mtk_drm_crtc_disable(struct drm_crtc *crtc)
+static void mtk_drm_crtc_atomic_disable(struct drm_crtc *crtc,
+					struct drm_crtc_state *old_state)
 {
 	struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
 	struct mtk_ddp_comp *ovl = mtk_crtc->ddp_comp[0];
@@ -488,10 +489,10 @@ static const struct drm_crtc_funcs mtk_crtc_funcs = {
 static const struct drm_crtc_helper_funcs mtk_crtc_helper_funcs = {
 	.mode_fixup	= mtk_drm_crtc_mode_fixup,
 	.mode_set_nofb	= mtk_drm_crtc_mode_set_nofb,
-	.disable	= mtk_drm_crtc_disable,
 	.atomic_begin	= mtk_drm_crtc_atomic_begin,
 	.atomic_flush	= mtk_drm_crtc_atomic_flush,
 	.atomic_enable	= mtk_drm_crtc_atomic_enable,
+	.atomic_disable	= mtk_drm_crtc_atomic_disable,
 };
 
 static int mtk_drm_crtc_init(struct drm_device *drm,
diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c
index 6f148307b0e0..5155f0179b61 100644
--- a/drivers/gpu/drm/meson/meson_crtc.c
+++ b/drivers/gpu/drm/meson/meson_crtc.c
@@ -103,7 +103,8 @@ static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
 	priv->viu.osd1_enabled = true;
 }
 
-static void meson_crtc_disable(struct drm_crtc *crtc)
+static void meson_crtc_atomic_disable(struct drm_crtc *crtc,
+				      struct drm_crtc_state *old_state)
 {
 	struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
 	struct meson_drm *priv = meson_crtc->priv;
@@ -150,10 +151,10 @@ static void meson_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs meson_crtc_helper_funcs = {
-	.disable	= meson_crtc_disable,
 	.atomic_begin	= meson_crtc_atomic_begin,
 	.atomic_flush	= meson_crtc_atomic_flush,
 	.atomic_enable	= meson_crtc_atomic_enable,
+	.atomic_disable	= meson_crtc_atomic_disable,
 };
 
 void meson_crtc_irq(struct meson_drm *priv)
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
index 9c20133f3f8d..3c7a9d343e05 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
@@ -279,7 +279,8 @@ static void mdp4_crtc_mode_set_nofb(struct drm_crtc *crtc)
 	}
 }
 
-static void mdp4_crtc_disable(struct drm_crtc *crtc)
+static void mdp4_crtc_atomic_disable(struct drm_crtc *crtc,
+				     struct drm_crtc_state *old_state)
 {
 	struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
 	struct mdp4_kms *mdp4_kms = get_kms(crtc);
@@ -493,11 +494,11 @@ static const struct drm_crtc_funcs mdp4_crtc_funcs = {
 
 static const struct drm_crtc_helper_funcs mdp4_crtc_helper_funcs = {
 	.mode_set_nofb = mdp4_crtc_mode_set_nofb,
-	.disable = mdp4_crtc_disable,
 	.atomic_check = mdp4_crtc_atomic_check,
 	.atomic_begin = mdp4_crtc_atomic_begin,
 	.atomic_flush = mdp4_crtc_atomic_flush,
 	.atomic_enable = mdp4_crtc_atomic_enable,
+	.atomic_disable = mdp4_crtc_atomic_disable,
 };
 
 static void mdp4_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus)
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
index d39d9d24d169..4322a502555a 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
@@ -409,7 +409,8 @@ static void mdp5_crtc_mode_set_nofb(struct drm_crtc *crtc)
 	spin_unlock_irqrestore(&mdp5_crtc->lm_lock, flags);
 }
 
-static void mdp5_crtc_disable(struct drm_crtc *crtc)
+static void mdp5_crtc_atomic_disable(struct drm_crtc *crtc,
+				     struct drm_crtc_state *old_state)
 {
 	struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
 	struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state);
@@ -940,11 +941,11 @@ static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = {
 
 static const struct drm_crtc_helper_funcs mdp5_crtc_helper_funcs = {
 	.mode_set_nofb = mdp5_crtc_mode_set_nofb,
-	.disable = mdp5_crtc_disable,
 	.atomic_check = mdp5_crtc_atomic_check,
 	.atomic_begin = mdp5_crtc_atomic_begin,
 	.atomic_flush = mdp5_crtc_atomic_flush,
 	.atomic_enable = mdp5_crtc_atomic_enable,
+	.atomic_disable = mdp5_crtc_atomic_disable,
 };
 
 static void mdp5_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus)
diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
index 7a1b7a9cc270..14e8a7738b06 100644
--- a/drivers/gpu/drm/omapdrm/omap_crtc.c
+++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
@@ -373,7 +373,8 @@ static void omap_crtc_atomic_enable(struct drm_crtc *crtc,
 	spin_unlock_irq(&crtc->dev->event_lock);
 }
 
-static void omap_crtc_disable(struct drm_crtc *crtc)
+static void omap_crtc_atomic_disable(struct drm_crtc *crtc,
+				     struct drm_crtc_state *old_state)
 {
 	struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
 
@@ -568,11 +569,11 @@ static const struct drm_crtc_funcs omap_crtc_funcs = {
 
 static const struct drm_crtc_helper_funcs omap_crtc_helper_funcs = {
 	.mode_set_nofb = omap_crtc_mode_set_nofb,
-	.disable = omap_crtc_disable,
 	.atomic_check = omap_crtc_atomic_check,
 	.atomic_begin = omap_crtc_atomic_begin,
 	.atomic_flush = omap_crtc_atomic_flush,
 	.atomic_enable = omap_crtc_atomic_enable,
+	.atomic_disable = omap_crtc_atomic_disable,
 };
 
 /* -----------------------------------------------------------------------------
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index ea95e7e7cc7f..5eeae89c138d 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -453,7 +453,8 @@ static void qxl_crtc_atomic_enable(struct drm_crtc *crtc,
 	DRM_DEBUG("\n");
 }
 
-static void qxl_crtc_disable(struct drm_crtc *crtc)
+static void qxl_crtc_atomic_disable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
 {
 	struct qxl_crtc *qcrtc = to_qxl_crtc(crtc);
 	struct qxl_device *qdev = crtc->dev->dev_private;
@@ -464,11 +465,11 @@ static void qxl_crtc_disable(struct drm_crtc *crtc)
 }
 
 static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = {
-	.disable = qxl_crtc_disable,
 	.mode_fixup = qxl_crtc_mode_fixup,
 	.mode_set_nofb = qxl_mode_set_nofb,
 	.atomic_flush = qxl_crtc_atomic_flush,
 	.atomic_enable = qxl_crtc_atomic_enable,
+	.atomic_disable = qxl_crtc_atomic_disable,
 };
 
 static int qxl_primary_atomic_check(struct drm_plane *plane,
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
index 6aa3fa8d06f9..f131fc68cc46 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
@@ -561,7 +561,8 @@ static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc,
 	rcar_du_crtc_start(rcrtc);
 }
 
-static void rcar_du_crtc_disable(struct drm_crtc *crtc)
+static void rcar_du_crtc_atomic_disable(struct drm_crtc *crtc,
+					struct drm_crtc_state *old_state)
 {
 	struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
 
@@ -610,10 +611,10 @@ static void rcar_du_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs crtc_helper_funcs = {
-	.disable = rcar_du_crtc_disable,
 	.atomic_begin = rcar_du_crtc_atomic_begin,
 	.atomic_flush = rcar_du_crtc_atomic_flush,
 	.atomic_enable = rcar_du_crtc_atomic_enable,
+	.atomic_disable = rcar_du_crtc_atomic_disable,
 };
 
 static int rcar_du_crtc_enable_vblank(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index bb59f7410634..ee876a9631f0 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -563,7 +563,8 @@ static int vop_enable(struct drm_crtc *crtc)
 	return ret;
 }
 
-static void vop_crtc_disable(struct drm_crtc *crtc)
+static void vop_crtc_atomic_disable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
 {
 	struct vop *vop = to_vop(crtc);
 	int i;
@@ -1080,11 +1081,11 @@ static void vop_crtc_atomic_begin(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = {
-	.disable = vop_crtc_disable,
 	.mode_fixup = vop_crtc_mode_fixup,
 	.atomic_flush = vop_crtc_atomic_flush,
 	.atomic_begin = vop_crtc_atomic_begin,
 	.atomic_enable = vop_crtc_atomic_enable,
+	.atomic_disable = vop_crtc_atomic_disable,
 };
 
 static void vop_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/sti/sti_crtc.c b/drivers/gpu/drm/sti/sti_crtc.c
index bb864345fedf..e8a4d48e985a 100644
--- a/drivers/gpu/drm/sti/sti_crtc.c
+++ b/drivers/gpu/drm/sti/sti_crtc.c
@@ -32,7 +32,8 @@ static void sti_crtc_atomic_enable(struct drm_crtc *crtc,
 	drm_crtc_vblank_on(crtc);
 }
 
-static void sti_crtc_disabling(struct drm_crtc *crtc)
+static void sti_crtc_atomic_disable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
 {
 	struct sti_mixer *mixer = to_sti_mixer(crtc);
 
@@ -223,10 +224,10 @@ static void sti_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs sti_crtc_helper_funcs = {
-	.disable = sti_crtc_disabling,
 	.mode_set_nofb = sti_crtc_mode_set_nofb,
 	.atomic_flush = sti_crtc_atomic_flush,
 	.atomic_enable = sti_crtc_atomic_enable,
+	.atomic_disable = sti_crtc_atomic_disable,
 };
 
 static void sti_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
index 337fce004d08..533176015cbb 100644
--- a/drivers/gpu/drm/stm/ltdc.c
+++ b/drivers/gpu/drm/stm/ltdc.c
@@ -408,7 +408,8 @@ static void ltdc_crtc_atomic_enable(struct drm_crtc *crtc,
 	drm_crtc_vblank_on(crtc);
 }
 
-static void ltdc_crtc_disable(struct drm_crtc *crtc)
+static void ltdc_crtc_atomic_disable(struct drm_crtc *crtc,
+				     struct drm_crtc_state *old_state)
 {
 	struct ltdc_device *ldev = crtc_to_ltdc(crtc);
 
@@ -525,10 +526,10 @@ static void ltdc_crtc_atomic_flush(struct drm_crtc *crtc,
 
 static struct drm_crtc_helper_funcs ltdc_crtc_helper_funcs = {
 	.load_lut = ltdc_crtc_load_lut,
-	.disable = ltdc_crtc_disable,
 	.mode_set_nofb = ltdc_crtc_mode_set_nofb,
 	.atomic_flush = ltdc_crtc_atomic_flush,
 	.atomic_enable = ltdc_crtc_atomic_enable,
+	.atomic_disable = ltdc_crtc_atomic_disable,
 };
 
 int ltdc_crtc_enable_vblank(struct drm_device *ddev, unsigned int pipe)
diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
index 509e4d8014f3..d097c6f93ad0 100644
--- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
+++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
@@ -69,7 +69,8 @@ static void sun4i_crtc_atomic_flush(struct drm_crtc *crtc,
 	}
 }
 
-static void sun4i_crtc_disable(struct drm_crtc *crtc)
+static void sun4i_crtc_atomic_disable(struct drm_crtc *crtc,
+				      struct drm_crtc_state *old_state)
 {
 	struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
 
@@ -100,7 +101,7 @@ static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = {
 	.atomic_begin	= sun4i_crtc_atomic_begin,
 	.atomic_flush	= sun4i_crtc_atomic_flush,
 	.atomic_enable	= sun4i_crtc_atomic_enable,
-	.disable	= sun4i_crtc_disable,
+	.atomic_disable	= sun4i_crtc_atomic_disable,
 };
 
 static int sun4i_crtc_enable_vblank(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index 2e0d167cb657..0cb9b90e2e68 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -1199,7 +1199,8 @@ static int tegra_dc_wait_idle(struct tegra_dc *dc, unsigned long timeout)
 	return -ETIMEDOUT;
 }
 
-static void tegra_crtc_disable(struct drm_crtc *crtc)
+static void tegra_crtc_atomic_disable(struct drm_crtc *crtc,
+				      struct drm_crtc_state *old_state)
 {
 	struct tegra_dc *dc = to_tegra_dc(crtc);
 	u32 value;
@@ -1352,11 +1353,11 @@ static void tegra_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs tegra_crtc_helper_funcs = {
-	.disable = tegra_crtc_disable,
 	.atomic_check = tegra_crtc_atomic_check,
 	.atomic_begin = tegra_crtc_atomic_begin,
 	.atomic_flush = tegra_crtc_atomic_flush,
 	.atomic_enable = tegra_crtc_atomic_enable,
+	.atomic_disable = tegra_crtc_atomic_disable,
 };
 
 static irqreturn_t tegra_dc_irq(int irq, void *data)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 6c5892763d27..a43e720ab4e8 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -568,6 +568,12 @@ static void tilcdc_crtc_disable(struct drm_crtc *crtc)
 	tilcdc_crtc_off(crtc, false);
 }
 
+static void tilcdc_crtc_atomic_disable(struct drm_crtc *crtc,
+				       struct drm_crtc_state *old_state)
+{
+	tilcdc_crtc_disable(crtc);
+}
+
 void tilcdc_crtc_shutdown(struct drm_crtc *crtc)
 {
 	tilcdc_crtc_off(crtc, true);
@@ -735,9 +741,9 @@ static const struct drm_crtc_funcs tilcdc_crtc_funcs = {
 
 static const struct drm_crtc_helper_funcs tilcdc_crtc_helper_funcs = {
 		.mode_fixup     = tilcdc_crtc_mode_fixup,
-		.disable	= tilcdc_crtc_disable,
 		.atomic_check	= tilcdc_crtc_atomic_check,
 		.atomic_enable	= tilcdc_crtc_atomic_enable,
+		.atomic_disable	= tilcdc_crtc_atomic_disable,
 };
 
 int tilcdc_crtc_max_width(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index 4c03a565b276..9e0c1500375c 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -479,7 +479,8 @@ static void require_hvs_enabled(struct drm_device *dev)
 		     SCALER_DISPCTRL_ENABLE);
 }
 
-static void vc4_crtc_disable(struct drm_crtc *crtc)
+static void vc4_crtc_atomic_disable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
 {
 	struct drm_device *dev = crtc->dev;
 	struct vc4_dev *vc4 = to_vc4_dev(dev);
@@ -870,11 +871,11 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = {
 
 static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = {
 	.mode_set_nofb = vc4_crtc_mode_set_nofb,
-	.disable = vc4_crtc_disable,
 	.mode_valid = vc4_crtc_mode_valid,
 	.atomic_check = vc4_crtc_atomic_check,
 	.atomic_flush = vc4_crtc_atomic_flush,
 	.atomic_enable = vc4_crtc_atomic_enable,
+	.atomic_disable = vc4_crtc_atomic_disable,
 };
 
 static const struct vc4_crtc_data pv0_data = {
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index 03a3c12ed100..ffd22e5ab43a 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -118,7 +118,8 @@ static void virtio_gpu_crtc_atomic_enable(struct drm_crtc *crtc,
 {
 }
 
-static void virtio_gpu_crtc_disable(struct drm_crtc *crtc)
+static void virtio_gpu_crtc_atomic_disable(struct drm_crtc *crtc,
+					   struct drm_crtc_state *old_state)
 {
 	struct drm_device *dev = crtc->dev;
 	struct virtio_gpu_device *vgdev = dev->dev_private;
@@ -146,11 +147,11 @@ static void virtio_gpu_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = {
-	.disable       = virtio_gpu_crtc_disable,
 	.mode_set_nofb = virtio_gpu_crtc_mode_set_nofb,
 	.atomic_check  = virtio_gpu_crtc_atomic_check,
 	.atomic_flush  = virtio_gpu_crtc_atomic_flush,
 	.atomic_enable = virtio_gpu_crtc_atomic_enable,
+	.atomic_disable = virtio_gpu_crtc_atomic_disable,
 };
 
 static void virtio_gpu_enc_mode_set(struct drm_encoder *encoder,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index 832b83c582c2..6391069498d6 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
@@ -218,11 +218,12 @@ static void vmw_ldu_crtc_atomic_enable(struct drm_crtc *crtc,
 }
 
 /**
- * vmw_ldu_crtc_helper_disable - Turns off CRTC
+ * vmw_ldu_crtc_atomic_disable - Turns off CRTC
  *
  * @crtc: CRTC to be turned off
  */
-static void vmw_ldu_crtc_helper_disable(struct drm_crtc *crtc)
+static void vmw_ldu_crtc_atomic_disable(struct drm_crtc *crtc,
+					struct drm_crtc_state *old_state)
 {
 }
 
@@ -377,12 +378,12 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
-	.disable = vmw_ldu_crtc_helper_disable,
 	.mode_set_nofb = vmw_ldu_crtc_mode_set_nofb,
 	.atomic_check = vmw_du_crtc_atomic_check,
 	.atomic_begin = vmw_du_crtc_atomic_begin,
 	.atomic_flush = vmw_du_crtc_atomic_flush,
 	.atomic_enable = vmw_ldu_crtc_atomic_enable,
+	.atomic_disable = vmw_ldu_crtc_atomic_disable,
 };
 
 
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index 8ba3bad06909..854403509216 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -282,11 +282,12 @@ static void vmw_sou_crtc_atomic_enable(struct drm_crtc *crtc,
 }
 
 /**
- * vmw_sou_crtc_helper_disable - Turns off CRTC
+ * vmw_sou_crtc_atomic_disable - Turns off CRTC
  *
  * @crtc: CRTC to be turned off
  */
-static void vmw_sou_crtc_helper_disable(struct drm_crtc *crtc)
+static void vmw_sou_crtc_atomic_disable(struct drm_crtc *crtc,
+					struct drm_crtc_state *old_state)
 {
 	struct vmw_private *dev_priv;
 	struct vmw_screen_object_unit *sou;
@@ -574,12 +575,12 @@ drm_plane_helper_funcs vmw_sou_primary_plane_helper_funcs = {
 
 static const struct drm_crtc_helper_funcs vmw_sou_crtc_helper_funcs = {
 	.prepare = vmw_sou_crtc_helper_prepare,
-	.disable = vmw_sou_crtc_helper_disable,
 	.mode_set_nofb = vmw_sou_crtc_mode_set_nofb,
 	.atomic_check = vmw_du_crtc_atomic_check,
 	.atomic_begin = vmw_du_crtc_atomic_begin,
 	.atomic_flush = vmw_du_crtc_atomic_flush,
 	.atomic_enable = vmw_sou_crtc_atomic_enable,
+	.atomic_disable = vmw_sou_crtc_atomic_disable,
 };
 
 
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index f2b39d9c51cc..ed9404a7f457 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -433,7 +433,8 @@ static void vmw_stdu_crtc_atomic_enable(struct drm_crtc *crtc,
 		vmw_kms_del_active(dev_priv, &stdu->base);
 }
 
-static void vmw_stdu_crtc_helper_disable(struct drm_crtc *crtc)
+static void vmw_stdu_crtc_atomic_disable(struct drm_crtc *crtc,
+					 struct drm_crtc_state *old_state)
 {
 	struct vmw_private *dev_priv;
 	struct vmw_screen_target_display_unit *stdu;
@@ -1416,12 +1417,12 @@ drm_plane_helper_funcs vmw_stdu_primary_plane_helper_funcs = {
 
 static const struct drm_crtc_helper_funcs vmw_stdu_crtc_helper_funcs = {
 	.prepare = vmw_stdu_crtc_helper_prepare,
-	.disable = vmw_stdu_crtc_helper_disable,
 	.mode_set_nofb = vmw_stdu_crtc_mode_set_nofb,
 	.atomic_check = vmw_du_crtc_atomic_check,
 	.atomic_begin = vmw_du_crtc_atomic_begin,
 	.atomic_flush = vmw_du_crtc_atomic_flush,
 	.atomic_enable = vmw_stdu_crtc_atomic_enable,
+	.atomic_disable = vmw_stdu_crtc_atomic_disable,
 };
 
 
diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c
index ccb4b0bdb8c6..7491813131f3 100644
--- a/drivers/gpu/drm/zte/zx_vou.c
+++ b/drivers/gpu/drm/zte/zx_vou.c
@@ -455,7 +455,8 @@ static void zx_crtc_atomic_enable(struct drm_crtc *crtc,
 		DRM_DEV_ERROR(vou->dev, "failed to enable pixclk: %d\n", ret);
 }
 
-static void zx_crtc_disable(struct drm_crtc *crtc)
+static void zx_crtc_atomic_disable(struct drm_crtc *crtc,
+				   struct drm_crtc_state *old_state)
 {
 	struct zx_crtc *zcrtc = to_zx_crtc(crtc);
 	const struct zx_crtc_bits *bits = zcrtc->bits;
@@ -491,9 +492,9 @@ static void zx_crtc_atomic_flush(struct drm_crtc *crtc,
 }
 
 static const struct drm_crtc_helper_funcs zx_crtc_helper_funcs = {
-	.disable = zx_crtc_disable,
 	.atomic_flush = zx_crtc_atomic_flush,
 	.atomic_enable = zx_crtc_atomic_enable,
+	.atomic_disable = zx_crtc_atomic_disable,
 };
 
 static int zx_vou_enable_vblank(struct drm_crtc *crtc)
-- 
Regards,

Laurent Pinchart

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

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 3/3] drm: vmwgfx: Remove the legacy CRTC .prepare() helper operations
  2017-06-30  9:36 [PATCH v2 0/3] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
  2017-06-30  9:36 ` [PATCH v2 1/3] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
  2017-06-30  9:36 ` [PATCH v2 2/3] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
@ 2017-06-30  9:36 ` Laurent Pinchart
  2017-06-30 13:04   ` Thomas Hellstrom
  2 siblings, 1 reply; 8+ messages in thread
From: Laurent Pinchart @ 2017-06-30  9:36 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, Thomas Hellstrom, VMware Graphics

The CRTC .prepare() helper operation is legacy code, drivers should
use the .atomic_disable() operation instead.

When a CRTC is temporarily disabled prior to a mode set, the atomic
helpers call the .prepare() operation if provided instead of the
.atomic_disable() operation. In order to avoid modifying the driver's
behaviour that has an empty .prepare() implementation, we need to return
from the .atomic_disable() operation without performing any action if
the CRTC will be reenabled.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 15 +++------------
 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 10 +++-------
 2 files changed, 6 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index 854403509216..bdf6349de250 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -259,17 +259,6 @@ static void vmw_sou_crtc_mode_set_nofb(struct drm_crtc *crtc)
 }
 
 /**
- * vmw_sou_crtc_helper_prepare - Noop
- *
- * @crtc: CRTC associated with the new screen
- *
- * Prepares the CRTC for a mode set, but we don't need to do anything here.
- */
-static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
-{
-}
-
-/**
  * vmw_sou_crtc_atomic_enable - Noop
  *
  * @crtc: CRTC associated with the new screen
@@ -299,6 +288,9 @@ static void vmw_sou_crtc_atomic_disable(struct drm_crtc *crtc,
 		return;
 	}
 
+	if (crtc->state->enable)
+		return;
+
 	sou = vmw_crtc_to_sou(crtc);
 	dev_priv = vmw_priv(crtc->dev);
 
@@ -574,7 +566,6 @@ drm_plane_helper_funcs vmw_sou_primary_plane_helper_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs vmw_sou_crtc_helper_funcs = {
-	.prepare = vmw_sou_crtc_helper_prepare,
 	.mode_set_nofb = vmw_sou_crtc_mode_set_nofb,
 	.atomic_check = vmw_du_crtc_atomic_check,
 	.atomic_begin = vmw_du_crtc_atomic_begin,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index ed9404a7f457..c3bd4a012b64 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -406,12 +406,6 @@ static void vmw_stdu_crtc_mode_set_nofb(struct drm_crtc *crtc)
 			  crtc->x, crtc->y);
 }
 
-
-static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
-{
-}
-
-
 static void vmw_stdu_crtc_atomic_enable(struct drm_crtc *crtc,
 					struct drm_crtc_state *old_state)
 {
@@ -446,6 +440,9 @@ static void vmw_stdu_crtc_atomic_disable(struct drm_crtc *crtc,
 		return;
 	}
 
+	if (crtc->state->enable)
+		return;
+
 	stdu     = vmw_crtc_to_stdu(crtc);
 	dev_priv = vmw_priv(crtc->dev);
 
@@ -1416,7 +1413,6 @@ drm_plane_helper_funcs vmw_stdu_primary_plane_helper_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs vmw_stdu_crtc_helper_funcs = {
-	.prepare = vmw_stdu_crtc_helper_prepare,
 	.mode_set_nofb = vmw_stdu_crtc_mode_set_nofb,
 	.atomic_check = vmw_du_crtc_atomic_check,
 	.atomic_begin = vmw_du_crtc_atomic_begin,
-- 
Regards,

Laurent Pinchart

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

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/3] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-30  9:36 ` [PATCH v2 2/3] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
@ 2017-06-30 12:53   ` Daniel Vetter
  0 siblings, 0 replies; 8+ messages in thread
From: Daniel Vetter @ 2017-06-30 12:53 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Neil Armstrong, Liviu Dudau, dri-devel, Thierry Reding,
	Gerd Hoffmann, Daniel Vetter, Boris Brezillon, Thomas Hellstrom,
	Alexey Brodkin, Xinliang Liu, Xinwei Kong, Tomi Valkeinen,
	VMware Graphics, Mali DP Maintainers, Dave Airlie, Chen Feng,
	Jyri Sarha, Vincent Abriou, Seung-Woo Kim, Philippe Cornu,
	Yannick Fertre, Kyungmin Park

On Fri, Jun 30, 2017 at 12:36:45PM +0300, Laurent Pinchart wrote:
> The CRTC .disable() helper operation is deprecated for atomic drivers,
> the new .atomic_disable() helper operation being preferred. Convert all
> atomic drivers to .atomic_disable() to avoid cargo-cult use of
> .disable() in new drivers.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> # for sun4i
> Acked-by: Philipp Zabel <p.zabel@pengutronix.de> # for mediatek
> Acked-by: Alexey Brodkin <abrodkin@synopsys.com> # for arcpgu
> Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com> # for atmel-hlcdc
> Tested-by: Philippe Cornu <philippe.cornu@st.com> # for stm
> Acked-by: Philippe Cornu <philippe.cornu@st.com> # for stm
> Acked-by: Vincent Abriou <vincent.abriou@st.com> # for sti
> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com> # for vmwgfx

Patches 1&2 merged, I think they gathered sufficient acks :-)

I'll leave 3 for Thomas to pick up for 4.14 through the vmwgfx tree.

Thanks, Daniel
> ---
>  drivers/gpu/drm/arc/arcpgu_crtc.c               | 5 +++--
>  drivers/gpu/drm/arm/hdlcd_crtc.c                | 5 +++--
>  drivers/gpu/drm/arm/malidp_crtc.c               | 5 +++--
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c  | 5 +++--
>  drivers/gpu/drm/drm_simple_kms_helper.c         | 5 +++--
>  drivers/gpu/drm/exynos/exynos_drm_crtc.c        | 5 +++--
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c  | 5 +++--
>  drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 5 +++--
>  drivers/gpu/drm/mediatek/mtk_drm_crtc.c         | 5 +++--
>  drivers/gpu/drm/meson/meson_crtc.c              | 5 +++--
>  drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c        | 5 +++--
>  drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c        | 5 +++--
>  drivers/gpu/drm/omapdrm/omap_crtc.c             | 5 +++--
>  drivers/gpu/drm/qxl/qxl_display.c               | 5 +++--
>  drivers/gpu/drm/rcar-du/rcar_du_crtc.c          | 5 +++--
>  drivers/gpu/drm/rockchip/rockchip_drm_vop.c     | 5 +++--
>  drivers/gpu/drm/sti/sti_crtc.c                  | 5 +++--
>  drivers/gpu/drm/stm/ltdc.c                      | 5 +++--
>  drivers/gpu/drm/sun4i/sun4i_crtc.c              | 5 +++--
>  drivers/gpu/drm/tegra/dc.c                      | 5 +++--
>  drivers/gpu/drm/tilcdc/tilcdc_crtc.c            | 8 +++++++-
>  drivers/gpu/drm/vc4/vc4_crtc.c                  | 5 +++--
>  drivers/gpu/drm/virtio/virtgpu_display.c        | 5 +++--
>  drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c             | 7 ++++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c            | 7 ++++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c            | 5 +++--
>  drivers/gpu/drm/zte/zx_vou.c                    | 5 +++--
>  27 files changed, 87 insertions(+), 55 deletions(-)
> 
> diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
> index c9bc6a90ac83..1859dd3ad622 100644
> --- a/drivers/gpu/drm/arc/arcpgu_crtc.c
> +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
> @@ -130,7 +130,8 @@ static void arc_pgu_crtc_atomic_enable(struct drm_crtc *crtc,
>  		      ARCPGU_CTRL_ENABLE_MASK);
>  }
>  
> -static void arc_pgu_crtc_disable(struct drm_crtc *crtc)
> +static void arc_pgu_crtc_atomic_disable(struct drm_crtc *crtc,
> +					struct drm_crtc_state *old_state)
>  {
>  	struct arcpgu_drm_private *arcpgu = crtc_to_arcpgu_priv(crtc);
>  
> @@ -162,9 +163,9 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
>  	.mode_set	= drm_helper_crtc_mode_set,
>  	.mode_set_base	= drm_helper_crtc_mode_set_base,
>  	.mode_set_nofb	= arc_pgu_crtc_mode_set_nofb,
> -	.disable	= arc_pgu_crtc_disable,
>  	.atomic_begin	= arc_pgu_crtc_atomic_begin,
>  	.atomic_enable	= arc_pgu_crtc_atomic_enable,
> +	.atomic_disable	= arc_pgu_crtc_atomic_disable,
>  };
>  
>  static void arc_pgu_plane_atomic_update(struct drm_plane *plane,
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index 2b7f4f05d91f..16e1e20cf04c 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -176,7 +176,8 @@ static void hdlcd_crtc_atomic_enable(struct drm_crtc *crtc,
>  	drm_crtc_vblank_on(crtc);
>  }
>  
> -static void hdlcd_crtc_disable(struct drm_crtc *crtc)
> +static void hdlcd_crtc_atomic_disable(struct drm_crtc *crtc,
> +				      struct drm_crtc_state *old_state)
>  {
>  	struct hdlcd_drm_private *hdlcd = crtc_to_hdlcd_priv(crtc);
>  
> @@ -219,10 +220,10 @@ static void hdlcd_crtc_atomic_begin(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
> -	.disable	= hdlcd_crtc_disable,
>  	.atomic_check	= hdlcd_crtc_atomic_check,
>  	.atomic_begin	= hdlcd_crtc_atomic_begin,
>  	.atomic_enable	= hdlcd_crtc_atomic_enable,
> +	.atomic_disable	= hdlcd_crtc_atomic_disable,
>  };
>  
>  static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
> index 8e5b1c0181ab..3615d18a7ddf 100644
> --- a/drivers/gpu/drm/arm/malidp_crtc.c
> +++ b/drivers/gpu/drm/arm/malidp_crtc.c
> @@ -70,7 +70,8 @@ static void malidp_crtc_atomic_enable(struct drm_crtc *crtc,
>  	drm_crtc_vblank_on(crtc);
>  }
>  
> -static void malidp_crtc_disable(struct drm_crtc *crtc)
> +static void malidp_crtc_atomic_disable(struct drm_crtc *crtc,
> +				       struct drm_crtc_state *old_state)
>  {
>  	struct malidp_drm *malidp = crtc_to_malidp_device(crtc);
>  	struct malidp_hw_device *hwdev = malidp->dev;
> @@ -409,9 +410,9 @@ static int malidp_crtc_atomic_check(struct drm_crtc *crtc,
>  
>  static const struct drm_crtc_helper_funcs malidp_crtc_helper_funcs = {
>  	.mode_valid = malidp_crtc_mode_valid,
> -	.disable = malidp_crtc_disable,
>  	.atomic_check = malidp_crtc_atomic_check,
>  	.atomic_enable = malidp_crtc_atomic_enable,
> +	.atomic_disable = malidp_crtc_atomic_disable,
>  };
>  
>  static struct drm_crtc_state *malidp_crtc_duplicate_state(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> index e54e503180f4..441769c5bcd4 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> @@ -149,7 +149,8 @@ atmel_hlcdc_crtc_mode_valid(struct drm_crtc *c,
>  	return atmel_hlcdc_dc_mode_valid(crtc->dc, mode);
>  }
>  
> -static void atmel_hlcdc_crtc_disable(struct drm_crtc *c)
> +static void atmel_hlcdc_crtc_atomic_disable(struct drm_crtc *c,
> +					    struct drm_crtc_state *old_state)
>  {
>  	struct drm_device *dev = c->dev;
>  	struct atmel_hlcdc_crtc *crtc = drm_crtc_to_atmel_hlcdc_crtc(c);
> @@ -320,11 +321,11 @@ static const struct drm_crtc_helper_funcs lcdc_crtc_helper_funcs = {
>  	.mode_set = drm_helper_crtc_mode_set,
>  	.mode_set_nofb = atmel_hlcdc_crtc_mode_set_nofb,
>  	.mode_set_base = drm_helper_crtc_mode_set_base,
> -	.disable = atmel_hlcdc_crtc_disable,
>  	.atomic_check = atmel_hlcdc_crtc_atomic_check,
>  	.atomic_begin = atmel_hlcdc_crtc_atomic_begin,
>  	.atomic_flush = atmel_hlcdc_crtc_atomic_flush,
>  	.atomic_enable = atmel_hlcdc_crtc_atomic_enable,
> +	.atomic_disable = atmel_hlcdc_crtc_atomic_disable,
>  };
>  
>  static void atmel_hlcdc_crtc_destroy(struct drm_crtc *c)
> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> index 58c27ab1756f..98250854af75 100644
> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> @@ -52,7 +52,8 @@ static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc,
>  	pipe->funcs->enable(pipe, crtc->state);
>  }
>  
> -static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc)
> +static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc,
> +					struct drm_crtc_state *old_state)
>  {
>  	struct drm_simple_display_pipe *pipe;
>  
> @@ -66,7 +67,7 @@ static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc)
>  static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = {
>  	.atomic_check = drm_simple_kms_crtc_check,
>  	.atomic_enable = drm_simple_kms_crtc_enable,
> -	.disable = drm_simple_kms_crtc_disable,
> +	.atomic_disable = drm_simple_kms_crtc_disable,
>  };
>  
>  static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> index b7e2fadb6442..c37078fbe0ea 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> @@ -32,7 +32,8 @@ static void exynos_drm_crtc_atomic_enable(struct drm_crtc *crtc,
>  	drm_crtc_vblank_on(crtc);
>  }
>  
> -static void exynos_drm_crtc_disable(struct drm_crtc *crtc)
> +static void exynos_drm_crtc_atomic_disable(struct drm_crtc *crtc,
> +					   struct drm_crtc_state *old_state)
>  {
>  	struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
>  
> @@ -83,11 +84,11 @@ static void exynos_crtc_atomic_flush(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
> -	.disable	= exynos_drm_crtc_disable,
>  	.atomic_check	= exynos_crtc_atomic_check,
>  	.atomic_begin	= exynos_crtc_atomic_begin,
>  	.atomic_flush	= exynos_crtc_atomic_flush,
>  	.atomic_enable	= exynos_drm_crtc_atomic_enable,
> +	.atomic_disable	= exynos_drm_crtc_atomic_disable,
>  };
>  
>  void exynos_crtc_handle_event(struct exynos_drm_crtc *exynos_crtc)
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> index 49ef47c0c81a..54a4542a40f1 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> @@ -210,7 +210,8 @@ static void hibmc_crtc_atomic_enable(struct drm_crtc *crtc,
>  	drm_crtc_vblank_on(crtc);
>  }
>  
> -static void hibmc_crtc_disable(struct drm_crtc *crtc)
> +static void hibmc_crtc_atomic_disable(struct drm_crtc *crtc,
> +				      struct drm_crtc_state *old_state)
>  {
>  	unsigned int reg;
>  	struct hibmc_drm_private *priv = crtc->dev->dev_private;
> @@ -454,11 +455,11 @@ static const struct drm_crtc_funcs hibmc_crtc_funcs = {
>  };
>  
>  static const struct drm_crtc_helper_funcs hibmc_crtc_helper_funcs = {
> -	.disable	= hibmc_crtc_disable,
>  	.mode_set_nofb	= hibmc_crtc_mode_set_nofb,
>  	.atomic_begin	= hibmc_crtc_atomic_begin,
>  	.atomic_flush	= hibmc_crtc_atomic_flush,
>  	.atomic_enable	= hibmc_crtc_atomic_enable,
> +	.atomic_disable	= hibmc_crtc_atomic_disable,
>  };
>  
>  int hibmc_de_init(struct hibmc_drm_private *priv)
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index 8e00818b24fc..7e3abbf4ef73 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -490,7 +490,8 @@ static void ade_crtc_atomic_enable(struct drm_crtc *crtc,
>  	acrtc->enable = true;
>  }
>  
> -static void ade_crtc_disable(struct drm_crtc *crtc)
> +static void ade_crtc_atomic_disable(struct drm_crtc *crtc,
> +				    struct drm_crtc_state *old_state)
>  {
>  	struct ade_crtc *acrtc = to_ade_crtc(crtc);
>  	struct ade_hw_ctx *ctx = acrtc->ctx;
> @@ -554,11 +555,11 @@ static void ade_crtc_atomic_flush(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs ade_crtc_helper_funcs = {
> -	.disable	= ade_crtc_disable,
>  	.mode_set_nofb	= ade_crtc_mode_set_nofb,
>  	.atomic_begin	= ade_crtc_atomic_begin,
>  	.atomic_flush	= ade_crtc_atomic_flush,
>  	.atomic_enable	= ade_crtc_atomic_enable,
> +	.atomic_disable	= ade_crtc_atomic_disable,
>  };
>  
>  static const struct drm_crtc_funcs ade_crtc_funcs = {
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> index 5971b0827d1b..fc65c57dda8c 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> @@ -391,7 +391,8 @@ static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc,
>  	mtk_crtc->enabled = true;
>  }
>  
> -static void mtk_drm_crtc_disable(struct drm_crtc *crtc)
> +static void mtk_drm_crtc_atomic_disable(struct drm_crtc *crtc,
> +					struct drm_crtc_state *old_state)
>  {
>  	struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
>  	struct mtk_ddp_comp *ovl = mtk_crtc->ddp_comp[0];
> @@ -488,10 +489,10 @@ static const struct drm_crtc_funcs mtk_crtc_funcs = {
>  static const struct drm_crtc_helper_funcs mtk_crtc_helper_funcs = {
>  	.mode_fixup	= mtk_drm_crtc_mode_fixup,
>  	.mode_set_nofb	= mtk_drm_crtc_mode_set_nofb,
> -	.disable	= mtk_drm_crtc_disable,
>  	.atomic_begin	= mtk_drm_crtc_atomic_begin,
>  	.atomic_flush	= mtk_drm_crtc_atomic_flush,
>  	.atomic_enable	= mtk_drm_crtc_atomic_enable,
> +	.atomic_disable	= mtk_drm_crtc_atomic_disable,
>  };
>  
>  static int mtk_drm_crtc_init(struct drm_device *drm,
> diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c
> index 6f148307b0e0..5155f0179b61 100644
> --- a/drivers/gpu/drm/meson/meson_crtc.c
> +++ b/drivers/gpu/drm/meson/meson_crtc.c
> @@ -103,7 +103,8 @@ static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
>  	priv->viu.osd1_enabled = true;
>  }
>  
> -static void meson_crtc_disable(struct drm_crtc *crtc)
> +static void meson_crtc_atomic_disable(struct drm_crtc *crtc,
> +				      struct drm_crtc_state *old_state)
>  {
>  	struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
>  	struct meson_drm *priv = meson_crtc->priv;
> @@ -150,10 +151,10 @@ static void meson_crtc_atomic_flush(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs meson_crtc_helper_funcs = {
> -	.disable	= meson_crtc_disable,
>  	.atomic_begin	= meson_crtc_atomic_begin,
>  	.atomic_flush	= meson_crtc_atomic_flush,
>  	.atomic_enable	= meson_crtc_atomic_enable,
> +	.atomic_disable	= meson_crtc_atomic_disable,
>  };
>  
>  void meson_crtc_irq(struct meson_drm *priv)
> diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
> index 9c20133f3f8d..3c7a9d343e05 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
> @@ -279,7 +279,8 @@ static void mdp4_crtc_mode_set_nofb(struct drm_crtc *crtc)
>  	}
>  }
>  
> -static void mdp4_crtc_disable(struct drm_crtc *crtc)
> +static void mdp4_crtc_atomic_disable(struct drm_crtc *crtc,
> +				     struct drm_crtc_state *old_state)
>  {
>  	struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
>  	struct mdp4_kms *mdp4_kms = get_kms(crtc);
> @@ -493,11 +494,11 @@ static const struct drm_crtc_funcs mdp4_crtc_funcs = {
>  
>  static const struct drm_crtc_helper_funcs mdp4_crtc_helper_funcs = {
>  	.mode_set_nofb = mdp4_crtc_mode_set_nofb,
> -	.disable = mdp4_crtc_disable,
>  	.atomic_check = mdp4_crtc_atomic_check,
>  	.atomic_begin = mdp4_crtc_atomic_begin,
>  	.atomic_flush = mdp4_crtc_atomic_flush,
>  	.atomic_enable = mdp4_crtc_atomic_enable,
> +	.atomic_disable = mdp4_crtc_atomic_disable,
>  };
>  
>  static void mdp4_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus)
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
> index d39d9d24d169..4322a502555a 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
> @@ -409,7 +409,8 @@ static void mdp5_crtc_mode_set_nofb(struct drm_crtc *crtc)
>  	spin_unlock_irqrestore(&mdp5_crtc->lm_lock, flags);
>  }
>  
> -static void mdp5_crtc_disable(struct drm_crtc *crtc)
> +static void mdp5_crtc_atomic_disable(struct drm_crtc *crtc,
> +				     struct drm_crtc_state *old_state)
>  {
>  	struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
>  	struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state);
> @@ -940,11 +941,11 @@ static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = {
>  
>  static const struct drm_crtc_helper_funcs mdp5_crtc_helper_funcs = {
>  	.mode_set_nofb = mdp5_crtc_mode_set_nofb,
> -	.disable = mdp5_crtc_disable,
>  	.atomic_check = mdp5_crtc_atomic_check,
>  	.atomic_begin = mdp5_crtc_atomic_begin,
>  	.atomic_flush = mdp5_crtc_atomic_flush,
>  	.atomic_enable = mdp5_crtc_atomic_enable,
> +	.atomic_disable = mdp5_crtc_atomic_disable,
>  };
>  
>  static void mdp5_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus)
> diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
> index 7a1b7a9cc270..14e8a7738b06 100644
> --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
> +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
> @@ -373,7 +373,8 @@ static void omap_crtc_atomic_enable(struct drm_crtc *crtc,
>  	spin_unlock_irq(&crtc->dev->event_lock);
>  }
>  
> -static void omap_crtc_disable(struct drm_crtc *crtc)
> +static void omap_crtc_atomic_disable(struct drm_crtc *crtc,
> +				     struct drm_crtc_state *old_state)
>  {
>  	struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
>  
> @@ -568,11 +569,11 @@ static const struct drm_crtc_funcs omap_crtc_funcs = {
>  
>  static const struct drm_crtc_helper_funcs omap_crtc_helper_funcs = {
>  	.mode_set_nofb = omap_crtc_mode_set_nofb,
> -	.disable = omap_crtc_disable,
>  	.atomic_check = omap_crtc_atomic_check,
>  	.atomic_begin = omap_crtc_atomic_begin,
>  	.atomic_flush = omap_crtc_atomic_flush,
>  	.atomic_enable = omap_crtc_atomic_enable,
> +	.atomic_disable = omap_crtc_atomic_disable,
>  };
>  
>  /* -----------------------------------------------------------------------------
> diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
> index ea95e7e7cc7f..5eeae89c138d 100644
> --- a/drivers/gpu/drm/qxl/qxl_display.c
> +++ b/drivers/gpu/drm/qxl/qxl_display.c
> @@ -453,7 +453,8 @@ static void qxl_crtc_atomic_enable(struct drm_crtc *crtc,
>  	DRM_DEBUG("\n");
>  }
>  
> -static void qxl_crtc_disable(struct drm_crtc *crtc)
> +static void qxl_crtc_atomic_disable(struct drm_crtc *crtc,
> +				    struct drm_crtc_state *old_state)
>  {
>  	struct qxl_crtc *qcrtc = to_qxl_crtc(crtc);
>  	struct qxl_device *qdev = crtc->dev->dev_private;
> @@ -464,11 +465,11 @@ static void qxl_crtc_disable(struct drm_crtc *crtc)
>  }
>  
>  static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = {
> -	.disable = qxl_crtc_disable,
>  	.mode_fixup = qxl_crtc_mode_fixup,
>  	.mode_set_nofb = qxl_mode_set_nofb,
>  	.atomic_flush = qxl_crtc_atomic_flush,
>  	.atomic_enable = qxl_crtc_atomic_enable,
> +	.atomic_disable = qxl_crtc_atomic_disable,
>  };
>  
>  static int qxl_primary_atomic_check(struct drm_plane *plane,
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> index 6aa3fa8d06f9..f131fc68cc46 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> @@ -561,7 +561,8 @@ static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc,
>  	rcar_du_crtc_start(rcrtc);
>  }
>  
> -static void rcar_du_crtc_disable(struct drm_crtc *crtc)
> +static void rcar_du_crtc_atomic_disable(struct drm_crtc *crtc,
> +					struct drm_crtc_state *old_state)
>  {
>  	struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
>  
> @@ -610,10 +611,10 @@ static void rcar_du_crtc_atomic_flush(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs crtc_helper_funcs = {
> -	.disable = rcar_du_crtc_disable,
>  	.atomic_begin = rcar_du_crtc_atomic_begin,
>  	.atomic_flush = rcar_du_crtc_atomic_flush,
>  	.atomic_enable = rcar_du_crtc_atomic_enable,
> +	.atomic_disable = rcar_du_crtc_atomic_disable,
>  };
>  
>  static int rcar_du_crtc_enable_vblank(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index bb59f7410634..ee876a9631f0 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -563,7 +563,8 @@ static int vop_enable(struct drm_crtc *crtc)
>  	return ret;
>  }
>  
> -static void vop_crtc_disable(struct drm_crtc *crtc)
> +static void vop_crtc_atomic_disable(struct drm_crtc *crtc,
> +				    struct drm_crtc_state *old_state)
>  {
>  	struct vop *vop = to_vop(crtc);
>  	int i;
> @@ -1080,11 +1081,11 @@ static void vop_crtc_atomic_begin(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = {
> -	.disable = vop_crtc_disable,
>  	.mode_fixup = vop_crtc_mode_fixup,
>  	.atomic_flush = vop_crtc_atomic_flush,
>  	.atomic_begin = vop_crtc_atomic_begin,
>  	.atomic_enable = vop_crtc_atomic_enable,
> +	.atomic_disable = vop_crtc_atomic_disable,
>  };
>  
>  static void vop_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/sti/sti_crtc.c b/drivers/gpu/drm/sti/sti_crtc.c
> index bb864345fedf..e8a4d48e985a 100644
> --- a/drivers/gpu/drm/sti/sti_crtc.c
> +++ b/drivers/gpu/drm/sti/sti_crtc.c
> @@ -32,7 +32,8 @@ static void sti_crtc_atomic_enable(struct drm_crtc *crtc,
>  	drm_crtc_vblank_on(crtc);
>  }
>  
> -static void sti_crtc_disabling(struct drm_crtc *crtc)
> +static void sti_crtc_atomic_disable(struct drm_crtc *crtc,
> +				    struct drm_crtc_state *old_state)
>  {
>  	struct sti_mixer *mixer = to_sti_mixer(crtc);
>  
> @@ -223,10 +224,10 @@ static void sti_crtc_atomic_flush(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs sti_crtc_helper_funcs = {
> -	.disable = sti_crtc_disabling,
>  	.mode_set_nofb = sti_crtc_mode_set_nofb,
>  	.atomic_flush = sti_crtc_atomic_flush,
>  	.atomic_enable = sti_crtc_atomic_enable,
> +	.atomic_disable = sti_crtc_atomic_disable,
>  };
>  
>  static void sti_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> index 337fce004d08..533176015cbb 100644
> --- a/drivers/gpu/drm/stm/ltdc.c
> +++ b/drivers/gpu/drm/stm/ltdc.c
> @@ -408,7 +408,8 @@ static void ltdc_crtc_atomic_enable(struct drm_crtc *crtc,
>  	drm_crtc_vblank_on(crtc);
>  }
>  
> -static void ltdc_crtc_disable(struct drm_crtc *crtc)
> +static void ltdc_crtc_atomic_disable(struct drm_crtc *crtc,
> +				     struct drm_crtc_state *old_state)
>  {
>  	struct ltdc_device *ldev = crtc_to_ltdc(crtc);
>  
> @@ -525,10 +526,10 @@ static void ltdc_crtc_atomic_flush(struct drm_crtc *crtc,
>  
>  static struct drm_crtc_helper_funcs ltdc_crtc_helper_funcs = {
>  	.load_lut = ltdc_crtc_load_lut,
> -	.disable = ltdc_crtc_disable,
>  	.mode_set_nofb = ltdc_crtc_mode_set_nofb,
>  	.atomic_flush = ltdc_crtc_atomic_flush,
>  	.atomic_enable = ltdc_crtc_atomic_enable,
> +	.atomic_disable = ltdc_crtc_atomic_disable,
>  };
>  
>  int ltdc_crtc_enable_vblank(struct drm_device *ddev, unsigned int pipe)
> diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> index 509e4d8014f3..d097c6f93ad0 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> @@ -69,7 +69,8 @@ static void sun4i_crtc_atomic_flush(struct drm_crtc *crtc,
>  	}
>  }
>  
> -static void sun4i_crtc_disable(struct drm_crtc *crtc)
> +static void sun4i_crtc_atomic_disable(struct drm_crtc *crtc,
> +				      struct drm_crtc_state *old_state)
>  {
>  	struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
>  
> @@ -100,7 +101,7 @@ static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = {
>  	.atomic_begin	= sun4i_crtc_atomic_begin,
>  	.atomic_flush	= sun4i_crtc_atomic_flush,
>  	.atomic_enable	= sun4i_crtc_atomic_enable,
> -	.disable	= sun4i_crtc_disable,
> +	.atomic_disable	= sun4i_crtc_atomic_disable,
>  };
>  
>  static int sun4i_crtc_enable_vblank(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
> index 2e0d167cb657..0cb9b90e2e68 100644
> --- a/drivers/gpu/drm/tegra/dc.c
> +++ b/drivers/gpu/drm/tegra/dc.c
> @@ -1199,7 +1199,8 @@ static int tegra_dc_wait_idle(struct tegra_dc *dc, unsigned long timeout)
>  	return -ETIMEDOUT;
>  }
>  
> -static void tegra_crtc_disable(struct drm_crtc *crtc)
> +static void tegra_crtc_atomic_disable(struct drm_crtc *crtc,
> +				      struct drm_crtc_state *old_state)
>  {
>  	struct tegra_dc *dc = to_tegra_dc(crtc);
>  	u32 value;
> @@ -1352,11 +1353,11 @@ static void tegra_crtc_atomic_flush(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs tegra_crtc_helper_funcs = {
> -	.disable = tegra_crtc_disable,
>  	.atomic_check = tegra_crtc_atomic_check,
>  	.atomic_begin = tegra_crtc_atomic_begin,
>  	.atomic_flush = tegra_crtc_atomic_flush,
>  	.atomic_enable = tegra_crtc_atomic_enable,
> +	.atomic_disable = tegra_crtc_atomic_disable,
>  };
>  
>  static irqreturn_t tegra_dc_irq(int irq, void *data)
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> index 6c5892763d27..a43e720ab4e8 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> @@ -568,6 +568,12 @@ static void tilcdc_crtc_disable(struct drm_crtc *crtc)
>  	tilcdc_crtc_off(crtc, false);
>  }
>  
> +static void tilcdc_crtc_atomic_disable(struct drm_crtc *crtc,
> +				       struct drm_crtc_state *old_state)
> +{
> +	tilcdc_crtc_disable(crtc);
> +}
> +
>  void tilcdc_crtc_shutdown(struct drm_crtc *crtc)
>  {
>  	tilcdc_crtc_off(crtc, true);
> @@ -735,9 +741,9 @@ static const struct drm_crtc_funcs tilcdc_crtc_funcs = {
>  
>  static const struct drm_crtc_helper_funcs tilcdc_crtc_helper_funcs = {
>  		.mode_fixup     = tilcdc_crtc_mode_fixup,
> -		.disable	= tilcdc_crtc_disable,
>  		.atomic_check	= tilcdc_crtc_atomic_check,
>  		.atomic_enable	= tilcdc_crtc_atomic_enable,
> +		.atomic_disable	= tilcdc_crtc_atomic_disable,
>  };
>  
>  int tilcdc_crtc_max_width(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> index 4c03a565b276..9e0c1500375c 100644
> --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> @@ -479,7 +479,8 @@ static void require_hvs_enabled(struct drm_device *dev)
>  		     SCALER_DISPCTRL_ENABLE);
>  }
>  
> -static void vc4_crtc_disable(struct drm_crtc *crtc)
> +static void vc4_crtc_atomic_disable(struct drm_crtc *crtc,
> +				    struct drm_crtc_state *old_state)
>  {
>  	struct drm_device *dev = crtc->dev;
>  	struct vc4_dev *vc4 = to_vc4_dev(dev);
> @@ -870,11 +871,11 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = {
>  
>  static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = {
>  	.mode_set_nofb = vc4_crtc_mode_set_nofb,
> -	.disable = vc4_crtc_disable,
>  	.mode_valid = vc4_crtc_mode_valid,
>  	.atomic_check = vc4_crtc_atomic_check,
>  	.atomic_flush = vc4_crtc_atomic_flush,
>  	.atomic_enable = vc4_crtc_atomic_enable,
> +	.atomic_disable = vc4_crtc_atomic_disable,
>  };
>  
>  static const struct vc4_crtc_data pv0_data = {
> diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
> index 03a3c12ed100..ffd22e5ab43a 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_display.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_display.c
> @@ -118,7 +118,8 @@ static void virtio_gpu_crtc_atomic_enable(struct drm_crtc *crtc,
>  {
>  }
>  
> -static void virtio_gpu_crtc_disable(struct drm_crtc *crtc)
> +static void virtio_gpu_crtc_atomic_disable(struct drm_crtc *crtc,
> +					   struct drm_crtc_state *old_state)
>  {
>  	struct drm_device *dev = crtc->dev;
>  	struct virtio_gpu_device *vgdev = dev->dev_private;
> @@ -146,11 +147,11 @@ static void virtio_gpu_crtc_atomic_flush(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = {
> -	.disable       = virtio_gpu_crtc_disable,
>  	.mode_set_nofb = virtio_gpu_crtc_mode_set_nofb,
>  	.atomic_check  = virtio_gpu_crtc_atomic_check,
>  	.atomic_flush  = virtio_gpu_crtc_atomic_flush,
>  	.atomic_enable = virtio_gpu_crtc_atomic_enable,
> +	.atomic_disable = virtio_gpu_crtc_atomic_disable,
>  };
>  
>  static void virtio_gpu_enc_mode_set(struct drm_encoder *encoder,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> index 832b83c582c2..6391069498d6 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> @@ -218,11 +218,12 @@ static void vmw_ldu_crtc_atomic_enable(struct drm_crtc *crtc,
>  }
>  
>  /**
> - * vmw_ldu_crtc_helper_disable - Turns off CRTC
> + * vmw_ldu_crtc_atomic_disable - Turns off CRTC
>   *
>   * @crtc: CRTC to be turned off
>   */
> -static void vmw_ldu_crtc_helper_disable(struct drm_crtc *crtc)
> +static void vmw_ldu_crtc_atomic_disable(struct drm_crtc *crtc,
> +					struct drm_crtc_state *old_state)
>  {
>  }
>  
> @@ -377,12 +378,12 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
>  };
>  
>  static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
> -	.disable = vmw_ldu_crtc_helper_disable,
>  	.mode_set_nofb = vmw_ldu_crtc_mode_set_nofb,
>  	.atomic_check = vmw_du_crtc_atomic_check,
>  	.atomic_begin = vmw_du_crtc_atomic_begin,
>  	.atomic_flush = vmw_du_crtc_atomic_flush,
>  	.atomic_enable = vmw_ldu_crtc_atomic_enable,
> +	.atomic_disable = vmw_ldu_crtc_atomic_disable,
>  };
>  
>  
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> index 8ba3bad06909..854403509216 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> @@ -282,11 +282,12 @@ static void vmw_sou_crtc_atomic_enable(struct drm_crtc *crtc,
>  }
>  
>  /**
> - * vmw_sou_crtc_helper_disable - Turns off CRTC
> + * vmw_sou_crtc_atomic_disable - Turns off CRTC
>   *
>   * @crtc: CRTC to be turned off
>   */
> -static void vmw_sou_crtc_helper_disable(struct drm_crtc *crtc)
> +static void vmw_sou_crtc_atomic_disable(struct drm_crtc *crtc,
> +					struct drm_crtc_state *old_state)
>  {
>  	struct vmw_private *dev_priv;
>  	struct vmw_screen_object_unit *sou;
> @@ -574,12 +575,12 @@ drm_plane_helper_funcs vmw_sou_primary_plane_helper_funcs = {
>  
>  static const struct drm_crtc_helper_funcs vmw_sou_crtc_helper_funcs = {
>  	.prepare = vmw_sou_crtc_helper_prepare,
> -	.disable = vmw_sou_crtc_helper_disable,
>  	.mode_set_nofb = vmw_sou_crtc_mode_set_nofb,
>  	.atomic_check = vmw_du_crtc_atomic_check,
>  	.atomic_begin = vmw_du_crtc_atomic_begin,
>  	.atomic_flush = vmw_du_crtc_atomic_flush,
>  	.atomic_enable = vmw_sou_crtc_atomic_enable,
> +	.atomic_disable = vmw_sou_crtc_atomic_disable,
>  };
>  
>  
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> index f2b39d9c51cc..ed9404a7f457 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> @@ -433,7 +433,8 @@ static void vmw_stdu_crtc_atomic_enable(struct drm_crtc *crtc,
>  		vmw_kms_del_active(dev_priv, &stdu->base);
>  }
>  
> -static void vmw_stdu_crtc_helper_disable(struct drm_crtc *crtc)
> +static void vmw_stdu_crtc_atomic_disable(struct drm_crtc *crtc,
> +					 struct drm_crtc_state *old_state)
>  {
>  	struct vmw_private *dev_priv;
>  	struct vmw_screen_target_display_unit *stdu;
> @@ -1416,12 +1417,12 @@ drm_plane_helper_funcs vmw_stdu_primary_plane_helper_funcs = {
>  
>  static const struct drm_crtc_helper_funcs vmw_stdu_crtc_helper_funcs = {
>  	.prepare = vmw_stdu_crtc_helper_prepare,
> -	.disable = vmw_stdu_crtc_helper_disable,
>  	.mode_set_nofb = vmw_stdu_crtc_mode_set_nofb,
>  	.atomic_check = vmw_du_crtc_atomic_check,
>  	.atomic_begin = vmw_du_crtc_atomic_begin,
>  	.atomic_flush = vmw_du_crtc_atomic_flush,
>  	.atomic_enable = vmw_stdu_crtc_atomic_enable,
> +	.atomic_disable = vmw_stdu_crtc_atomic_disable,
>  };
>  
>  
> diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c
> index ccb4b0bdb8c6..7491813131f3 100644
> --- a/drivers/gpu/drm/zte/zx_vou.c
> +++ b/drivers/gpu/drm/zte/zx_vou.c
> @@ -455,7 +455,8 @@ static void zx_crtc_atomic_enable(struct drm_crtc *crtc,
>  		DRM_DEV_ERROR(vou->dev, "failed to enable pixclk: %d\n", ret);
>  }
>  
> -static void zx_crtc_disable(struct drm_crtc *crtc)
> +static void zx_crtc_atomic_disable(struct drm_crtc *crtc,
> +				   struct drm_crtc_state *old_state)
>  {
>  	struct zx_crtc *zcrtc = to_zx_crtc(crtc);
>  	const struct zx_crtc_bits *bits = zcrtc->bits;
> @@ -491,9 +492,9 @@ static void zx_crtc_atomic_flush(struct drm_crtc *crtc,
>  }
>  
>  static const struct drm_crtc_helper_funcs zx_crtc_helper_funcs = {
> -	.disable = zx_crtc_disable,
>  	.atomic_flush = zx_crtc_atomic_flush,
>  	.atomic_enable = zx_crtc_atomic_enable,
> +	.atomic_disable = zx_crtc_atomic_disable,
>  };
>  
>  static int zx_vou_enable_vblank(struct drm_crtc *crtc)
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 3/3] drm: vmwgfx: Remove the legacy CRTC .prepare() helper operations
  2017-06-30  9:36 ` [PATCH v2 3/3] drm: vmwgfx: Remove the legacy CRTC .prepare() helper operations Laurent Pinchart
@ 2017-06-30 13:04   ` Thomas Hellstrom
  2017-06-30 13:39     ` Daniel Vetter
  0 siblings, 1 reply; 8+ messages in thread
From: Thomas Hellstrom @ 2017-06-30 13:04 UTC (permalink / raw)
  To: Laurent Pinchart, dri-devel; +Cc: Daniel Vetter, VMware Graphics

Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>


On 06/30/2017 11:36 AM, Laurent Pinchart wrote:
> The CRTC .prepare() helper operation is legacy code, drivers should
> use the .atomic_disable() operation instead.
>
> When a CRTC is temporarily disabled prior to a mode set, the atomic
> helpers call the .prepare() operation if provided instead of the
> .atomic_disable() operation. In order to avoid modifying the driver's
> behaviour that has an empty .prepare() implementation, we need to return
> from the .atomic_disable() operation without performing any action if
> the CRTC will be reenabled.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> ---
>   drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 15 +++------------
>   drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 10 +++-------
>   2 files changed, 6 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> index 854403509216..bdf6349de250 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> @@ -259,17 +259,6 @@ static void vmw_sou_crtc_mode_set_nofb(struct drm_crtc *crtc)
>   }
>   
>   /**
> - * vmw_sou_crtc_helper_prepare - Noop
> - *
> - * @crtc: CRTC associated with the new screen
> - *
> - * Prepares the CRTC for a mode set, but we don't need to do anything here.
> - */
> -static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
> -{
> -}
> -
> -/**
>    * vmw_sou_crtc_atomic_enable - Noop
>    *
>    * @crtc: CRTC associated with the new screen
> @@ -299,6 +288,9 @@ static void vmw_sou_crtc_atomic_disable(struct drm_crtc *crtc,
>   		return;
>   	}
>   
> +	if (crtc->state->enable)
> +		return;
> +
>   	sou = vmw_crtc_to_sou(crtc);
>   	dev_priv = vmw_priv(crtc->dev);
>   
> @@ -574,7 +566,6 @@ drm_plane_helper_funcs vmw_sou_primary_plane_helper_funcs = {
>   };
>   
>   static const struct drm_crtc_helper_funcs vmw_sou_crtc_helper_funcs = {
> -	.prepare = vmw_sou_crtc_helper_prepare,
>   	.mode_set_nofb = vmw_sou_crtc_mode_set_nofb,
>   	.atomic_check = vmw_du_crtc_atomic_check,
>   	.atomic_begin = vmw_du_crtc_atomic_begin,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> index ed9404a7f457..c3bd4a012b64 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> @@ -406,12 +406,6 @@ static void vmw_stdu_crtc_mode_set_nofb(struct drm_crtc *crtc)
>   			  crtc->x, crtc->y);
>   }
>   
> -
> -static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
> -{
> -}
> -
> -
>   static void vmw_stdu_crtc_atomic_enable(struct drm_crtc *crtc,
>   					struct drm_crtc_state *old_state)
>   {
> @@ -446,6 +440,9 @@ static void vmw_stdu_crtc_atomic_disable(struct drm_crtc *crtc,
>   		return;
>   	}
>   
> +	if (crtc->state->enable)
> +		return;
> +
>   	stdu     = vmw_crtc_to_stdu(crtc);
>   	dev_priv = vmw_priv(crtc->dev);
>   
> @@ -1416,7 +1413,6 @@ drm_plane_helper_funcs vmw_stdu_primary_plane_helper_funcs = {
>   };
>   
>   static const struct drm_crtc_helper_funcs vmw_stdu_crtc_helper_funcs = {
> -	.prepare = vmw_stdu_crtc_helper_prepare,
>   	.mode_set_nofb = vmw_stdu_crtc_mode_set_nofb,
>   	.atomic_check = vmw_du_crtc_atomic_check,
>   	.atomic_begin = vmw_du_crtc_atomic_begin,


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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 3/3] drm: vmwgfx: Remove the legacy CRTC .prepare() helper operations
  2017-06-30 13:04   ` Thomas Hellstrom
@ 2017-06-30 13:39     ` Daniel Vetter
  2017-06-30 13:41       ` Thomas Hellstrom
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Vetter @ 2017-06-30 13:39 UTC (permalink / raw)
  To: Thomas Hellstrom
  Cc: Daniel Vetter, Laurent Pinchart, VMware Graphics, dri-devel

Want me to throw this into drm-misc too, or will you pick this up in
wmvgfx trees? Since it's not tree-wide there's no reason for it to go
through drm-misc.
-Daniel

On Fri, Jun 30, 2017 at 3:04 PM, Thomas Hellstrom <thellstrom@vmware.com> wrote:
> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
>
>
>
> On 06/30/2017 11:36 AM, Laurent Pinchart wrote:
>>
>> The CRTC .prepare() helper operation is legacy code, drivers should
>> use the .atomic_disable() operation instead.
>>
>> When a CRTC is temporarily disabled prior to a mode set, the atomic
>> helpers call the .prepare() operation if provided instead of the
>> .atomic_disable() operation. In order to avoid modifying the driver's
>> behaviour that has an empty .prepare() implementation, we need to return
>> from the .atomic_disable() operation without performing any action if
>> the CRTC will be reenabled.
>>
>> Signed-off-by: Laurent Pinchart
>> <laurent.pinchart+renesas@ideasonboard.com>
>> ---
>>   drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 15 +++------------
>>   drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 10 +++-------
>>   2 files changed, 6 insertions(+), 19 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
>> b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
>> index 854403509216..bdf6349de250 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
>> @@ -259,17 +259,6 @@ static void vmw_sou_crtc_mode_set_nofb(struct
>> drm_crtc *crtc)
>>   }
>>     /**
>> - * vmw_sou_crtc_helper_prepare - Noop
>> - *
>> - * @crtc: CRTC associated with the new screen
>> - *
>> - * Prepares the CRTC for a mode set, but we don't need to do anything
>> here.
>> - */
>> -static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
>> -{
>> -}
>> -
>> -/**
>>    * vmw_sou_crtc_atomic_enable - Noop
>>    *
>>    * @crtc: CRTC associated with the new screen
>> @@ -299,6 +288,9 @@ static void vmw_sou_crtc_atomic_disable(struct
>> drm_crtc *crtc,
>>                 return;
>>         }
>>   +     if (crtc->state->enable)
>> +               return;
>> +
>>         sou = vmw_crtc_to_sou(crtc);
>>         dev_priv = vmw_priv(crtc->dev);
>>   @@ -574,7 +566,6 @@ drm_plane_helper_funcs
>> vmw_sou_primary_plane_helper_funcs = {
>>   };
>>     static const struct drm_crtc_helper_funcs vmw_sou_crtc_helper_funcs =
>> {
>> -       .prepare = vmw_sou_crtc_helper_prepare,
>>         .mode_set_nofb = vmw_sou_crtc_mode_set_nofb,
>>         .atomic_check = vmw_du_crtc_atomic_check,
>>         .atomic_begin = vmw_du_crtc_atomic_begin,
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
>> b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
>> index ed9404a7f457..c3bd4a012b64 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
>> @@ -406,12 +406,6 @@ static void vmw_stdu_crtc_mode_set_nofb(struct
>> drm_crtc *crtc)
>>                           crtc->x, crtc->y);
>>   }
>>   -
>> -static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
>> -{
>> -}
>> -
>> -
>>   static void vmw_stdu_crtc_atomic_enable(struct drm_crtc *crtc,
>>                                         struct drm_crtc_state *old_state)
>>   {
>> @@ -446,6 +440,9 @@ static void vmw_stdu_crtc_atomic_disable(struct
>> drm_crtc *crtc,
>>                 return;
>>         }
>>   +     if (crtc->state->enable)
>> +               return;
>> +
>>         stdu     = vmw_crtc_to_stdu(crtc);
>>         dev_priv = vmw_priv(crtc->dev);
>>   @@ -1416,7 +1413,6 @@ drm_plane_helper_funcs
>> vmw_stdu_primary_plane_helper_funcs = {
>>   };
>>     static const struct drm_crtc_helper_funcs vmw_stdu_crtc_helper_funcs =
>> {
>> -       .prepare = vmw_stdu_crtc_helper_prepare,
>>         .mode_set_nofb = vmw_stdu_crtc_mode_set_nofb,
>>         .atomic_check = vmw_du_crtc_atomic_check,
>>         .atomic_begin = vmw_du_crtc_atomic_begin,
>
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 3/3] drm: vmwgfx: Remove the legacy CRTC .prepare() helper operations
  2017-06-30 13:39     ` Daniel Vetter
@ 2017-06-30 13:41       ` Thomas Hellstrom
  0 siblings, 0 replies; 8+ messages in thread
From: Thomas Hellstrom @ 2017-06-30 13:41 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: Daniel Vetter, Laurent Pinchart, VMware Graphics, dri-devel

Hi, Daniel,

If possible, throw it into drm-misc. We have no changes for the next 
merge window at this time so it's a bit unnecessary to generate a 
separate pull request for this.

Thanks,
Thomas


On 06/30/2017 03:39 PM, Daniel Vetter wrote:
> Want me to throw this into drm-misc too, or will you pick this up in
> wmvgfx trees? Since it's not tree-wide there's no reason for it to go
> through drm-misc.
> -Daniel
>
> On Fri, Jun 30, 2017 at 3:04 PM, Thomas Hellstrom <thellstrom@vmware.com> wrote:
>> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
>>
>>
>>
>> On 06/30/2017 11:36 AM, Laurent Pinchart wrote:
>>> The CRTC .prepare() helper operation is legacy code, drivers should
>>> use the .atomic_disable() operation instead.
>>>
>>> When a CRTC is temporarily disabled prior to a mode set, the atomic
>>> helpers call the .prepare() operation if provided instead of the
>>> .atomic_disable() operation. In order to avoid modifying the driver's
>>> behaviour that has an empty .prepare() implementation, we need to return
>>> from the .atomic_disable() operation without performing any action if
>>> the CRTC will be reenabled.
>>>
>>> Signed-off-by: Laurent Pinchart
>>> <laurent.pinchart+renesas@ideasonboard.com>
>>> ---
>>>    drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 15 +++------------
>>>    drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 10 +++-------
>>>    2 files changed, 6 insertions(+), 19 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
>>> b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
>>> index 854403509216..bdf6349de250 100644
>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
>>> @@ -259,17 +259,6 @@ static void vmw_sou_crtc_mode_set_nofb(struct
>>> drm_crtc *crtc)
>>>    }
>>>      /**
>>> - * vmw_sou_crtc_helper_prepare - Noop
>>> - *
>>> - * @crtc: CRTC associated with the new screen
>>> - *
>>> - * Prepares the CRTC for a mode set, but we don't need to do anything
>>> here.
>>> - */
>>> -static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
>>> -{
>>> -}
>>> -
>>> -/**
>>>     * vmw_sou_crtc_atomic_enable - Noop
>>>     *
>>>     * @crtc: CRTC associated with the new screen
>>> @@ -299,6 +288,9 @@ static void vmw_sou_crtc_atomic_disable(struct
>>> drm_crtc *crtc,
>>>                  return;
>>>          }
>>>    +     if (crtc->state->enable)
>>> +               return;
>>> +
>>>          sou = vmw_crtc_to_sou(crtc);
>>>          dev_priv = vmw_priv(crtc->dev);
>>>    @@ -574,7 +566,6 @@ drm_plane_helper_funcs
>>> vmw_sou_primary_plane_helper_funcs = {
>>>    };
>>>      static const struct drm_crtc_helper_funcs vmw_sou_crtc_helper_funcs =
>>> {
>>> -       .prepare = vmw_sou_crtc_helper_prepare,
>>>          .mode_set_nofb = vmw_sou_crtc_mode_set_nofb,
>>>          .atomic_check = vmw_du_crtc_atomic_check,
>>>          .atomic_begin = vmw_du_crtc_atomic_begin,
>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
>>> b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
>>> index ed9404a7f457..c3bd4a012b64 100644
>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
>>> @@ -406,12 +406,6 @@ static void vmw_stdu_crtc_mode_set_nofb(struct
>>> drm_crtc *crtc)
>>>                            crtc->x, crtc->y);
>>>    }
>>>    -
>>> -static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
>>> -{
>>> -}
>>> -
>>> -
>>>    static void vmw_stdu_crtc_atomic_enable(struct drm_crtc *crtc,
>>>                                          struct drm_crtc_state *old_state)
>>>    {
>>> @@ -446,6 +440,9 @@ static void vmw_stdu_crtc_atomic_disable(struct
>>> drm_crtc *crtc,
>>>                  return;
>>>          }
>>>    +     if (crtc->state->enable)
>>> +               return;
>>> +
>>>          stdu     = vmw_crtc_to_stdu(crtc);
>>>          dev_priv = vmw_priv(crtc->dev);
>>>    @@ -1416,7 +1413,6 @@ drm_plane_helper_funcs
>>> vmw_stdu_primary_plane_helper_funcs = {
>>>    };
>>>      static const struct drm_crtc_helper_funcs vmw_stdu_crtc_helper_funcs =
>>> {
>>> -       .prepare = vmw_stdu_crtc_helper_prepare,
>>>          .mode_set_nofb = vmw_stdu_crtc_mode_set_nofb,
>>>          .atomic_check = vmw_du_crtc_atomic_check,
>>>          .atomic_begin = vmw_du_crtc_atomic_begin,
>>
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.freedesktop.org_mailman_listinfo_dri-2Ddevel&d=DwIBaQ&c=uilaK90D4TOVoH58JNXRgQ&r=wnSlgOCqfpNS4d02vP68_E9q2BNMCwfD2OZ_6dCFVQQ&m=zvSnZOcctIomH3uHnUlUtGM3V2HQx8fRxI5e3gP1IWw&s=MsJ6mDVhjiu2b7IH0naLkx-srL98cgLZ5fXSilipnKI&e=
>
>

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-06-30 13:57 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-30  9:36 [PATCH v2 0/3] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
2017-06-30  9:36 ` [PATCH v2 1/3] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
2017-06-30  9:36 ` [PATCH v2 2/3] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
2017-06-30 12:53   ` Daniel Vetter
2017-06-30  9:36 ` [PATCH v2 3/3] drm: vmwgfx: Remove the legacy CRTC .prepare() helper operations Laurent Pinchart
2017-06-30 13:04   ` Thomas Hellstrom
2017-06-30 13:39     ` Daniel Vetter
2017-06-30 13:41       ` Thomas Hellstrom

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.