[PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function

Thomas Hellstrom thomas at shipmail.org
Thu Jun 29 12:59:59 UTC 2017


For the vmwgfx part:

Reviewed-by: Thomas Hellstrom <thellstrom at 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 at 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





More information about the dri-devel mailing list