All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult
@ 2017-06-27 20:38 Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation Laurent Pinchart
                   ` (17 more replies)
  0 siblings, 18 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 20:38 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, Mali DP Maintainers,
	Dave Airlie, Chen Feng, Jyri Sarha, Vincent Abriou,
	VMware Graphics, Alison Wang, Seung-Woo Kim, Philippe Cornu,
	Yannick Fertre, Kyungmin Park

Hello,

The atomic helpers favour the .enable() and .atomic_disable() CRTC helper
operations, but still support the legacy .prepare(), .commit(), .disable() and
.dpms() operations. Some drivers have been updated, but most still use various
combination of new and legacy operations, leading to confusion among new
developers when they read the code.

To avoid cargo-cult use of the legacy operations, this patch series
mass-updates all atomic drivers to use the new CRTC atomic helper operations.

In addition, patch 7/8 adds an old state pointer argument to the CRTC
.enable() helper operation, and rename it to .atomic_enable() for consistency
with .atomic_disable(). These two changes could have been split in separate
patch, but as they are simple and touch the same large number of files,
keeping the two changes as one is simpler and less error-prone.

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 (8):
  drm: arcpgu: Remove CRTC .commit() helper operation
  drm: arcpgu: Remove CRTC .prepare() helper operation
  drm: qxl: Remove unused CRTC .dpms() helper operation
  drm: qxl: Replace CRTC .commit() helper operation with .enable()
  drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation
  drm: vmwgfx: Replace CRTC .commit() helper operation with .enable()
  drm: Add old state pointer to CRTC .enable() helper function
  drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()

 drivers/gpu/drm/arc/arcpgu_crtc.c               | 12 ++++----
 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               | 15 ++++------
 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             | 27 ++++++------------
 drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c            | 14 +++++----
 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c            | 10 ++++---
 drivers/gpu/drm/zte/zx_vou.c                    | 10 ++++---
 include/drm/drm_modeset_helper_vtables.h        | 38 +++++++++++++------------
 31 files changed, 204 insertions(+), 155 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] 51+ messages in thread

* [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
@ 2017-06-27 20:38 ` Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() " Laurent Pinchart
                   ` (16 subsequent siblings)
  17 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 20:38 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter

The CRTC helper .commit() operation is legacy code, the atomic helpers
prefer the .enable() operation. As the arcpgu driver implements the
.enable() operation, .commit() is never used and can be removed.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/arc/arcpgu_crtc.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
index 611af74a31c0..51745608e09d 100644
--- a/drivers/gpu/drm/arc/arcpgu_crtc.c
+++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
@@ -164,7 +164,6 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
 	.enable		= arc_pgu_crtc_enable,
 	.disable	= arc_pgu_crtc_disable,
 	.prepare	= arc_pgu_crtc_disable,
-	.commit		= arc_pgu_crtc_enable,
 	.atomic_begin	= arc_pgu_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] 51+ messages in thread

* [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() helper operation
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation Laurent Pinchart
@ 2017-06-27 20:38 ` Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 3/8] drm: qxl: Remove unused CRTC .dpms() " Laurent Pinchart
                   ` (15 subsequent siblings)
  17 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 20:38 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter

The CRTC helper .prepare() operation is legacy code, the atomic helpers
prefer the .disable() operation. As the arcpgu driver implements the
.disable() and .prepare() operations identicallly, .prepare() can be
removed.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/arc/arcpgu_crtc.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
index 51745608e09d..1f306781c9d5 100644
--- a/drivers/gpu/drm/arc/arcpgu_crtc.c
+++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
@@ -163,7 +163,6 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
 	.mode_set_nofb	= arc_pgu_crtc_mode_set_nofb,
 	.enable		= arc_pgu_crtc_enable,
 	.disable	= arc_pgu_crtc_disable,
-	.prepare	= arc_pgu_crtc_disable,
 	.atomic_begin	= arc_pgu_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] 51+ messages in thread

* [PATCH 3/8] drm: qxl: Remove unused CRTC .dpms() helper operation
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() " Laurent Pinchart
@ 2017-06-27 20:38 ` Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
                   ` (14 subsequent siblings)
  17 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 20:38 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter

The CRTC .dpms() helper operation is called by the atomic helpers only
when no .prepare(), .atomic_disable() or .disable() operation is
provided. As the qxl driver provides a .disable() operation, the .dpms()
operation is unused and can be removed.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/qxl/qxl_display.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 72dcaab84bba..19ba336ce096 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -378,10 +378,6 @@ qxl_framebuffer_init(struct drm_device *dev,
 	return 0;
 }
 
-static void qxl_crtc_dpms(struct drm_crtc *crtc, int mode)
-{
-}
-
 static bool qxl_crtc_mode_fixup(struct drm_crtc *crtc,
 				  const struct drm_display_mode *mode,
 				  struct drm_display_mode *adjusted_mode)
@@ -467,7 +463,6 @@ static void qxl_crtc_disable(struct drm_crtc *crtc)
 }
 
 static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = {
-	.dpms = qxl_crtc_dpms,
 	.disable = qxl_crtc_disable,
 	.mode_fixup = qxl_crtc_mode_fixup,
 	.mode_set_nofb = qxl_mode_set_nofb,
-- 
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] 51+ messages in thread

* [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable()
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (2 preceding siblings ...)
  2017-06-27 20:38 ` [PATCH 3/8] drm: qxl: Remove unused CRTC .dpms() " Laurent Pinchart
@ 2017-06-27 20:38 ` Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation Laurent Pinchart
                   ` (13 subsequent siblings)
  17 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 20:38 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter

The CRTC helper .commit() operation is legacy code, the atomic helpers
prefer the .enable() operation. Replace the .commit() helper operation
with .enable() in the driver.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/qxl/qxl_display.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 19ba336ce096..7ede5f131a5c 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -447,7 +447,7 @@ static void qxl_mode_set_nofb(struct drm_crtc *crtc)
 
 }
 
-static void qxl_crtc_commit(struct drm_crtc *crtc)
+static void qxl_crtc_enable(struct drm_crtc *crtc)
 {
 	DRM_DEBUG("\n");
 }
@@ -466,7 +466,7 @@ 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,
-	.commit = qxl_crtc_commit,
+	.enable = qxl_crtc_enable,
 	.atomic_flush = qxl_crtc_atomic_flush,
 };
 
-- 
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] 51+ messages in thread

* [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (3 preceding siblings ...)
  2017-06-27 20:38 ` [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
@ 2017-06-27 20:38 ` Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
                   ` (12 subsequent siblings)
  17 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 20:38 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter

The CRTC .prepare() helper operation is part of the legacy helpers and
is deprecated in favour of the .disable() helper operation. As the
vmwgfx driver provides a .disable() helper operation, and as the
.prepare() helper operation implementation is empty, we can remove it.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index 449ed4fba0f2..639e16703b80 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
@@ -203,18 +203,6 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc)
 }
 
 /**
- * vmw_ldu_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_ldu_crtc_helper_prepare(struct drm_crtc *crtc)
-{
-}
-
-/**
  * vmw_ldu_crtc_helper_commit - Noop
  *
  * @crtc: CRTC associated with the new screen
@@ -388,7 +376,6 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
-	.prepare = vmw_ldu_crtc_helper_prepare,
 	.commit = vmw_ldu_crtc_helper_commit,
 	.disable = vmw_ldu_crtc_helper_disable,
 	.mode_set_nofb = vmw_ldu_crtc_mode_set_nofb,
-- 
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] 51+ messages in thread

* [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable()
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (4 preceding siblings ...)
  2017-06-27 20:38 ` [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation Laurent Pinchart
@ 2017-06-27 20:38 ` Laurent Pinchart
  2017-06-28  7:39   ` Daniel Vetter
  2017-06-27 20:38 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                   ` (11 subsequent siblings)
  17 siblings, 1 reply; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 20:38 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter

The CRTC helper .commit() operation is legacy code, the atomic helpers
prefer the .enable() operation. Replace the .commit() helper operation
with .enable() in the driver.

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

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index 639e16703b80..f8acd3a15523 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_commit - Noop
+ * vmw_ldu_crtc_helper_enable - Noop
  *
  * @crtc: CRTC associated with the new screen
  *
@@ -212,7 +212,7 @@ 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_commit(struct drm_crtc *crtc)
+static void vmw_ldu_crtc_helper_enable(struct drm_crtc *crtc)
 {
 }
 
@@ -376,7 +376,7 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
-	.commit = vmw_ldu_crtc_helper_commit,
+	.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,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index 3b917c9b0c21..1cb826c503bf 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -270,13 +270,13 @@ static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
 }
 
 /**
- * vmw_sou_crtc_helper_commit - Noop
+ * vmw_sou_crtc_helper_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_commit(struct drm_crtc *crtc)
+static void vmw_sou_crtc_helper_enable(struct drm_crtc *crtc)
 {
 }
 
@@ -573,7 +573,7 @@ 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,
-	.commit = vmw_sou_crtc_helper_commit,
+	.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,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index 6aecba6cd5e2..4eb93b47d6db 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -412,7 +412,7 @@ static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
 }
 
 
-static void vmw_stdu_crtc_helper_commit(struct drm_crtc *crtc)
+static void vmw_stdu_crtc_helper_enable(struct drm_crtc *crtc)
 {
 	struct vmw_private *dev_priv;
 	struct vmw_screen_target_display_unit *stdu;
@@ -1415,7 +1415,7 @@ 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,
-	.commit = vmw_stdu_crtc_helper_commit,
+	.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,
-- 
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] 51+ messages in thread

* [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (5 preceding siblings ...)
  2017-06-27 20:38 ` [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
@ 2017-06-27 20:38 ` Laurent Pinchart
  2017-06-27 20:38 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
                   ` (10 subsequent siblings)
  17 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 20:38 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter

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>
---
 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        | 38 +++++++++++++------------
 31 files changed, 117 insertions(+), 80 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..d74a2cafc3de 100644
--- a/include/drm/drm_modeset_helper_vtables.h
+++ b/include/drm/drm_modeset_helper_vtables.h
@@ -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,26 @@ 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.
+	 */
+	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] 51+ messages in thread

* [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (6 preceding siblings ...)
  2017-06-27 20:38 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
@ 2017-06-27 20:38 ` Laurent Pinchart
  2017-06-27 21:16 ` [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation Laurent Pinchart
                   ` (9 subsequent siblings)
  17 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 20:38 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter

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>
---
 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] 51+ messages in thread

* [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (7 preceding siblings ...)
  2017-06-27 20:38 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
@ 2017-06-27 21:16 ` Laurent Pinchart
  2017-06-28  8:36   ` Alexey Brodkin
  2017-06-27 21:16 ` [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() " Laurent Pinchart
                   ` (8 subsequent siblings)
  17 siblings, 1 reply; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 21:16 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, Alexey Brodkin

The CRTC helper .commit() operation is legacy code, the atomic helpers
prefer the .enable() operation. As the arcpgu driver implements the
.enable() operation, .commit() is never used and can be removed.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/arc/arcpgu_crtc.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
index 611af74a31c0..51745608e09d 100644
--- a/drivers/gpu/drm/arc/arcpgu_crtc.c
+++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
@@ -164,7 +164,6 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
 	.enable		= arc_pgu_crtc_enable,
 	.disable	= arc_pgu_crtc_disable,
 	.prepare	= arc_pgu_crtc_disable,
-	.commit		= arc_pgu_crtc_enable,
 	.atomic_begin	= arc_pgu_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] 51+ messages in thread

* [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() helper operation
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (8 preceding siblings ...)
  2017-06-27 21:16 ` [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation Laurent Pinchart
@ 2017-06-27 21:16 ` Laurent Pinchart
  2017-06-28  8:36   ` Alexey Brodkin
  2017-06-27 21:16 ` [PATCH 3/8] drm: qxl: Remove unused CRTC .dpms() " Laurent Pinchart
                   ` (7 subsequent siblings)
  17 siblings, 1 reply; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 21:16 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, Alexey Brodkin

The CRTC helper .prepare() operation is legacy code, the atomic helpers
prefer the .disable() operation. As the arcpgu driver implements the
.disable() and .prepare() operations identicallly, .prepare() can be
removed.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/arc/arcpgu_crtc.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
index 51745608e09d..1f306781c9d5 100644
--- a/drivers/gpu/drm/arc/arcpgu_crtc.c
+++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
@@ -163,7 +163,6 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
 	.mode_set_nofb	= arc_pgu_crtc_mode_set_nofb,
 	.enable		= arc_pgu_crtc_enable,
 	.disable	= arc_pgu_crtc_disable,
-	.prepare	= arc_pgu_crtc_disable,
 	.atomic_begin	= arc_pgu_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] 51+ messages in thread

* [PATCH 3/8] drm: qxl: Remove unused CRTC .dpms() helper operation
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (9 preceding siblings ...)
  2017-06-27 21:16 ` [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() " Laurent Pinchart
@ 2017-06-27 21:16 ` Laurent Pinchart
  2017-06-27 21:16 ` [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
                   ` (6 subsequent siblings)
  17 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 21:16 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, Gerd Hoffmann, Dave Airlie

The CRTC .dpms() helper operation is called by the atomic helpers only
when no .prepare(), .atomic_disable() or .disable() operation is
provided. As the qxl driver provides a .disable() operation, the .dpms()
operation is unused and can be removed.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/qxl/qxl_display.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 72dcaab84bba..19ba336ce096 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -378,10 +378,6 @@ qxl_framebuffer_init(struct drm_device *dev,
 	return 0;
 }
 
-static void qxl_crtc_dpms(struct drm_crtc *crtc, int mode)
-{
-}
-
 static bool qxl_crtc_mode_fixup(struct drm_crtc *crtc,
 				  const struct drm_display_mode *mode,
 				  struct drm_display_mode *adjusted_mode)
@@ -467,7 +463,6 @@ static void qxl_crtc_disable(struct drm_crtc *crtc)
 }
 
 static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = {
-	.dpms = qxl_crtc_dpms,
 	.disable = qxl_crtc_disable,
 	.mode_fixup = qxl_crtc_mode_fixup,
 	.mode_set_nofb = qxl_mode_set_nofb,
-- 
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] 51+ messages in thread

* [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable()
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (10 preceding siblings ...)
  2017-06-27 21:16 ` [PATCH 3/8] drm: qxl: Remove unused CRTC .dpms() " Laurent Pinchart
@ 2017-06-27 21:16 ` Laurent Pinchart
  2017-06-28  8:14   ` Daniel Vetter
  2017-06-27 21:16 ` [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation Laurent Pinchart
                   ` (5 subsequent siblings)
  17 siblings, 1 reply; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 21:16 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, Gerd Hoffmann, Dave Airlie

The CRTC helper .commit() operation is legacy code, the atomic helpers
prefer the .enable() operation. Replace the .commit() helper operation
with .enable() in the driver.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/qxl/qxl_display.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 19ba336ce096..7ede5f131a5c 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -447,7 +447,7 @@ static void qxl_mode_set_nofb(struct drm_crtc *crtc)
 
 }
 
-static void qxl_crtc_commit(struct drm_crtc *crtc)
+static void qxl_crtc_enable(struct drm_crtc *crtc)
 {
 	DRM_DEBUG("\n");
 }
@@ -466,7 +466,7 @@ 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,
-	.commit = qxl_crtc_commit,
+	.enable = qxl_crtc_enable,
 	.atomic_flush = qxl_crtc_atomic_flush,
 };
 
-- 
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] 51+ messages in thread

* [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (11 preceding siblings ...)
  2017-06-27 21:16 ` [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
@ 2017-06-27 21:16 ` Laurent Pinchart
  2017-06-29 12:56   ` Thomas Hellstrom
  2017-06-27 21:16 ` [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
                   ` (4 subsequent siblings)
  17 siblings, 1 reply; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 21:16 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, Thomas Hellstrom, VMware Graphics

The CRTC .prepare() helper operation is part of the legacy helpers and
is deprecated in favour of the .disable() helper operation. As the
vmwgfx driver provides a .disable() helper operation, and as the
.prepare() helper operation implementation is empty, we can remove it.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index 449ed4fba0f2..639e16703b80 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
@@ -203,18 +203,6 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc)
 }
 
 /**
- * vmw_ldu_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_ldu_crtc_helper_prepare(struct drm_crtc *crtc)
-{
-}
-
-/**
  * vmw_ldu_crtc_helper_commit - Noop
  *
  * @crtc: CRTC associated with the new screen
@@ -388,7 +376,6 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
-	.prepare = vmw_ldu_crtc_helper_prepare,
 	.commit = vmw_ldu_crtc_helper_commit,
 	.disable = vmw_ldu_crtc_helper_disable,
 	.mode_set_nofb = vmw_ldu_crtc_mode_set_nofb,
-- 
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] 51+ messages in thread

* [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable()
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (12 preceding siblings ...)
  2017-06-27 21:16 ` [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation Laurent Pinchart
@ 2017-06-27 21:16 ` Laurent Pinchart
  2017-06-29 12:58   ` Thomas Hellstrom
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                   ` (3 subsequent siblings)
  17 siblings, 1 reply; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 21:16 UTC (permalink / raw)
  To: dri-devel; +Cc: Daniel Vetter, Thomas Hellstrom, VMware Graphics

The CRTC helper .commit() operation is legacy code, the atomic helpers
prefer the .enable() operation. Replace the .commit() helper operation
with .enable() in the driver.

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

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
index 639e16703b80..f8acd3a15523 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_commit - Noop
+ * vmw_ldu_crtc_helper_enable - Noop
  *
  * @crtc: CRTC associated with the new screen
  *
@@ -212,7 +212,7 @@ 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_commit(struct drm_crtc *crtc)
+static void vmw_ldu_crtc_helper_enable(struct drm_crtc *crtc)
 {
 }
 
@@ -376,7 +376,7 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
-	.commit = vmw_ldu_crtc_helper_commit,
+	.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,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
index 3b917c9b0c21..1cb826c503bf 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
@@ -270,13 +270,13 @@ static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
 }
 
 /**
- * vmw_sou_crtc_helper_commit - Noop
+ * vmw_sou_crtc_helper_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_commit(struct drm_crtc *crtc)
+static void vmw_sou_crtc_helper_enable(struct drm_crtc *crtc)
 {
 }
 
@@ -573,7 +573,7 @@ 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,
-	.commit = vmw_sou_crtc_helper_commit,
+	.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,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
index 6aecba6cd5e2..4eb93b47d6db 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
@@ -412,7 +412,7 @@ static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
 }
 
 
-static void vmw_stdu_crtc_helper_commit(struct drm_crtc *crtc)
+static void vmw_stdu_crtc_helper_enable(struct drm_crtc *crtc)
 {
 	struct vmw_private *dev_priv;
 	struct vmw_screen_target_display_unit *stdu;
@@ -1415,7 +1415,7 @@ 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,
-	.commit = vmw_stdu_crtc_helper_commit,
+	.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,
-- 
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] 51+ messages in thread

* [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (13 preceding siblings ...)
  2017-06-27 21:16 ` [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
@ 2017-06-27 21:16 ` Laurent Pinchart
  2017-06-28  6:46   ` Maxime Ripard
                     ` (10 more replies)
  2017-06-27 21:16 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
                   ` (2 subsequent siblings)
  17 siblings, 11 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 21:16 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, Mali DP Maintainers,
	Dave Airlie, Chen Feng, Jyri Sarha, Vincent Abriou,
	VMware Graphics, 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>
---
 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        | 38 +++++++++++++------------
 31 files changed, 117 insertions(+), 80 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..d74a2cafc3de 100644
--- a/include/drm/drm_modeset_helper_vtables.h
+++ b/include/drm/drm_modeset_helper_vtables.h
@@ -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,26 @@ 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.
+	 */
+	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] 51+ messages in thread

* [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (14 preceding siblings ...)
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
@ 2017-06-27 21:16 ` Laurent Pinchart
  2017-06-28  6:47   ` Maxime Ripard
                     ` (7 more replies)
  2017-06-28  8:16 ` [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Daniel Vetter
  2017-06-28 11:27 ` Emil Velikov
  17 siblings, 8 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-27 21:16 UTC (permalink / raw)
  To: dri-devel
  Cc: Neil Armstrong, Liviu Dudau, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom, Alexey Brodkin,
	Kyungmin Park, Xinliang Liu, Xinwei Kong, Tomi Valkeinen,
	Mali DP Maintainers, Dave Airlie, Chen Feng, Jyri Sarha,
	Vincent Abriou, VMware Graphics, Seung-Woo Kim, Philippe Cornu,
	Yannick Fertre, 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>
---
 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] 51+ messages in thread

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
@ 2017-06-28  6:46   ` Maxime Ripard
  2017-06-28  7:42   ` Daniel Vetter
                     ` (9 subsequent siblings)
  10 siblings, 0 replies; 51+ messages in thread
From: Maxime Ripard @ 2017-06-28  6:46 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,
	Mali DP Maintainers, Dave Airlie, Chen Feng, Jyri Sarha,
	Vincent Abriou, VMware Graphics, Alison Wang, Seung-Woo Kim,
	Philippe Cornu, Yannick Fertre


[-- Attachment #1.1: Type: text/plain, Size: 2040 bytes --]

On Wed, Jun 28, 2017 at 12:16:20AM +0300, Laurent Pinchart wrote:
> 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>
> ---
>  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 ++--

for sun4i,
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>

Thanks!
Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

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

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

* Re: [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-27 21:16 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
@ 2017-06-28  6:47   ` Maxime Ripard
  2017-06-28  8:15   ` Philipp Zabel
                     ` (6 subsequent siblings)
  7 siblings, 0 replies; 51+ messages in thread
From: Maxime Ripard @ 2017-06-28  6:47 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, Kyungmin Park, Xinliang Liu, Xinwei Kong,
	Tomi Valkeinen, Mali DP Maintainers, Dave Airlie, Chen Feng,
	Jyri Sarha, Vincent Abriou, VMware Graphics, Seung-Woo Kim,
	Philippe Cornu, Yannick Fertre


[-- Attachment #1.1: Type: text/plain, Size: 1779 bytes --]

On Wed, Jun 28, 2017 at 12:16:21AM +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>
> ---
>  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 +++--

For sun4i,

Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>

Thanks!
Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

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

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

* Re: [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable()
  2017-06-27 20:38 ` [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
@ 2017-06-28  7:39   ` Daniel Vetter
  2017-06-28  8:25     ` Laurent Pinchart
  0 siblings, 1 reply; 51+ messages in thread
From: Daniel Vetter @ 2017-06-28  7:39 UTC (permalink / raw)
  To: Laurent Pinchart; +Cc: Daniel Vetter, dri-devel

On Tue, Jun 27, 2017 at 11:38:41PM +0300, Laurent Pinchart wrote:
> The CRTC helper .commit() operation is legacy code, the atomic helpers
> prefer the .enable() operation. Replace the .commit() helper operation
> with .enable() in the driver.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

I think it'd be great to outright nuke the nop functions, they're all
optional, and with newly-merged drivers I ask for them to get removed. But
that's an aside, feel free to ignore.
-Daniel

> ---
>  drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c  | 6 +++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 6 +++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 4 ++--
>  3 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> index 639e16703b80..f8acd3a15523 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_commit - Noop
> + * vmw_ldu_crtc_helper_enable - Noop
>   *
>   * @crtc: CRTC associated with the new screen
>   *
> @@ -212,7 +212,7 @@ 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_commit(struct drm_crtc *crtc)
> +static void vmw_ldu_crtc_helper_enable(struct drm_crtc *crtc)
>  {
>  }
>  
> @@ -376,7 +376,7 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
>  };
>  
>  static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
> -	.commit = vmw_ldu_crtc_helper_commit,
> +	.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,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> index 3b917c9b0c21..1cb826c503bf 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> @@ -270,13 +270,13 @@ static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
>  }
>  
>  /**
> - * vmw_sou_crtc_helper_commit - Noop
> + * vmw_sou_crtc_helper_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_commit(struct drm_crtc *crtc)
> +static void vmw_sou_crtc_helper_enable(struct drm_crtc *crtc)
>  {
>  }
>  
> @@ -573,7 +573,7 @@ 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,
> -	.commit = vmw_sou_crtc_helper_commit,
> +	.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,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> index 6aecba6cd5e2..4eb93b47d6db 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> @@ -412,7 +412,7 @@ static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
>  }
>  
>  
> -static void vmw_stdu_crtc_helper_commit(struct drm_crtc *crtc)
> +static void vmw_stdu_crtc_helper_enable(struct drm_crtc *crtc)
>  {
>  	struct vmw_private *dev_priv;
>  	struct vmw_screen_target_display_unit *stdu;
> @@ -1415,7 +1415,7 @@ 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,
> -	.commit = vmw_stdu_crtc_helper_commit,
> +	.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,
> -- 
> 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] 51+ messages in thread

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
  2017-06-28  6:46   ` Maxime Ripard
@ 2017-06-28  7:42   ` Daniel Vetter
  2017-06-28 11:55     ` Laurent Pinchart
  2017-06-28  8:15   ` Philipp Zabel
                     ` (8 subsequent siblings)
  10 siblings, 1 reply; 51+ messages in thread
From: Daniel Vetter @ 2017-06-28  7:42 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, Chen Feng, Jyri Sarha,
	Dave Airlie, Vincent Abriou, Alison Wang, Seung-Woo Kim,
	Philippe Cornu, Yannick Fertre

On Wed, Jun 28, 2017 at 12:16:20AM +0300, Laurent Pinchart wrote:
> diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
> index 474a1029ec79..d74a2cafc3de 100644
> --- a/include/drm/drm_modeset_helper_vtables.h
> +++ b/include/drm/drm_modeset_helper_vtables.h
> @@ -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,26 @@ 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.

A few lines explaing what @old_crtc_state is good for would be good here
(like we already have for @atomic_disable). Otherwise lgtm.
-Daniel

> +	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

-- 
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] 51+ messages in thread

* Re: [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable()
  2017-06-27 21:16 ` [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
@ 2017-06-28  8:14   ` Daniel Vetter
  0 siblings, 0 replies; 51+ messages in thread
From: Daniel Vetter @ 2017-06-28  8:14 UTC (permalink / raw)
  To: Laurent Pinchart; +Cc: Daniel Vetter, Gerd Hoffmann, dri-devel, Dave Airlie

On Wed, Jun 28, 2017 at 12:16:17AM +0300, Laurent Pinchart wrote:
> The CRTC helper .commit() operation is legacy code, the atomic helpers
> prefer the .enable() operation. Replace the .commit() helper operation
> with .enable() in the driver.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> ---
>  drivers/gpu/drm/qxl/qxl_display.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
> index 19ba336ce096..7ede5f131a5c 100644
> --- a/drivers/gpu/drm/qxl/qxl_display.c
> +++ b/drivers/gpu/drm/qxl/qxl_display.c
> @@ -447,7 +447,7 @@ static void qxl_mode_set_nofb(struct drm_crtc *crtc)
>  
>  }
>  
> -static void qxl_crtc_commit(struct drm_crtc *crtc)
> +static void qxl_crtc_enable(struct drm_crtc *crtc)
>  {
>  	DRM_DEBUG("\n");
>  }

Same comment as for vmwgfx: Would be even better to just nuke the dummy
func here.
-Daniel

> @@ -466,7 +466,7 @@ 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,
> -	.commit = qxl_crtc_commit,
> +	.enable = qxl_crtc_enable,
>  	.atomic_flush = qxl_crtc_atomic_flush,
>  };
>  
> -- 
> 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] 51+ messages in thread

* Re: [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-27 21:16 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
  2017-06-28  6:47   ` Maxime Ripard
@ 2017-06-28  8:15   ` Philipp Zabel
  2017-06-28  8:39   ` Alexey Brodkin
                     ` (5 subsequent siblings)
  7 siblings, 0 replies; 51+ messages in thread
From: Philipp Zabel @ 2017-06-28  8:15 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, Kyungmin Park, Xinliang Liu, Xinwei Kong,
	Tomi Valkeinen, Mali DP Maintainers, Dave Airlie, Chen Feng,
	Jyri Sarha, Vincent Abriou, VMware Graphics, Seung-Woo Kim,
	Philippe Cornu, Yannick Fertre

On Wed, 2017-06-28 at 00:16 +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>
[...]
> 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,

For mediatek,
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>

regards
Philipp


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

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

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
  2017-06-28  6:46   ` Maxime Ripard
  2017-06-28  7:42   ` Daniel Vetter
@ 2017-06-28  8:15   ` Philipp Zabel
  2017-06-28  8:37   ` Alexey Brodkin
                     ` (7 subsequent siblings)
  10 siblings, 0 replies; 51+ messages in thread
From: Philipp Zabel @ 2017-06-28  8:15 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,
	Mali DP Maintainers, Dave Airlie, Chen Feng, Jyri Sarha,
	Vincent Abriou, VMware Graphics, Alison Wang, Seung-Woo Kim,
	Philippe Cornu, Yannick Fertre

On Wed, 2017-06-28 at 00:16 +0300, Laurent Pinchart wrote:
> 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>
[...]
> 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,

For imx-drm and mediatek,
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>

regards
Philipp

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

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

* Re: [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (15 preceding siblings ...)
  2017-06-27 21:16 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
@ 2017-06-28  8:16 ` Daniel Vetter
  2017-06-28  8:20   ` Daniel Vetter
  2017-06-28 11:27 ` Emil Velikov
  17 siblings, 1 reply; 51+ messages in thread
From: Daniel Vetter @ 2017-06-28  8:16 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, Chen Feng, Jyri Sarha,
	Dave Airlie, Vincent Abriou, Alison Wang, Seung-Woo Kim,
	Philippe Cornu, Yannick Fertre

On Tue, Jun 27, 2017 at 11:38:35PM +0300, Laurent Pinchart wrote:
> Hello,
> 
> The atomic helpers favour the .enable() and .atomic_disable() CRTC helper
> operations, but still support the legacy .prepare(), .commit(), .disable() and
> .dpms() operations. Some drivers have been updated, but most still use various
> combination of new and legacy operations, leading to confusion among new
> developers when they read the code.
> 
> To avoid cargo-cult use of the legacy operations, this patch series
> mass-updates all atomic drivers to use the new CRTC atomic helper operations.
> 
> In addition, patch 7/8 adds an old state pointer argument to the CRTC
> .enable() helper operation, and rename it to .atomic_enable() for consistency
> with .atomic_disable(). These two changes could have been split in separate
> patch, but as they are simple and touch the same large number of files,
> keeping the two changes as one is simpler and less error-prone.
> 
> 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).

Makes sense, so I went ahead and pulled in patches 1-6. I think 7&8 need a
bit more soaking to gather acks, if only for aweareness. Plus a bit more
kernel-doc polish imo.
-Daniel

> 
> Laurent Pinchart (8):
>   drm: arcpgu: Remove CRTC .commit() helper operation
>   drm: arcpgu: Remove CRTC .prepare() helper operation
>   drm: qxl: Remove unused CRTC .dpms() helper operation
>   drm: qxl: Replace CRTC .commit() helper operation with .enable()
>   drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation
>   drm: vmwgfx: Replace CRTC .commit() helper operation with .enable()
>   drm: Add old state pointer to CRTC .enable() helper function
>   drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
> 
>  drivers/gpu/drm/arc/arcpgu_crtc.c               | 12 ++++----
>  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               | 15 ++++------
>  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             | 27 ++++++------------
>  drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c            | 14 +++++----
>  drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c            | 10 ++++---
>  drivers/gpu/drm/zte/zx_vou.c                    | 10 ++++---
>  include/drm/drm_modeset_helper_vtables.h        | 38 +++++++++++++------------
>  31 files changed, 204 insertions(+), 155 deletions(-)
> 
> -- 
> 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] 51+ messages in thread

* Re: [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult
  2017-06-28  8:16 ` [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Daniel Vetter
@ 2017-06-28  8:20   ` Daniel Vetter
  2017-06-28  8:23     ` Laurent Pinchart
  0 siblings, 1 reply; 51+ messages in thread
From: Daniel Vetter @ 2017-06-28  8:20 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, Chen Feng, Jyri Sarha,
	Dave Airlie, Vincent Abriou, Alison Wang, Seung-Woo Kim,
	Philippe Cornu, Yannick Fertre

On Wed, Jun 28, 2017 at 10:16:14AM +0200, Daniel Vetter wrote:
> On Tue, Jun 27, 2017 at 11:38:35PM +0300, Laurent Pinchart wrote:
> > Hello,
> > 
> > The atomic helpers favour the .enable() and .atomic_disable() CRTC helper
> > operations, but still support the legacy .prepare(), .commit(), .disable() and
> > .dpms() operations. Some drivers have been updated, but most still use various
> > combination of new and legacy operations, leading to confusion among new
> > developers when they read the code.
> > 
> > To avoid cargo-cult use of the legacy operations, this patch series
> > mass-updates all atomic drivers to use the new CRTC atomic helper operations.
> > 
> > In addition, patch 7/8 adds an old state pointer argument to the CRTC
> > .enable() helper operation, and rename it to .atomic_enable() for consistency
> > with .atomic_disable(). These two changes could have been split in separate
> > patch, but as they are simple and touch the same large number of files,
> > keeping the two changes as one is simpler and less error-prone.
> > 
> > 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).
> 
> Makes sense, so I went ahead and pulled in patches 1-6. I think 7&8 need a
> bit more soaking to gather acks, if only for aweareness. Plus a bit more
> kernel-doc polish imo.

On the kernel-doc polish: Grepping for drm_crtc_helper_funcs\.enable and
\.disable brought up a few references that need to be updated in your
patches 7&8.
-Daniel

> -Daniel
> 
> > 
> > Laurent Pinchart (8):
> >   drm: arcpgu: Remove CRTC .commit() helper operation
> >   drm: arcpgu: Remove CRTC .prepare() helper operation
> >   drm: qxl: Remove unused CRTC .dpms() helper operation
> >   drm: qxl: Replace CRTC .commit() helper operation with .enable()
> >   drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation
> >   drm: vmwgfx: Replace CRTC .commit() helper operation with .enable()
> >   drm: Add old state pointer to CRTC .enable() helper function
> >   drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
> > 
> >  drivers/gpu/drm/arc/arcpgu_crtc.c               | 12 ++++----
> >  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               | 15 ++++------
> >  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             | 27 ++++++------------
> >  drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c            | 14 +++++----
> >  drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c            | 10 ++++---
> >  drivers/gpu/drm/zte/zx_vou.c                    | 10 ++++---
> >  include/drm/drm_modeset_helper_vtables.h        | 38 +++++++++++++------------
> >  31 files changed, 204 insertions(+), 155 deletions(-)
> > 
> > -- 
> > 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

-- 
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] 51+ messages in thread

* Re: [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult
  2017-06-28  8:20   ` Daniel Vetter
@ 2017-06-28  8:23     ` Laurent Pinchart
  0 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-28  8:23 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Neil Armstrong, m, Liviu Dudau, dri-devel, Thierry Reding,
	Gerd Hoffmann, Daniel Vetter, Kyungmin Park, Boris Brezillon,
	Thomas Hellstrom, Laurent Pinchart, Alexey Brodkin, Xinliang Liu,
	Xinwei Kong, Tomi Valkeinen, Mali DP Maintainers, Dave Airlie,
	Chen Feng, Jyri Sarha, Vincent Abriou, VMware Graphics,
	Alison Wang

Hi Daniel,

On Wednesday 28 Jun 2017 10:20:33 Daniel Vetter wrote:
> On Wed, Jun 28, 2017 at 10:16:14AM +0200, Daniel Vetter wrote:
> > On Tue, Jun 27, 2017 at 11:38:35PM +0300, Laurent Pinchart wrote:
> >> Hello,
> >> 
> >> The atomic helpers favour the .enable() and .atomic_disable() CRTC
> >> helper operations, but still support the legacy .prepare(), .commit(),
> >> .disable() and .dpms() operations. Some drivers have been updated, but
> >> most still use various combination of new and legacy operations,
> >> leading to confusion among new developers when they read the code.
> >> 
> >> To avoid cargo-cult use of the legacy operations, this patch series
> >> mass-updates all atomic drivers to use the new CRTC atomic helper
> >> operations.
> >> 
> >> In addition, patch 7/8 adds an old state pointer argument to the CRTC
> >> .enable() helper operation, and rename it to .atomic_enable() for
> >> consistency with .atomic_disable(). These two changes could have been
> >> split in separate patch, but as they are simple and touch the same
> >> large number of files, keeping the two changes as one is simpler and
> >> less error-prone.
> >> 
> >> 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).
> > 
> > Makes sense, so I went ahead and pulled in patches 1-6. I think 7&8 need a
> > bit more soaking to gather acks, if only for aweareness. Plus a bit more
> > kernel-doc polish imo.
> 
> On the kernel-doc polish: Grepping for drm_crtc_helper_funcs\.enable and
> \.disable brought up a few references that need to be updated in your
> patches 7&8.

I had just noticed that too, and will fix it in v2 of 7/8 and 8/8. I'll wait 
for more acks before reposting.

> >> Laurent Pinchart (8):
> >>   drm: arcpgu: Remove CRTC .commit() helper operation
> >>   drm: arcpgu: Remove CRTC .prepare() helper operation
> >>   drm: qxl: Remove unused CRTC .dpms() helper operation
> >>   drm: qxl: Replace CRTC .commit() helper operation with .enable()
> >>   drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation
> >>   drm: vmwgfx: Replace CRTC .commit() helper operation with .enable()
> >>   drm: Add old state pointer to CRTC .enable() helper function
> >>   drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
> >>  
> >>  drivers/gpu/drm/arc/arcpgu_crtc.c               | 12 ++++----
> >>  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               | 15 ++++------
> >>  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             | 27 ++++++------------
> >>  drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c            | 14 +++++----
> >>  drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c            | 10 ++++---
> >>  drivers/gpu/drm/zte/zx_vou.c                    | 10 ++++---
> >>  include/drm/drm_modeset_helper_vtables.h        | 38 +++++++++---------
> >>  31 files changed, 204 insertions(+), 155 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] 51+ messages in thread

* Re: [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable()
  2017-06-28  7:39   ` Daniel Vetter
@ 2017-06-28  8:25     ` Laurent Pinchart
  0 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-28  8:25 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: Daniel Vetter, Laurent Pinchart, dri-devel

Hi Daniel,

On Wednesday 28 Jun 2017 09:39:28 Daniel Vetter wrote:
> On Tue, Jun 27, 2017 at 11:38:41PM +0300, Laurent Pinchart wrote:
> > The CRTC helper .commit() operation is legacy code, the atomic helpers
> > prefer the .enable() operation. Replace the .commit() helper operation
> > with .enable() in the driver.
> > 
> > Signed-off-by: Laurent Pinchart
> > <laurent.pinchart+renesas@ideasonboard.com>
> 
> I think it'd be great to outright nuke the nop functions, they're all
> optional, and with newly-merged drivers I ask for them to get removed. But
> that's an aside, feel free to ignore.

I agree with you, but then we need to first merge "[PATCH] drm: atomic-helper: 
make CRTC .atomic_enable() operation truly optional"  :-)

> -Daniel
> 
> > ---
> > 
> >  drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c  | 6 +++---
> >  drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 6 +++---
> >  drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 4 ++--
> >  3 files changed, 8 insertions(+), 8 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> > b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c index 639e16703b80..f8acd3a15523
> > 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_commit - Noop
> > + * vmw_ldu_crtc_helper_enable - Noop
> >   *
> >   * @crtc: CRTC associated with the new screen
> >   *
> > @@ -212,7 +212,7 @@ 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_commit(struct drm_crtc *crtc)
> > +static void vmw_ldu_crtc_helper_enable(struct drm_crtc *crtc)
> >  {
> >  }
> > 
> > @@ -376,7 +376,7 @@ drm_plane_helper_funcs
> > vmw_ldu_primary_plane_helper_funcs = {
> >  };
> >  
> >  static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
> > -	.commit = vmw_ldu_crtc_helper_commit,
> > +	.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,
> > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> > b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c index 3b917c9b0c21..1cb826c503bf
> > 100644
> > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> > @@ -270,13 +270,13 @@ static void vmw_sou_crtc_helper_prepare(struct
> > drm_crtc *crtc)
> >  }
> >  
> >  /**
> > - * vmw_sou_crtc_helper_commit - Noop
> > + * vmw_sou_crtc_helper_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_commit(struct drm_crtc *crtc)
> > +static void vmw_sou_crtc_helper_enable(struct drm_crtc *crtc)
> >  {
> >  }
> > 
> > @@ -573,7 +573,7 @@ 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,
> > -	.commit = vmw_sou_crtc_helper_commit,
> > +	.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,
> > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> > b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c index 6aecba6cd5e2..4eb93b47d6db
> > 100644
> > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> > @@ -412,7 +412,7 @@ static void vmw_stdu_crtc_helper_prepare(struct
> > drm_crtc *crtc)
> >  }
> > 
> > -static void vmw_stdu_crtc_helper_commit(struct drm_crtc *crtc)
> > +static void vmw_stdu_crtc_helper_enable(struct drm_crtc *crtc)
> >  {
> >  	struct vmw_private *dev_priv;
> >  	struct vmw_screen_target_display_unit *stdu;
> > @@ -1415,7 +1415,7 @@ 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,
> > -	.commit = vmw_stdu_crtc_helper_commit,
> > +	.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,

-- 
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] 51+ messages in thread

* Re: [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation
  2017-06-27 21:16 ` [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation Laurent Pinchart
@ 2017-06-28  8:36   ` Alexey Brodkin
  0 siblings, 0 replies; 51+ messages in thread
From: Alexey Brodkin @ 2017-06-28  8:36 UTC (permalink / raw)
  To: laurent.pinchart+renesas; +Cc: daniel.vetter, dri-devel

Hi Laurent,

On Wed, 2017-06-28 at 00:16 +0300, Laurent Pinchart wrote:
> The CRTC helper .commit() operation is legacy code, the atomic helpers
> prefer the .enable() operation. As the arcpgu driver implements the
> .enable() operation, .commit() is never used and can be removed.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> ---
>  drivers/gpu/drm/arc/arcpgu_crtc.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
> index 611af74a31c0..51745608e09d 100644
> --- a/drivers/gpu/drm/arc/arcpgu_crtc.c
> +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
> @@ -164,7 +164,6 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
>  	.enable		= arc_pgu_crtc_enable,
>  	.disable	= arc_pgu_crtc_disable,
>  	.prepare	= arc_pgu_crtc_disable,
> -	.commit		= arc_pgu_crtc_enable,
>  	.atomic_begin	= arc_pgu_crtc_atomic_begin,
>  };

Acked-by: Alexey Brodkin <abrodkin@synopsys.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() helper operation
  2017-06-27 21:16 ` [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() " Laurent Pinchart
@ 2017-06-28  8:36   ` Alexey Brodkin
  0 siblings, 0 replies; 51+ messages in thread
From: Alexey Brodkin @ 2017-06-28  8:36 UTC (permalink / raw)
  To: laurent.pinchart+renesas; +Cc: daniel.vetter, dri-devel

Hi Laurent,

On Wed, 2017-06-28 at 00:16 +0300, Laurent Pinchart wrote:
> The CRTC helper .prepare() operation is legacy code, the atomic helpers
> prefer the .disable() operation. As the arcpgu driver implements the
> .disable() and .prepare() operations identicallly, .prepare() can be
> removed.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> ---
>  drivers/gpu/drm/arc/arcpgu_crtc.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
> index 51745608e09d..1f306781c9d5 100644
> --- a/drivers/gpu/drm/arc/arcpgu_crtc.c
> +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
> @@ -163,7 +163,6 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
>  	.mode_set_nofb	= arc_pgu_crtc_mode_set_nofb,
>  	.enable		= arc_pgu_crtc_enable,
>  	.disable	= arc_pgu_crtc_disable,
> -	.prepare	= arc_pgu_crtc_disable,
>  	.atomic_begin	= arc_pgu_crtc_atomic_begin,
>  };

Acked-by: Alexey Brodkin <abrodkin@synopsys.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                     ` (2 preceding siblings ...)
  2017-06-28  8:15   ` Philipp Zabel
@ 2017-06-28  8:37   ` Alexey Brodkin
  2017-06-28  8:43   ` Boris Brezillon
                     ` (6 subsequent siblings)
  10 siblings, 0 replies; 51+ messages in thread
From: Alexey Brodkin @ 2017-06-28  8:37 UTC (permalink / raw)
  To: dri-devel, laurent.pinchart+renesas
  Cc: narmstrong, liviu.dudau, thierry.reding, kraxel, daniel.vetter,
	boris.brezillon, thellstrom, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, linux-graphics-maintainer, malidp, puck.chen,
	jsarha, airlied, vincent.abriou, alison.wang@freescale.com

Hi Laurent,

On Wed, 2017-06-28 at 00:16 +0300, Laurent Pinchart wrote:
> 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>
> ---
>  drivers/gpu/drm/arc/arcpgu_crtc.c               |  5 ++--

For arcpgu:

Acked-by: Alexey Brodkin <abrodkin@synopsys.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-27 21:16 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
  2017-06-28  6:47   ` Maxime Ripard
  2017-06-28  8:15   ` Philipp Zabel
@ 2017-06-28  8:39   ` Alexey Brodkin
  2017-06-28  8:45   ` Boris Brezillon
                     ` (4 subsequent siblings)
  7 siblings, 0 replies; 51+ messages in thread
From: Alexey Brodkin @ 2017-06-28  8:39 UTC (permalink / raw)
  To: dri-devel, laurent.pinchart+renesas
  Cc: narmstrong, liviu.dudau, thierry.reding, kraxel, daniel.vetter,
	boris.brezillon, thellstrom, z.liuxinliang, kong.kongxinwei,
	tomi.valkeinen, linux-graphics-maintainer, malidp, puck.chen,
	jsarha, airlied, vincent.abriou, sw0312.kim@samsung.com

Hi Laurent,

On Wed, 2017-06-28 at 00:16 +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>
> ---
>  drivers/gpu/drm/arc/arcpgu_crtc.c               | 5 +++--

For arcpgu:

Acked-by: Alexey Brodkin <abrodkin@synopsys.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                     ` (3 preceding siblings ...)
  2017-06-28  8:37   ` Alexey Brodkin
@ 2017-06-28  8:43   ` Boris Brezillon
  2017-06-28 13:41   ` Liviu Dudau
                     ` (5 subsequent siblings)
  10 siblings, 0 replies; 51+ messages in thread
From: Boris Brezillon @ 2017-06-28  8:43 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Neil Armstrong, Liviu Dudau, dri-devel, Thierry Reding,
	Gerd Hoffmann, Daniel Vetter, Thomas Hellstrom, Alexey Brodkin,
	Xinliang Liu, Xinwei Kong, Tomi Valkeinen, Mali DP Maintainers,
	Dave Airlie, Chen Feng, Jyri Sarha, Vincent Abriou,
	VMware Graphics, Alison Wang, Seung-Woo Kim, Philippe Cornu,
	Yannick Fertre, Kyungmin Park

Le Wed, 28 Jun 2017 00:16:20 +0300,
Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> a écrit :

> 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>
> ---
>  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 ++--

For atmel-hlcdc:

Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

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

Le Wed, 28 Jun 2017 00:16:21 +0300,
Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> a écrit :

> 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>
> ---
>  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 +++--

For atmel-hlcdc:

Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult
  2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
                   ` (16 preceding siblings ...)
  2017-06-28  8:16 ` [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Daniel Vetter
@ 2017-06-28 11:27 ` Emil Velikov
  2017-06-28 13:10   ` Laurent Pinchart
  17 siblings, 1 reply; 51+ messages in thread
From: Emil Velikov @ 2017-06-28 11:27 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Neil Armstrong, Liviu Dudau, ML 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, Chen Feng, Jyri Sarha,
	Dave Airlie, Vincent Abriou, Alison Wang, Seung-Woo Kim,
	Philippe Cornu, Yannick

Hi Laurent,

On 27 June 2017 at 21:38, Laurent Pinchart
<laurent.pinchart+renesas@ideasonboard.com> wrote:
> Hello,
>
> The atomic helpers favour the .enable() and .atomic_disable() CRTC helper
> operations, but still support the legacy .prepare(), .commit(), .disable() and
> .dpms() operations. Some drivers have been updated, but most still use various
> combination of new and legacy operations, leading to confusion among new
> developers when they read the code.
>
Just had a crazy idea:

Would it make sense for the function(s) that takes the
driver_foo_funcs as an argument to cross-check for such mistakes?
Since many of the hooks are optional, one could check for the
'forbidden' combinations:
Atomic drivers should not have any legacy hooks set, while legacy ones
should not have any of the atomic ones.

Of course the idea is not restricted to the CRTC helpers -
drm_{crtc,encoder,connector,plane,mode_config}_{helper_,}funcs should
all be applicable.

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

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

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-28  7:42   ` Daniel Vetter
@ 2017-06-28 11:55     ` Laurent Pinchart
  0 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-28 11:55 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Neil Armstrong, m, Liviu Dudau, dri-devel, Thierry Reding,
	Gerd Hoffmann, Daniel Vetter, Kyungmin Park, Boris Brezillon,
	Thomas Hellstrom, Laurent Pinchart, Alexey Brodkin, Xinliang Liu,
	Xinwei Kong, Tomi Valkeinen, Mali DP Maintainers, Dave Airlie,
	Chen Feng, Jyri Sarha, Vincent Abriou, VMware Graphics,
	Alison Wang

Hi Daniel,

On Wednesday 28 Jun 2017 09:42:54 Daniel Vetter wrote:
> On Wed, Jun 28, 2017 at 12:16:20AM +0300, Laurent Pinchart wrote:
> > diff --git a/include/drm/drm_modeset_helper_vtables.h
> > b/include/drm/drm_modeset_helper_vtables.h index
> > 474a1029ec79..d74a2cafc3de 100644
> > --- a/include/drm/drm_modeset_helper_vtables.h
> > +++ b/include/drm/drm_modeset_helper_vtables.h
> > @@ -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,26 @@ 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.
> 
> A few lines explaing what @old_crtc_state is good for would be good here
> (like we already have for @atomic_disable). Otherwise lgtm.

I'll fix that in v2.

> > +	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	[flat|nested] 51+ messages in thread

* Re: [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult
  2017-06-28 11:27 ` Emil Velikov
@ 2017-06-28 13:10   ` Laurent Pinchart
  2017-06-29 12:39     ` Emil Velikov
  0 siblings, 1 reply; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-28 13:10 UTC (permalink / raw)
  To: Emil Velikov
  Cc: Neil Armstrong, Liviu Dudau, ML dri-devel, Thierry Reding,
	Gerd Hoffmann, Daniel Vetter, Boris Brezillon, Thomas Hellstrom,
	Laurent Pinchart, Alexey Brodkin, Xinliang Liu, Xinwei Kong,
	Tomi Valkeinen, Mali DP Maintainers, Dave Airlie, Chen Feng,
	Jyri Sarha, Vincent Abriou, VMware Graphics, Alison Wang,
	Seung-Woo Kim

Hi Emil,

On Wednesday 28 Jun 2017 12:27:06 Emil Velikov wrote:
> On 27 June 2017 at 21:38, Laurent Pinchart wrote:
> > Hello,
> > 
> > The atomic helpers favour the .enable() and .atomic_disable() CRTC helper
> > operations, but still support the legacy .prepare(), .commit(), .disable()
> > and .dpms() operations. Some drivers have been updated, but most still
> > use various combination of new and legacy operations, leading to
> > confusion among new developers when they read the code.
> 
> Just had a crazy idea:
> 
> Would it make sense for the function(s) that takes the
> driver_foo_funcs as an argument to cross-check for such mistakes?
> Since many of the hooks are optional, one could check for the
> 'forbidden' combinations:
> Atomic drivers should not have any legacy hooks set, while legacy ones
> should not have any of the atomic ones.

I think it's a good idea, although transition to atomic modesetting (following 
the procedure outlined in Daniel's blog) might mix legacy and atomic 
operations.

At the moment the only atomic driver that still uses legacy CRTC helper 
operations is vmwgfx. The driver implements both the .prepare() and 
.atomic_disable() helper operations, with .prepare() being empty. The CRTC 
helpers call those operations from disable_outputs():

                /* Right function depends upon target state. */
                if (new_crtc_state->enable && funcs->prepare)
                        funcs->prepare(crtc);
                else if (funcs->atomic_disable)
                        funcs->atomic_disable(crtc, old_crtc_state);
                else if (funcs->disable)
                        funcs->disable(crtc);
                else
                        funcs->dpms(crtc, DRM_MODE_DPMS_OFF);

.prepare() and .atomic_disable() are thus not completely identical.

I believe this could be addressed by adding

        if (crtc->state->enable)
                return;

to the .atomic_disable() handler in the vmwgfx driver. I'll submit a patch for 
that.

> Of course the idea is not restricted to the CRTC helpers -
> drm_{crtc,encoder,connector,plane,mode_config}_{helper_,}funcs should
> all be applicable.

-- 
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] 51+ messages in thread

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                     ` (4 preceding siblings ...)
  2017-06-28  8:43   ` Boris Brezillon
@ 2017-06-28 13:41   ` Liviu Dudau
  2017-06-28 13:44     ` Laurent Pinchart
  2017-06-28 13:55   ` dri-devel-bounces
                     ` (4 subsequent siblings)
  10 siblings, 1 reply; 51+ messages in thread
From: Liviu Dudau @ 2017-06-28 13:41 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Neil Armstrong, dri-devel, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom, Alexey Brodkin,
	Xinliang Liu, Xinwei Kong, Tomi Valkeinen, Mali DP Maintainers,
	Dave Airlie, Chen Feng, Jyri Sarha, Vincent Abriou,
	VMware Graphics, Alison Wang, Seung-Woo Kim, Philippe Cornu,
	Yannick Fertre, Kyungmin Park

On Wed, Jun 28, 2017 at 12:16:20AM +0300, Laurent Pinchart wrote:
> 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>
> ---
>  drivers/gpu/drm/arc/arcpgu_crtc.c               |  5 ++--
>  drivers/gpu/drm/arm/hdlcd_crtc.c                |  5 ++--
>  drivers/gpu/drm/arm/malidp_crtc.c               |  5 ++--

For the hdlcd and mali-dp changes:

Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>

I'll assume you are going to push the changes through drm-misc rather
than me cherry picking the changes from the patch.

Thanks!
Liviu

>  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        | 38 +++++++++++++------------
>  31 files changed, 117 insertions(+), 80 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..d74a2cafc3de 100644
> --- a/include/drm/drm_modeset_helper_vtables.h
> +++ b/include/drm/drm_modeset_helper_vtables.h
> @@ -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,26 @@ 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.
> +	 */
> +	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
> 

-- 
====================
| I would like to |
| fix the world,  |
| but they're not |
| giving me the   |
 \ source code!  /
  ---------------
    ¯\_(ツ)_/¯
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-28 13:41   ` Liviu Dudau
@ 2017-06-28 13:44     ` Laurent Pinchart
  0 siblings, 0 replies; 51+ messages in thread
From: Laurent Pinchart @ 2017-06-28 13:44 UTC (permalink / raw)
  To: Liviu Dudau
  Cc: Neil Armstrong, dri-devel, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom,
	Laurent Pinchart, Alexey Brodkin, Xinliang Liu, Xinwei Kong,
	Tomi Valkeinen, Mali DP Maintainers, Dave Airlie, Chen Feng,
	Jyri Sarha, Vincent Abriou, VMware Graphics, Alison Wang,
	S eung-Woo Kim, Philippe Cornu

Hi Liviu,

On Wednesday 28 Jun 2017 14:41:49 Liviu Dudau wrote:
> On Wed, Jun 28, 2017 at 12:16:20AM +0300, Laurent Pinchart wrote:
> > 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>
> > ---
> > 
> >  drivers/gpu/drm/arc/arcpgu_crtc.c               |  5 ++--
> >  drivers/gpu/drm/arm/hdlcd_crtc.c                |  5 ++--
> >  drivers/gpu/drm/arm/malidp_crtc.c               |  5 ++--
> 
> For the hdlcd and mali-dp changes:
> 
> Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>
> 
> I'll assume you are going to push the changes through drm-misc rather
> than me cherry picking the changes from the patch.

Yes I will, you don't need to worry about this patch :-)

> >  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        | 38 +++++++++----------
> >  31 files changed, 117 insertions(+), 80 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] 51+ messages in thread

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                     ` (5 preceding siblings ...)
  2017-06-28 13:41   ` Liviu Dudau
@ 2017-06-28 13:55   ` dri-devel-bounces
  2017-06-29  7:48   ` Philippe CORNU
                     ` (3 subsequent siblings)
  10 siblings, 0 replies; 51+ messages in thread
From: dri-devel-bounces @ 2017-06-28 13:55 UTC (permalink / raw)
  To: Laurent Pinchart, dri-devel
  Cc: Sinclair, Neil Armstrong, Liviu Dudau, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Alexey Brodkin,
	Mali DP Maintainers, Dave Airlie, Chen Feng, Jyri Sarha,
	Alison Wang, Seung-Woo Kim, Philippe Cornu, Kyungmin Park,
	Rongrong Zou, Maxime Ripard, Shawn Guo

<syeh@vmware.com>,Thierry Reding <thierry.reding@gmail.com>,Thomas Hellstrom <thellstrom@vmware.com>,Tomi Valkeinen <tomi.valkeinen@ti.com>,VMware Graphics <linux-graphics-maintainer@vmware.com>,Vincent Abriou <vincent.abriou@st.com>,Xinliang Liu <z.liuxinliang@hisilicon.com>,Xinwei Kong <kong.kongxinwei@hisilicon.com>,Yannick Fertre <yannick.fertre@st.com>
From: Stefan Agner <stefan@agner.ch>
Message-ID: <961A615D-ED2E-4FA2-A49E-BB250F3E9DBB@agner.ch>



On June 27, 2017 3:16:20 PM MDT, Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> wrote:
>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>
>---
> 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 ++--

For fsl-dcu:

Acked-by: Stefan Agner <stefan@agner.ch>

> 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        | 38
>+++++++++++++------------
> 31 files changed, 117 insertions(+), 80 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_fu

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                     ` (6 preceding siblings ...)
  2017-06-28 13:55   ` dri-devel-bounces
@ 2017-06-29  7:48   ` Philippe CORNU
  2017-06-29  8:00   ` Vincent ABRIOU
                     ` (2 subsequent siblings)
  10 siblings, 0 replies; 51+ messages in thread
From: Philippe CORNU @ 2017-06-29  7:48 UTC (permalink / raw)
  To: Laurent Pinchart, dri-devel
  Cc: Neil Armstrong, Liviu Dudau, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom, Alexey Brodkin,
	Kyungmin Park, Xinliang Liu, Xinwei Kong, Tomi Valkeinen,
	Mali DP Maintainers, Dave Airlie, Chen Feng, Jyri Sarha,
	Vincent ABRIOU, VMware Graphics, Alison Wang, Seung-Woo Kim,
	Yannick FERTRE, Rongrong Zou



On 06/27/2017 11:16 PM, Laurent Pinchart wrote:
> 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>
> ---
>   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 ++--

For stm,

Tested-by: Philippe Cornu <philippe.cornu@st.com>
Acked-by: Philippe Cornu <philippe.cornu@st.com>

Many thanks
Philippe

>   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        | 38 +++++++++++++------------
>   31 files changed, 117 insertions(+), 80 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..d74a2cafc3de 100644
> --- a/include/drm/drm_modeset_helper_vtables.h
> +++ b/include/drm/drm_modeset_helper_vtables.h
> @@ -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,26 @@ 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.
> +	 */
> +	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
> 
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-27 21:16 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
                     ` (3 preceding siblings ...)
  2017-06-28  8:45   ` Boris Brezillon
@ 2017-06-29  7:49   ` Philippe CORNU
  2017-06-29  8:00   ` Vincent ABRIOU
                     ` (2 subsequent siblings)
  7 siblings, 0 replies; 51+ messages in thread
From: Philippe CORNU @ 2017-06-29  7:49 UTC (permalink / raw)
  To: Laurent Pinchart, dri-devel
  Cc: Neil Armstrong, Liviu Dudau, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom, Alexey Brodkin,
	Kyungmin Park, Xinliang Liu, Xinwei Kong, Tomi Valkeinen,
	Mali DP Maintainers, Dave Airlie, Chen Feng, Jyri Sarha,
	Vincent ABRIOU, VMware Graphics, Seung-Woo Kim, Yannick FERTRE,
	Rongrong Zou, Maxime Ripard



On 06/27/2017 11:16 PM, 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>
> ---
>   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 +++--

For stm,

Tested-by: Philippe Cornu <philippe.cornu@st.com>
Acked-by: Philippe Cornu <philippe.cornu@st.com>

Many thanks
Philippe

>   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)
> 
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                     ` (7 preceding siblings ...)
  2017-06-29  7:48   ` Philippe CORNU
@ 2017-06-29  8:00   ` Vincent ABRIOU
  2017-06-29 12:59   ` Thomas Hellstrom
  2017-07-03  8:57   ` Jyri Sarha
  10 siblings, 0 replies; 51+ messages in thread
From: Vincent ABRIOU @ 2017-06-29  8:00 UTC (permalink / raw)
  To: Laurent Pinchart, 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, Mali DP Maintainers,
	Dave Airlie, Chen Feng, Jyri Sarha, VMware Graphics, Alison Wang,
	Seung-Woo Kim, Philippe CORNU, Yannick FERTRE, Kyungmin Park,
	Rongrong Zou



On 06/27/2017 11:16 PM, Laurent Pinchart wrote:
> 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>
> ---
>   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 ++--

For sti:

Acked-by: Vincent Abriou <vincent.abriou@st.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-27 21:16 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
                     ` (4 preceding siblings ...)
  2017-06-29  7:49   ` Philippe CORNU
@ 2017-06-29  8:00   ` Vincent ABRIOU
  2017-06-29 13:00   ` Thomas Hellstrom
  2017-07-03  8:53   ` Jyri Sarha
  7 siblings, 0 replies; 51+ messages in thread
From: Vincent ABRIOU @ 2017-06-29  8:00 UTC (permalink / raw)
  To: Laurent Pinchart, dri-devel
  Cc: Neil Armstrong, Liviu Dudau, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom, Alexey Brodkin,
	Kyungmin Park, Xinliang Liu, Xinwei Kong, Tomi Valkeinen,
	Mali DP Maintainers, Dave Airlie, Chen Feng, Jyri Sarha,
	VMware Graphics, Seung-Woo Kim, Philippe CORNU, Yannick FERTRE,
	Rongrong Zou, Maxime Ripard



On 06/27/2017 11:16 PM, 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>
> ---
>   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 +++--

For sti:

Acked-by: Vincent Abriou <vincent.abriou@st.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult
  2017-06-28 13:10   ` Laurent Pinchart
@ 2017-06-29 12:39     ` Emil Velikov
  0 siblings, 0 replies; 51+ messages in thread
From: Emil Velikov @ 2017-06-29 12:39 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Neil Armstrong, Liviu Dudau, ML dri-devel, Thierry Reding,
	Gerd Hoffmann, Daniel Vetter, Boris Brezillon, Thomas Hellstrom,
	Laurent Pinchart, Alexey Brodkin, Xinliang Liu, Xinwei Kong,
	Tomi Valkeinen, Mali DP Maintainers, Dave Airlie, Chen Feng,
	Jyri Sarha, Vincent Abriou, VMware Graphics, Alison Wang,
	Seung-Woo Kim

On 28 June 2017 at 14:10, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
> Hi Emil,
>
> On Wednesday 28 Jun 2017 12:27:06 Emil Velikov wrote:
>> On 27 June 2017 at 21:38, Laurent Pinchart wrote:
>> > Hello,
>> >
>> > The atomic helpers favour the .enable() and .atomic_disable() CRTC helper
>> > operations, but still support the legacy .prepare(), .commit(), .disable()
>> > and .dpms() operations. Some drivers have been updated, but most still
>> > use various combination of new and legacy operations, leading to
>> > confusion among new developers when they read the code.
>>
>> Just had a crazy idea:
>>
>> Would it make sense for the function(s) that takes the
>> driver_foo_funcs as an argument to cross-check for such mistakes?
>> Since many of the hooks are optional, one could check for the
>> 'forbidden' combinations:
>> Atomic drivers should not have any legacy hooks set, while legacy ones
>> should not have any of the atomic ones.
>
> I think it's a good idea, although transition to atomic modesetting (following
> the procedure outlined in Daniel's blog) might mix legacy and atomic
> operations.
>
Right, there's that and drivers which use atomic internally, but don't
advertise it.
IIRC only nouveau is in the boat, but could be addressed.

To minimise noise one could use WARN_ONCE and apply only for legacy
hooks on atomic drivers. The inverse - atomic hooks on legacy drivers,
should be fine but will cause the occasional distraction.

> At the moment the only atomic driver that still uses legacy CRTC helper
> operations is vmwgfx. The driver implements both the .prepare() and
> .atomic_disable() helper operations, with .prepare() being empty. The CRTC
> helpers call those operations from disable_outputs():
>
>                 /* Right function depends upon target state. */
>                 if (new_crtc_state->enable && funcs->prepare)
>                         funcs->prepare(crtc);
>                 else if (funcs->atomic_disable)
>                         funcs->atomic_disable(crtc, old_crtc_state);
>                 else if (funcs->disable)
>                         funcs->disable(crtc);
>                 else
>                         funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
>
> .prepare() and .atomic_disable() are thus not completely identical.
>
> I believe this could be addressed by adding
>
>         if (crtc->state->enable)
>                 return;
>
> to the .atomic_disable() handler in the vmwgfx driver. I'll submit a patch for
> that.
>
With the guards mentioned, the VMWare team would have spotted/fixed
this as part of their atomic series.

Either way - it's just an idea, plus I won't be able to pursue it anytime soon.

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

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

* Re: [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation
  2017-06-27 21:16 ` [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation Laurent Pinchart
@ 2017-06-29 12:56   ` Thomas Hellstrom
  0 siblings, 0 replies; 51+ messages in thread
From: Thomas Hellstrom @ 2017-06-29 12:56 UTC (permalink / raw)
  To: Laurent Pinchart, dri-devel
  Cc: Daniel Vetter, Thomas Hellstrom, VMware Graphics

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

On 06/27/2017 11:16 PM, Laurent Pinchart wrote:
> The CRTC .prepare() helper operation is part of the legacy helpers and
> is deprecated in favour of the .disable() helper operation. As the
> vmwgfx driver provides a .disable() helper operation, and as the
> .prepare() helper operation implementation is empty, we can remove it.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> ---
>   drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 13 -------------
>   1 file changed, 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> index 449ed4fba0f2..639e16703b80 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> @@ -203,18 +203,6 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc)
>   }
>   
>   /**
> - * vmw_ldu_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_ldu_crtc_helper_prepare(struct drm_crtc *crtc)
> -{
> -}
> -
> -/**
>    * vmw_ldu_crtc_helper_commit - Noop
>    *
>    * @crtc: CRTC associated with the new screen
> @@ -388,7 +376,6 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
>   };
>   
>   static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
> -	.prepare = vmw_ldu_crtc_helper_prepare,
>   	.commit = vmw_ldu_crtc_helper_commit,
>   	.disable = vmw_ldu_crtc_helper_disable,
>   	.mode_set_nofb = vmw_ldu_crtc_mode_set_nofb,


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

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

* Re: [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable()
  2017-06-27 21:16 ` [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
@ 2017-06-29 12:58   ` Thomas Hellstrom
  0 siblings, 0 replies; 51+ messages in thread
From: Thomas Hellstrom @ 2017-06-29 12:58 UTC (permalink / raw)
  To: Laurent Pinchart, dri-devel
  Cc: Daniel Vetter, Thomas Hellstrom, VMware Graphics

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


On 06/27/2017 11:16 PM, Laurent Pinchart wrote:
> The CRTC helper .commit() operation is legacy code, the atomic helpers
> prefer the .enable() operation. Replace the .commit() helper operation
> with .enable() in the driver.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> ---
>   drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c  | 6 +++---
>   drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 6 +++---
>   drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 4 ++--
>   3 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> index 639e16703b80..f8acd3a15523 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_commit - Noop
> + * vmw_ldu_crtc_helper_enable - Noop
>    *
>    * @crtc: CRTC associated with the new screen
>    *
> @@ -212,7 +212,7 @@ 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_commit(struct drm_crtc *crtc)
> +static void vmw_ldu_crtc_helper_enable(struct drm_crtc *crtc)
>   {
>   }
>   
> @@ -376,7 +376,7 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
>   };
>   
>   static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
> -	.commit = vmw_ldu_crtc_helper_commit,
> +	.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,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> index 3b917c9b0c21..1cb826c503bf 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> @@ -270,13 +270,13 @@ static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
>   }
>   
>   /**
> - * vmw_sou_crtc_helper_commit - Noop
> + * vmw_sou_crtc_helper_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_commit(struct drm_crtc *crtc)
> +static void vmw_sou_crtc_helper_enable(struct drm_crtc *crtc)
>   {
>   }
>   
> @@ -573,7 +573,7 @@ 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,
> -	.commit = vmw_sou_crtc_helper_commit,
> +	.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,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> index 6aecba6cd5e2..4eb93b47d6db 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> @@ -412,7 +412,7 @@ static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
>   }
>   
>   
> -static void vmw_stdu_crtc_helper_commit(struct drm_crtc *crtc)
> +static void vmw_stdu_crtc_helper_enable(struct drm_crtc *crtc)
>   {
>   	struct vmw_private *dev_priv;
>   	struct vmw_screen_target_display_unit *stdu;
> @@ -1415,7 +1415,7 @@ 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,
> -	.commit = vmw_stdu_crtc_helper_commit,
> +	.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,


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

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

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                     ` (8 preceding siblings ...)
  2017-06-29  8:00   ` Vincent ABRIOU
@ 2017-06-29 12:59   ` Thomas Hellstrom
  2017-07-03  8:57   ` Jyri Sarha
  10 siblings, 0 replies; 51+ messages in thread
From: Thomas Hellstrom @ 2017-06-29 12:59 UTC (permalink / raw)
  To: Laurent Pinchart, 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

For the vmwgfx part:

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



On 06/27/2017 11:16 PM, Laurent Pinchart wrote:
> 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>
> ---
>   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        | 38 +++++++++++++------------
>   31 files changed, 117 insertions(+), 80 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..d74a2cafc3de 100644
> --- a/include/drm/drm_modeset_helper_vtables.h
> +++ b/include/drm/drm_modeset_helper_vtables.h
> @@ -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,26 @@ 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.
> +	 */
> +	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



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

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

* Re: [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable()
  2017-06-27 21:16 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
                     ` (5 preceding siblings ...)
  2017-06-29  8:00   ` Vincent ABRIOU
@ 2017-06-29 13:00   ` Thomas Hellstrom
  2017-07-03  8:53   ` Jyri Sarha
  7 siblings, 0 replies; 51+ messages in thread
From: Thomas Hellstrom @ 2017-06-29 13:00 UTC (permalink / raw)
  To: Laurent Pinchart, 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

For the vmwgfx part:

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



On 06/27/2017 11:16 PM, 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>
> ---
>   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)


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

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

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

On 06/28/17 00:16, 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: Jyri Sarha <jsarha@ti.com>

Thanks,
Jyri

> ---
>  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 +++++++-
For ^^^
>  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(-)
> 
...
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
  2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
                     ` (9 preceding siblings ...)
  2017-06-29 12:59   ` Thomas Hellstrom
@ 2017-07-03  8:57   ` Jyri Sarha
  10 siblings, 0 replies; 51+ messages in thread
From: Jyri Sarha @ 2017-07-03  8:57 UTC (permalink / raw)
  To: Laurent Pinchart, dri-devel
  Cc: Neil Armstrong, Liviu Dudau, Thierry Reding, Gerd Hoffmann,
	Daniel Vetter, Boris Brezillon, Thomas Hellstrom, Alexey Brodkin,
	Kyungmin Park, Xinliang Liu, Xinwei Kong, Tomi Valkeinen,
	Mali DP Maintainers, Dave Airlie, Chen Feng, Vincent Abriou,
	VMware Graphics, Alison Wang, Seung-Woo Kim, Philippe Cornu,
	Yannick Fertre, Rongro

On 06/28/17 00:16, Laurent Pinchart wrote:
> 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: Jyri Sarha <jsarha@ti.com>

Thanks,
Jyri

> ---
>  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 +++++-
For ^^^
>  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        | 38 +++++++++++++------------
>  31 files changed, 117 insertions(+), 80 deletions(-)
> 
...
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

end of thread, other threads:[~2017-07-03  8:58 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-27 20:38 [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Laurent Pinchart
2017-06-27 20:38 ` [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation Laurent Pinchart
2017-06-27 20:38 ` [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() " Laurent Pinchart
2017-06-27 20:38 ` [PATCH 3/8] drm: qxl: Remove unused CRTC .dpms() " Laurent Pinchart
2017-06-27 20:38 ` [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
2017-06-27 20:38 ` [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation Laurent Pinchart
2017-06-27 20:38 ` [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
2017-06-28  7:39   ` Daniel Vetter
2017-06-28  8:25     ` Laurent Pinchart
2017-06-27 20:38 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
2017-06-27 20:38 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
2017-06-27 21:16 ` [PATCH 1/8] drm: arcpgu: Remove CRTC .commit() helper operation Laurent Pinchart
2017-06-28  8:36   ` Alexey Brodkin
2017-06-27 21:16 ` [PATCH 2/8] drm: arcpgu: Remove CRTC .prepare() " Laurent Pinchart
2017-06-28  8:36   ` Alexey Brodkin
2017-06-27 21:16 ` [PATCH 3/8] drm: qxl: Remove unused CRTC .dpms() " Laurent Pinchart
2017-06-27 21:16 ` [PATCH 4/8] drm: qxl: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
2017-06-28  8:14   ` Daniel Vetter
2017-06-27 21:16 ` [PATCH 5/8] drm: vmwgfx: Remove unneeded CRTC .prepare() helper operation Laurent Pinchart
2017-06-29 12:56   ` Thomas Hellstrom
2017-06-27 21:16 ` [PATCH 6/8] drm: vmwgfx: Replace CRTC .commit() helper operation with .enable() Laurent Pinchart
2017-06-29 12:58   ` Thomas Hellstrom
2017-06-27 21:16 ` [PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function Laurent Pinchart
2017-06-28  6:46   ` Maxime Ripard
2017-06-28  7:42   ` Daniel Vetter
2017-06-28 11:55     ` Laurent Pinchart
2017-06-28  8:15   ` Philipp Zabel
2017-06-28  8:37   ` Alexey Brodkin
2017-06-28  8:43   ` Boris Brezillon
2017-06-28 13:41   ` Liviu Dudau
2017-06-28 13:44     ` Laurent Pinchart
2017-06-28 13:55   ` dri-devel-bounces
2017-06-29  7:48   ` Philippe CORNU
2017-06-29  8:00   ` Vincent ABRIOU
2017-06-29 12:59   ` Thomas Hellstrom
2017-07-03  8:57   ` Jyri Sarha
2017-06-27 21:16 ` [PATCH 8/8] drm: Convert atomic drivers from CRTC .disable() to .atomic_disable() Laurent Pinchart
2017-06-28  6:47   ` Maxime Ripard
2017-06-28  8:15   ` Philipp Zabel
2017-06-28  8:39   ` Alexey Brodkin
2017-06-28  8:45   ` Boris Brezillon
2017-06-29  7:49   ` Philippe CORNU
2017-06-29  8:00   ` Vincent ABRIOU
2017-06-29 13:00   ` Thomas Hellstrom
2017-07-03  8:53   ` Jyri Sarha
2017-06-28  8:16 ` [PATCH 0/8] Cleanup CRTC .enable()/.disable() cargo-cult Daniel Vetter
2017-06-28  8:20   ` Daniel Vetter
2017-06-28  8:23     ` Laurent Pinchart
2017-06-28 11:27 ` Emil Velikov
2017-06-28 13:10   ` Laurent Pinchart
2017-06-29 12:39     ` Emil Velikov

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.