[12/13] drm/i915: Pass atomic state to encoder hooks
diff mbox series

Message ID 20200313164831.5980-13-ville.syrjala@linux.intel.com
State New
Headers show
Series
  • drm/i915: Port sync for skl+
Related show

Commit Message

Ville Syrjälä March 13, 2020, 4:48 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

We're going to want access to the atomic state for iterating
the slave crtcs when enabling the port sync master crtc. Pass
the atomic state all the way down.

The alternative would be yet another encoder hook which we'll
have to call after all the normal modeset stuff is done. Not
really a fan of yet another hook just for this.

Note that during readout state sanitation we are now going
to pass NULL as the atomic state since we don't have one.
We need to change that and then we can also s/crtc_state/crtc/
and s/conn_state/conn/ for the encoder hooks as well.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/icl_dsi.c        | 15 ++--
 drivers/gpu/drm/i915/display/intel_crt.c      | 33 ++++---
 drivers/gpu/drm/i915/display/intel_ddi.c      | 89 ++++++++++++-------
 drivers/gpu/drm/i915/display/intel_ddi.h      |  3 +-
 drivers/gpu/drm/i915/display/intel_display.c  | 26 ++++--
 .../drm/i915/display/intel_display_types.h    | 21 +++--
 drivers/gpu/drm/i915/display/intel_dp.c       | 55 +++++++-----
 drivers/gpu/drm/i915/display/intel_dp_mst.c   | 21 +++--
 drivers/gpu/drm/i915/display/intel_dvo.c      |  9 +-
 drivers/gpu/drm/i915/display/intel_hdcp.c     |  3 +-
 drivers/gpu/drm/i915/display/intel_hdcp.h     |  4 +-
 drivers/gpu/drm/i915/display/intel_hdmi.c     | 59 +++++++-----
 drivers/gpu/drm/i915/display/intel_lvds.c     | 22 +++--
 drivers/gpu/drm/i915/display/intel_panel.c    |  3 +-
 drivers/gpu/drm/i915/display/intel_panel.h    |  3 +-
 drivers/gpu/drm/i915/display/intel_sdvo.c     | 17 ++--
 drivers/gpu/drm/i915/display/intel_tv.c       |  9 +-
 drivers/gpu/drm/i915/display/vlv_dsi.c        | 12 ++-
 18 files changed, 260 insertions(+), 144 deletions(-)

Comments

Souza, Jose April 2, 2020, 1:18 a.m. UTC | #1
On Fri, 2020-03-13 at 18:48 +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> We're going to want access to the atomic state for iterating
> the slave crtcs when enabling the port sync master crtc. Pass
> the atomic state all the way down.
> 
> The alternative would be yet another encoder hook which we'll
> have to call after all the normal modeset stuff is done. Not
> really a fan of yet another hook just for this.
> 
> Note that during readout state sanitation we are now going
> to pass NULL as the atomic state since we don't have one.
> We need to change that and then we can also s/crtc_state/crtc/
> and s/conn_state/conn/ for the encoder hooks as well.

Reviewed-by: José Roberto de Souza <jose.souza@intel.com>

> 
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/icl_dsi.c        | 15 ++--
>  drivers/gpu/drm/i915/display/intel_crt.c      | 33 ++++---
>  drivers/gpu/drm/i915/display/intel_ddi.c      | 89 ++++++++++++-----
> --
>  drivers/gpu/drm/i915/display/intel_ddi.h      |  3 +-
>  drivers/gpu/drm/i915/display/intel_display.c  | 26 ++++--
>  .../drm/i915/display/intel_display_types.h    | 21 +++--
>  drivers/gpu/drm/i915/display/intel_dp.c       | 55 +++++++-----
>  drivers/gpu/drm/i915/display/intel_dp_mst.c   | 21 +++--
>  drivers/gpu/drm/i915/display/intel_dvo.c      |  9 +-
>  drivers/gpu/drm/i915/display/intel_hdcp.c     |  3 +-
>  drivers/gpu/drm/i915/display/intel_hdcp.h     |  4 +-
>  drivers/gpu/drm/i915/display/intel_hdmi.c     | 59 +++++++-----
>  drivers/gpu/drm/i915/display/intel_lvds.c     | 22 +++--
>  drivers/gpu/drm/i915/display/intel_panel.c    |  3 +-
>  drivers/gpu/drm/i915/display/intel_panel.h    |  3 +-
>  drivers/gpu/drm/i915/display/intel_sdvo.c     | 17 ++--
>  drivers/gpu/drm/i915/display/intel_tv.c       |  9 +-
>  drivers/gpu/drm/i915/display/vlv_dsi.c        | 12 ++-
>  18 files changed, 260 insertions(+), 144 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c
> b/drivers/gpu/drm/i915/display/icl_dsi.c
> index 17cee6f80d8b..ea9907c3e5ba 100644
> --- a/drivers/gpu/drm/i915/display/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/display/icl_dsi.c
> @@ -1088,7 +1088,8 @@ static void gen11_dsi_powerup_panel(struct
> intel_encoder *encoder)
>  	wait_for_cmds_dispatched_to_panel(encoder);
>  }
>  
> -static void gen11_dsi_pre_pll_enable(struct intel_encoder *encoder,
> +static void gen11_dsi_pre_pll_enable(struct intel_atomic_state
> *state,
> +				     struct intel_encoder *encoder,
>  				     const struct intel_crtc_state
> *crtc_state,
>  				     const struct drm_connector_state
> *conn_state)
>  {
> @@ -1099,7 +1100,8 @@ static void gen11_dsi_pre_pll_enable(struct
> intel_encoder *encoder,
>  	gen11_dsi_program_esc_clk_div(encoder, crtc_state);
>  }
>  
> -static void gen11_dsi_pre_enable(struct intel_encoder *encoder,
> +static void gen11_dsi_pre_enable(struct intel_atomic_state *state,
> +				 struct intel_encoder *encoder,
>  				 const struct intel_crtc_state
> *pipe_config,
>  				 const struct drm_connector_state
> *conn_state)
>  {
> @@ -1118,7 +1120,8 @@ static void gen11_dsi_pre_enable(struct
> intel_encoder *encoder,
>  	gen11_dsi_set_transcoder_timings(encoder, pipe_config);
>  }
>  
> -static void gen11_dsi_enable(struct intel_encoder *encoder,
> +static void gen11_dsi_enable(struct intel_atomic_state *state,
> +			     struct intel_encoder *encoder,
>  			     const struct intel_crtc_state *crtc_state,
>  			     const struct drm_connector_state
> *conn_state)
>  {
> @@ -1264,7 +1267,8 @@ static void gen11_dsi_disable_io_power(struct
> intel_encoder *encoder)
>  	}
>  }
>  
> -static void gen11_dsi_disable(struct intel_encoder *encoder,
> +static void gen11_dsi_disable(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *old_crtc_state,
>  			      const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -1290,7 +1294,8 @@ static void gen11_dsi_disable(struct
> intel_encoder *encoder,
>  	gen11_dsi_disable_io_power(encoder);
>  }
>  
> -static void gen11_dsi_post_disable(struct intel_encoder *encoder,
> +static void gen11_dsi_post_disable(struct intel_atomic_state *state,
> +				   struct intel_encoder *encoder,
>  				   const struct intel_crtc_state
> *old_crtc_state,
>  				   const struct drm_connector_state
> *old_conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_crt.c
> b/drivers/gpu/drm/i915/display/intel_crt.c
> index 78f9b6cde810..80c91404046f 100644
> --- a/drivers/gpu/drm/i915/display/intel_crt.c
> +++ b/drivers/gpu/drm/i915/display/intel_crt.c
> @@ -203,27 +203,31 @@ static void intel_crt_set_dpms(struct
> intel_encoder *encoder,
>  	intel_de_write(dev_priv, crt->adpa_reg, adpa);
>  }
>  
> -static void intel_disable_crt(struct intel_encoder *encoder,
> +static void intel_disable_crt(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *old_crtc_state,
>  			      const struct drm_connector_state
> *old_conn_state)
>  {
>  	intel_crt_set_dpms(encoder, old_crtc_state, DRM_MODE_DPMS_OFF);
>  }
>  
> -static void pch_disable_crt(struct intel_encoder *encoder,
> +static void pch_disable_crt(struct intel_atomic_state *state,
> +			    struct intel_encoder *encoder,
>  			    const struct intel_crtc_state
> *old_crtc_state,
>  			    const struct drm_connector_state
> *old_conn_state)
>  {
>  }
>  
> -static void pch_post_disable_crt(struct intel_encoder *encoder,
> +static void pch_post_disable_crt(struct intel_atomic_state *state,
> +				 struct intel_encoder *encoder,
>  				 const struct intel_crtc_state
> *old_crtc_state,
>  				 const struct drm_connector_state
> *old_conn_state)
>  {
> -	intel_disable_crt(encoder, old_crtc_state, old_conn_state);
> +	intel_disable_crt(state, encoder, old_crtc_state,
> old_conn_state);
>  }
>  
> -static void hsw_disable_crt(struct intel_encoder *encoder,
> +static void hsw_disable_crt(struct intel_atomic_state *state,
> +			    struct intel_encoder *encoder,
>  			    const struct intel_crtc_state
> *old_crtc_state,
>  			    const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -234,7 +238,8 @@ static void hsw_disable_crt(struct intel_encoder
> *encoder,
>  	intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, false);
>  }
>  
> -static void hsw_post_disable_crt(struct intel_encoder *encoder,
> +static void hsw_post_disable_crt(struct intel_atomic_state *state,
> +				 struct intel_encoder *encoder,
>  				 const struct intel_crtc_state
> *old_crtc_state,
>  				 const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -250,19 +255,20 @@ static void hsw_post_disable_crt(struct
> intel_encoder *encoder,
>  
>  	intel_ddi_disable_pipe_clock(old_crtc_state);
>  
> -	pch_post_disable_crt(encoder, old_crtc_state, old_conn_state);
> +	pch_post_disable_crt(state, encoder, old_crtc_state,
> old_conn_state);
>  
>  	lpt_disable_pch_transcoder(dev_priv);
>  	lpt_disable_iclkip(dev_priv);
>  
> -	intel_ddi_fdi_post_disable(encoder, old_crtc_state,
> old_conn_state);
> +	intel_ddi_fdi_post_disable(state, encoder, old_crtc_state,
> old_conn_state);
>  
>  	drm_WARN_ON(&dev_priv->drm, !old_crtc_state->has_pch_encoder);
>  
>  	intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
>  }
>  
> -static void hsw_pre_pll_enable_crt(struct intel_encoder *encoder,
> +static void hsw_pre_pll_enable_crt(struct intel_atomic_state *state,
> +				   struct intel_encoder *encoder,
>  				   const struct intel_crtc_state
> *crtc_state,
>  				   const struct drm_connector_state
> *conn_state)
>  {
> @@ -273,7 +279,8 @@ static void hsw_pre_pll_enable_crt(struct
> intel_encoder *encoder,
>  	intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, false);
>  }
>  
> -static void hsw_pre_enable_crt(struct intel_encoder *encoder,
> +static void hsw_pre_enable_crt(struct intel_atomic_state *state,
> +			       struct intel_encoder *encoder,
>  			       const struct intel_crtc_state
> *crtc_state,
>  			       const struct drm_connector_state
> *conn_state)
>  {
> @@ -290,7 +297,8 @@ static void hsw_pre_enable_crt(struct
> intel_encoder *encoder,
>  	intel_ddi_enable_pipe_clock(crtc_state);
>  }
>  
> -static void hsw_enable_crt(struct intel_encoder *encoder,
> +static void hsw_enable_crt(struct intel_atomic_state *state,
> +			   struct intel_encoder *encoder,
>  			   const struct intel_crtc_state *crtc_state,
>  			   const struct drm_connector_state
> *conn_state)
>  {
> @@ -314,7 +322,8 @@ static void hsw_enable_crt(struct intel_encoder
> *encoder,
>  	intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
>  }
>  
> -static void intel_enable_crt(struct intel_encoder *encoder,
> +static void intel_enable_crt(struct intel_atomic_state *state,
> +			     struct intel_encoder *encoder,
>  			     const struct intel_crtc_state *crtc_state,
>  			     const struct drm_connector_state
> *conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 9e6eb0ee5ba4..98475c81f1da 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -3017,7 +3017,8 @@ static void intel_ddi_disable_fec_state(struct
> intel_encoder *encoder,
>  	intel_de_posting_read(dev_priv, intel_dp->regs.dp_tp_ctl);
>  }
>  
> -static void tgl_ddi_pre_enable_dp(struct intel_encoder *encoder,
> +static void tgl_ddi_pre_enable_dp(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *crtc_state,
>  				  const struct drm_connector_state
> *conn_state)
>  {
> @@ -3157,7 +3158,8 @@ static void tgl_ddi_pre_enable_dp(struct
> intel_encoder *encoder,
>  	intel_dsc_enable(encoder, crtc_state);
>  }
>  
> -static void hsw_ddi_pre_enable_dp(struct intel_encoder *encoder,
> +static void hsw_ddi_pre_enable_dp(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *crtc_state,
>  				  const struct drm_connector_state
> *conn_state)
>  {
> @@ -3230,16 +3232,17 @@ static void hsw_ddi_pre_enable_dp(struct
> intel_encoder *encoder,
>  	intel_dsc_enable(encoder, crtc_state);
>  }
>  
> -static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
> +static void intel_ddi_pre_enable_dp(struct intel_atomic_state
> *state,
> +				    struct intel_encoder *encoder,
>  				    const struct intel_crtc_state
> *crtc_state,
>  				    const struct drm_connector_state
> *conn_state)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>  
>  	if (INTEL_GEN(dev_priv) >= 12)
> -		tgl_ddi_pre_enable_dp(encoder, crtc_state, conn_state);
> +		tgl_ddi_pre_enable_dp(state, encoder, crtc_state,
> conn_state);
>  	else
> -		hsw_ddi_pre_enable_dp(encoder, crtc_state, conn_state);
> +		hsw_ddi_pre_enable_dp(state, encoder, crtc_state,
> conn_state);
>  
>  	/* MST will call a setting of MSA after an allocating of
> Virtual Channel
>  	 * from MST encoder pre_enable callback.
> @@ -3251,7 +3254,8 @@ static void intel_ddi_pre_enable_dp(struct
> intel_encoder *encoder,
>  	}
>  }
>  
> -static void intel_ddi_pre_enable_hdmi(struct intel_encoder *encoder,
> +static void intel_ddi_pre_enable_hdmi(struct intel_atomic_state
> *state,
> +				      struct intel_encoder *encoder,
>  				      const struct intel_crtc_state
> *crtc_state,
>  				      const struct drm_connector_state
> *conn_state)
>  {
> @@ -3291,7 +3295,8 @@ static void intel_ddi_pre_enable_hdmi(struct
> intel_encoder *encoder,
>  				       crtc_state, conn_state);
>  }
>  
> -static void intel_ddi_pre_enable(struct intel_encoder *encoder,
> +static void intel_ddi_pre_enable(struct intel_atomic_state *state,
> +				 struct intel_encoder *encoder,
>  				 const struct intel_crtc_state
> *crtc_state,
>  				 const struct drm_connector_state
> *conn_state)
>  {
> @@ -3320,12 +3325,14 @@ static void intel_ddi_pre_enable(struct
> intel_encoder *encoder,
>  	intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
>  
>  	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
> -		intel_ddi_pre_enable_hdmi(encoder, crtc_state,
> conn_state);
> +		intel_ddi_pre_enable_hdmi(state, encoder, crtc_state,
> +					  conn_state);
>  	} else {
>  		struct intel_lspcon *lspcon =
>  				enc_to_intel_lspcon(encoder);
>  
> -		intel_ddi_pre_enable_dp(encoder, crtc_state,
> conn_state);
> +		intel_ddi_pre_enable_dp(state, encoder, crtc_state,
> +					conn_state);
>  		if (lspcon->active) {
>  			struct intel_digital_port *dig_port =
>  					enc_to_dig_port(encoder);
> @@ -3368,7 +3375,8 @@ static void intel_disable_ddi_buf(struct
> intel_encoder *encoder,
>  		intel_wait_ddi_buf_idle(dev_priv, port);
>  }
>  
> -static void intel_ddi_post_disable_dp(struct intel_encoder *encoder,
> +static void intel_ddi_post_disable_dp(struct intel_atomic_state
> *state,
> +				      struct intel_encoder *encoder,
>  				      const struct intel_crtc_state
> *old_crtc_state,
>  				      const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -3424,7 +3432,8 @@ static void intel_ddi_post_disable_dp(struct
> intel_encoder *encoder,
>  	intel_ddi_clk_disable(encoder);
>  }
>  
> -static void intel_ddi_post_disable_hdmi(struct intel_encoder
> *encoder,
> +static void intel_ddi_post_disable_hdmi(struct intel_atomic_state
> *state,
> +					struct intel_encoder *encoder,
>  					const struct intel_crtc_state
> *old_crtc_state,
>  					const struct
> drm_connector_state *old_conn_state)
>  {
> @@ -3447,7 +3456,8 @@ static void intel_ddi_post_disable_hdmi(struct
> intel_encoder *encoder,
>  	intel_dp_dual_mode_set_tmds_output(intel_hdmi, false);
>  }
>  
> -static void intel_ddi_post_disable(struct intel_encoder *encoder,
> +static void intel_ddi_post_disable(struct intel_atomic_state *state,
> +				   struct intel_encoder *encoder,
>  				   const struct intel_crtc_state
> *old_crtc_state,
>  				   const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -3485,11 +3495,11 @@ static void intel_ddi_post_disable(struct
> intel_encoder *encoder,
>  	 */
>  
>  	if (intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_HDMI))
> -		intel_ddi_post_disable_hdmi(encoder,
> -					    old_crtc_state,
> old_conn_state);
> +		intel_ddi_post_disable_hdmi(state, encoder,
> old_crtc_state,
> +					    old_conn_state);
>  	else
> -		intel_ddi_post_disable_dp(encoder,
> -					  old_crtc_state,
> old_conn_state);
> +		intel_ddi_post_disable_dp(state, encoder,
> old_crtc_state,
> +					  old_conn_state);
>  
>  	if (INTEL_GEN(dev_priv) >= 11)
>  		icl_unmap_plls_to_ports(encoder);
> @@ -3502,7 +3512,8 @@ static void intel_ddi_post_disable(struct
> intel_encoder *encoder,
>  		intel_tc_port_put_link(dig_port);
>  }
>  
> -void intel_ddi_fdi_post_disable(struct intel_encoder *encoder,
> +void intel_ddi_fdi_post_disable(struct intel_atomic_state *state,
> +				struct intel_encoder *encoder,
>  				const struct intel_crtc_state
> *old_crtc_state,
>  				const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -3536,7 +3547,8 @@ void intel_ddi_fdi_post_disable(struct
> intel_encoder *encoder,
>  	intel_de_write(dev_priv, FDI_RX_CTL(PIPE_A), val);
>  }
>  
> -static void intel_enable_ddi_dp(struct intel_encoder *encoder,
> +static void intel_enable_ddi_dp(struct intel_atomic_state *state,
> +				struct intel_encoder *encoder,
>  				const struct intel_crtc_state
> *crtc_state,
>  				const struct drm_connector_state
> *conn_state)
>  {
> @@ -3577,7 +3589,8 @@ gen9_chicken_trans_reg_by_port(struct
> drm_i915_private *dev_priv,
>  	return CHICKEN_TRANS(trans[port]);
>  }
>  
> -static void intel_enable_ddi_hdmi(struct intel_encoder *encoder,
> +static void intel_enable_ddi_hdmi(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *crtc_state,
>  				  const struct drm_connector_state
> *conn_state)
>  {
> @@ -3639,7 +3652,8 @@ static void intel_enable_ddi_hdmi(struct
> intel_encoder *encoder,
>  		intel_audio_codec_enable(encoder, crtc_state,
> conn_state);
>  }
>  
> -static void intel_enable_ddi(struct intel_encoder *encoder,
> +static void intel_enable_ddi(struct intel_atomic_state *state,
> +			     struct intel_encoder *encoder,
>  			     const struct intel_crtc_state *crtc_state,
>  			     const struct drm_connector_state
> *conn_state)
>  {
> @@ -3650,9 +3664,9 @@ static void intel_enable_ddi(struct
> intel_encoder *encoder,
>  	intel_crtc_vblank_on(crtc_state);
>  
>  	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
> -		intel_enable_ddi_hdmi(encoder, crtc_state, conn_state);
> +		intel_enable_ddi_hdmi(state, encoder, crtc_state,
> conn_state);
>  	else
> -		intel_enable_ddi_dp(encoder, crtc_state, conn_state);
> +		intel_enable_ddi_dp(state, encoder, crtc_state,
> conn_state);
>  
>  	/* Enable hdcp if it's desired */
>  	if (conn_state->content_protection ==
> @@ -3662,7 +3676,8 @@ static void intel_enable_ddi(struct
> intel_encoder *encoder,
>  				  (u8)conn_state->hdcp_content_type);
>  }
>  
> -static void intel_disable_ddi_dp(struct intel_encoder *encoder,
> +static void intel_disable_ddi_dp(struct intel_atomic_state *state,
> +				 struct intel_encoder *encoder,
>  				 const struct intel_crtc_state
> *old_crtc_state,
>  				 const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -3682,7 +3697,8 @@ static void intel_disable_ddi_dp(struct
> intel_encoder *encoder,
>  					      false);
>  }
>  
> -static void intel_disable_ddi_hdmi(struct intel_encoder *encoder,
> +static void intel_disable_ddi_hdmi(struct intel_atomic_state *state,
> +				   struct intel_encoder *encoder,
>  				   const struct intel_crtc_state
> *old_crtc_state,
>  				   const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -3698,19 +3714,23 @@ static void intel_disable_ddi_hdmi(struct
> intel_encoder *encoder,
>  			      connector->base.id, connector->name);
>  }
>  
> -static void intel_disable_ddi(struct intel_encoder *encoder,
> +static void intel_disable_ddi(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *old_crtc_state,
>  			      const struct drm_connector_state
> *old_conn_state)
>  {
>  	intel_hdcp_disable(to_intel_connector(old_conn_state-
> >connector));
>  
>  	if (intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_HDMI))
> -		intel_disable_ddi_hdmi(encoder, old_crtc_state,
> old_conn_state);
> +		intel_disable_ddi_hdmi(state, encoder, old_crtc_state,
> +				       old_conn_state);
>  	else
> -		intel_disable_ddi_dp(encoder, old_crtc_state,
> old_conn_state);
> +		intel_disable_ddi_dp(state, encoder, old_crtc_state,
> +				     old_conn_state);
>  }
>  
> -static void intel_ddi_update_pipe_dp(struct intel_encoder *encoder,
> +static void intel_ddi_update_pipe_dp(struct intel_atomic_state
> *state,
> +				     struct intel_encoder *encoder,
>  				     const struct intel_crtc_state
> *crtc_state,
>  				     const struct drm_connector_state
> *conn_state)
>  {
> @@ -3721,18 +3741,20 @@ static void intel_ddi_update_pipe_dp(struct
> intel_encoder *encoder,
>  	intel_psr_update(intel_dp, crtc_state);
>  	intel_edp_drrs_enable(intel_dp, crtc_state);
>  
> -	intel_panel_update_backlight(encoder, crtc_state, conn_state);
> +	intel_panel_update_backlight(state, encoder, crtc_state,
> conn_state);
>  }
>  
> -static void intel_ddi_update_pipe(struct intel_encoder *encoder,
> +static void intel_ddi_update_pipe(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *crtc_state,
>  				  const struct drm_connector_state
> *conn_state)
>  {
>  
>  	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
> -		intel_ddi_update_pipe_dp(encoder, crtc_state,
> conn_state);
> +		intel_ddi_update_pipe_dp(state, encoder, crtc_state,
> +					 conn_state);
>  
> -	intel_hdcp_update_pipe(encoder, crtc_state, conn_state);
> +	intel_hdcp_update_pipe(state, encoder, crtc_state, conn_state);
>  }
>  
>  static void
> @@ -3761,7 +3783,8 @@ intel_ddi_update_complete(struct
> intel_atomic_state *state,
>  }
>  
>  static void
> -intel_ddi_pre_pll_enable(struct intel_encoder *encoder,
> +intel_ddi_pre_pll_enable(struct intel_atomic_state *state,
> +			 struct intel_encoder *encoder,
>  			 const struct intel_crtc_state *crtc_state,
>  			 const struct drm_connector_state *conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.h
> b/drivers/gpu/drm/i915/display/intel_ddi.h
> index 55fd72b901fe..de4cd877c002 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.h
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.h
> @@ -17,7 +17,8 @@ struct intel_dp;
>  struct intel_dpll_hw_state;
>  struct intel_encoder;
>  
> -void intel_ddi_fdi_post_disable(struct intel_encoder *intel_encoder,
> +void intel_ddi_fdi_post_disable(struct intel_atomic_state *state,
> +				struct intel_encoder *intel_encoder,
>  				const struct intel_crtc_state
> *old_crtc_state,
>  				const struct drm_connector_state
> *old_conn_state);
>  void hsw_fdi_link_train(struct intel_encoder *encoder,
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 3926ac8f1f10..84e59f6ab8e4 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -6689,7 +6689,8 @@ static void
> intel_encoders_pre_pll_enable(struct intel_atomic_state *state,
>  			continue;
>  
>  		if (encoder->pre_pll_enable)
> -			encoder->pre_pll_enable(encoder, crtc_state,
> conn_state);
> +			encoder->pre_pll_enable(state, encoder,
> +						crtc_state,
> conn_state);
>  	}
>  }
>  
> @@ -6710,7 +6711,8 @@ static void intel_encoders_pre_enable(struct
> intel_atomic_state *state,
>  			continue;
>  
>  		if (encoder->pre_enable)
> -			encoder->pre_enable(encoder, crtc_state,
> conn_state);
> +			encoder->pre_enable(state, encoder,
> +					    crtc_state, conn_state);
>  	}
>  }
>  
> @@ -6731,7 +6733,8 @@ static void intel_encoders_enable(struct
> intel_atomic_state *state,
>  			continue;
>  
>  		if (encoder->enable)
> -			encoder->enable(encoder, crtc_state,
> conn_state);
> +			encoder->enable(state, encoder,
> +					crtc_state, conn_state);
>  		intel_opregion_notify_encoder(encoder, true);
>  	}
>  }
> @@ -6754,7 +6757,8 @@ static void intel_encoders_disable(struct
> intel_atomic_state *state,
>  
>  		intel_opregion_notify_encoder(encoder, false);
>  		if (encoder->disable)
> -			encoder->disable(encoder, old_crtc_state,
> old_conn_state);
> +			encoder->disable(state, encoder,
> +					 old_crtc_state,
> old_conn_state);
>  	}
>  }
>  
> @@ -6775,7 +6779,8 @@ static void intel_encoders_post_disable(struct
> intel_atomic_state *state,
>  			continue;
>  
>  		if (encoder->post_disable)
> -			encoder->post_disable(encoder, old_crtc_state,
> old_conn_state);
> +			encoder->post_disable(state, encoder,
> +					      old_crtc_state,
> old_conn_state);
>  	}
>  }
>  
> @@ -6796,7 +6801,8 @@ static void
> intel_encoders_post_pll_disable(struct intel_atomic_state *state,
>  			continue;
>  
>  		if (encoder->post_pll_disable)
> -			encoder->post_pll_disable(encoder,
> old_crtc_state, old_conn_state);
> +			encoder->post_pll_disable(state, encoder,
> +						  old_crtc_state,
> old_conn_state);
>  	}
>  }
>  
> @@ -6817,7 +6823,8 @@ static void intel_encoders_update_pipe(struct
> intel_atomic_state *state,
>  			continue;
>  
>  		if (encoder->update_pipe)
> -			encoder->update_pipe(encoder, crtc_state,
> conn_state);
> +			encoder->update_pipe(state, encoder,
> +					     crtc_state, conn_state);
>  	}
>  }
>  
> @@ -18133,11 +18140,12 @@ static void intel_sanitize_encoder(struct
> intel_encoder *encoder)
>  			best_encoder = connector->base.state-
> >best_encoder;
>  			connector->base.state->best_encoder = &encoder-
> >base;
>  
> +			/* FIXME NULL atomic state passed! */
>  			if (encoder->disable)
> -				encoder->disable(encoder, crtc_state,
> +				encoder->disable(NULL, encoder,
> crtc_state,
>  						 connector-
> >base.state);
>  			if (encoder->post_disable)
> -				encoder->post_disable(encoder,
> crtc_state,
> +				encoder->post_disable(NULL, encoder,
> crtc_state,
>  						      connector-
> >base.state);
>  
>  			connector->base.state->best_encoder =
> best_encoder;
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h
> b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 5e00e611f077..ad39386231d5 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -146,28 +146,35 @@ struct intel_encoder {
>  	void (*update_prepare)(struct intel_atomic_state *,
>  			       struct intel_encoder *,
>  			       struct intel_crtc *);
> -	void (*pre_pll_enable)(struct intel_encoder *,
> +	void (*pre_pll_enable)(struct intel_atomic_state *,
> +			       struct intel_encoder *,
>  			       const struct intel_crtc_state *,
>  			       const struct drm_connector_state *);
> -	void (*pre_enable)(struct intel_encoder *,
> +	void (*pre_enable)(struct intel_atomic_state *,
> +			   struct intel_encoder *,
>  			   const struct intel_crtc_state *,
>  			   const struct drm_connector_state *);
> -	void (*enable)(struct intel_encoder *,
> +	void (*enable)(struct intel_atomic_state *,
> +		       struct intel_encoder *,
>  		       const struct intel_crtc_state *,
>  		       const struct drm_connector_state *);
>  	void (*update_complete)(struct intel_atomic_state *,
>  				struct intel_encoder *,
>  				struct intel_crtc *);
> -	void (*disable)(struct intel_encoder *,
> +	void (*disable)(struct intel_atomic_state *,
> +			struct intel_encoder *,
>  			const struct intel_crtc_state *,
>  			const struct drm_connector_state *);
> -	void (*post_disable)(struct intel_encoder *,
> +	void (*post_disable)(struct intel_atomic_state *,
> +			     struct intel_encoder *,
>  			     const struct intel_crtc_state *,
>  			     const struct drm_connector_state *);
> -	void (*post_pll_disable)(struct intel_encoder *,
> +	void (*post_pll_disable)(struct intel_atomic_state *,
> +				 struct intel_encoder *,
>  				 const struct intel_crtc_state *,
>  				 const struct drm_connector_state *);
> -	void (*update_pipe)(struct intel_encoder *,
> +	void (*update_pipe)(struct intel_atomic_state *,
> +			    struct intel_encoder *,
>  			    const struct intel_crtc_state *,
>  			    const struct drm_connector_state *);
>  	/* Read out the current hw state of this connector, returning
> true if
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 89d54f5fe60b..d4c17a5e9be2 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -3393,7 +3393,8 @@ static void intel_dp_get_config(struct
> intel_encoder *encoder,
>  	}
>  }
>  
> -static void intel_disable_dp(struct intel_encoder *encoder,
> +static void intel_disable_dp(struct intel_atomic_state *state,
> +			     struct intel_encoder *encoder,
>  			     const struct intel_crtc_state
> *old_crtc_state,
>  			     const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -3413,21 +3414,24 @@ static void intel_disable_dp(struct
> intel_encoder *encoder,
>  	intel_edp_panel_off(intel_dp);
>  }
>  
> -static void g4x_disable_dp(struct intel_encoder *encoder,
> +static void g4x_disable_dp(struct intel_atomic_state *state,
> +			   struct intel_encoder *encoder,
>  			   const struct intel_crtc_state
> *old_crtc_state,
>  			   const struct drm_connector_state
> *old_conn_state)
>  {
> -	intel_disable_dp(encoder, old_crtc_state, old_conn_state);
> +	intel_disable_dp(state, encoder, old_crtc_state,
> old_conn_state);
>  }
>  
> -static void vlv_disable_dp(struct intel_encoder *encoder,
> +static void vlv_disable_dp(struct intel_atomic_state *state,
> +			   struct intel_encoder *encoder,
>  			   const struct intel_crtc_state
> *old_crtc_state,
>  			   const struct drm_connector_state
> *old_conn_state)
>  {
> -	intel_disable_dp(encoder, old_crtc_state, old_conn_state);
> +	intel_disable_dp(state, encoder, old_crtc_state,
> old_conn_state);
>  }
>  
> -static void g4x_post_disable_dp(struct intel_encoder *encoder,
> +static void g4x_post_disable_dp(struct intel_atomic_state *state,
> +				struct intel_encoder *encoder,
>  				const struct intel_crtc_state
> *old_crtc_state,
>  				const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -3447,14 +3451,16 @@ static void g4x_post_disable_dp(struct
> intel_encoder *encoder,
>  		ilk_edp_pll_off(intel_dp, old_crtc_state);
>  }
>  
> -static void vlv_post_disable_dp(struct intel_encoder *encoder,
> +static void vlv_post_disable_dp(struct intel_atomic_state *state,
> +				struct intel_encoder *encoder,
>  				const struct intel_crtc_state
> *old_crtc_state,
>  				const struct drm_connector_state
> *old_conn_state)
>  {
>  	intel_dp_link_down(encoder, old_crtc_state);
>  }
>  
> -static void chv_post_disable_dp(struct intel_encoder *encoder,
> +static void chv_post_disable_dp(struct intel_atomic_state *state,
> +				struct intel_encoder *encoder,
>  				const struct intel_crtc_state
> *old_crtc_state,
>  				const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -3580,7 +3586,8 @@ static void intel_dp_enable_port(struct
> intel_dp *intel_dp,
>  	intel_de_posting_read(dev_priv, intel_dp->output_reg);
>  }
>  
> -static void intel_enable_dp(struct intel_encoder *encoder,
> +static void intel_enable_dp(struct intel_atomic_state *state,
> +			    struct intel_encoder *encoder,
>  			    const struct intel_crtc_state *pipe_config,
>  			    const struct drm_connector_state
> *conn_state)
>  {
> @@ -3626,22 +3633,25 @@ static void intel_enable_dp(struct
> intel_encoder *encoder,
>  	}
>  }
>  
> -static void g4x_enable_dp(struct intel_encoder *encoder,
> +static void g4x_enable_dp(struct intel_atomic_state *state,
> +			  struct intel_encoder *encoder,
>  			  const struct intel_crtc_state *pipe_config,
>  			  const struct drm_connector_state *conn_state)
>  {
> -	intel_enable_dp(encoder, pipe_config, conn_state);
> +	intel_enable_dp(state, encoder, pipe_config, conn_state);
>  	intel_edp_backlight_on(pipe_config, conn_state);
>  }
>  
> -static void vlv_enable_dp(struct intel_encoder *encoder,
> +static void vlv_enable_dp(struct intel_atomic_state *state,
> +			  struct intel_encoder *encoder,
>  			  const struct intel_crtc_state *pipe_config,
>  			  const struct drm_connector_state *conn_state)
>  {
>  	intel_edp_backlight_on(pipe_config, conn_state);
>  }
>  
> -static void g4x_pre_enable_dp(struct intel_encoder *encoder,
> +static void g4x_pre_enable_dp(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *pipe_config,
>  			      const struct drm_connector_state
> *conn_state)
>  {
> @@ -3761,16 +3771,18 @@ static void
> vlv_init_panel_power_sequencer(struct intel_encoder *encoder,
>  	intel_dp_init_panel_power_sequencer_registers(intel_dp, true);
>  }
>  
> -static void vlv_pre_enable_dp(struct intel_encoder *encoder,
> +static void vlv_pre_enable_dp(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *pipe_config,
>  			      const struct drm_connector_state
> *conn_state)
>  {
>  	vlv_phy_pre_encoder_enable(encoder, pipe_config);
>  
> -	intel_enable_dp(encoder, pipe_config, conn_state);
> +	intel_enable_dp(state, encoder, pipe_config, conn_state);
>  }
>  
> -static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder,
> +static void vlv_dp_pre_pll_enable(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *pipe_config,
>  				  const struct drm_connector_state
> *conn_state)
>  {
> @@ -3779,19 +3791,21 @@ static void vlv_dp_pre_pll_enable(struct
> intel_encoder *encoder,
>  	vlv_phy_pre_pll_enable(encoder, pipe_config);
>  }
>  
> -static void chv_pre_enable_dp(struct intel_encoder *encoder,
> +static void chv_pre_enable_dp(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *pipe_config,
>  			      const struct drm_connector_state
> *conn_state)
>  {
>  	chv_phy_pre_encoder_enable(encoder, pipe_config);
>  
> -	intel_enable_dp(encoder, pipe_config, conn_state);
> +	intel_enable_dp(state, encoder, pipe_config, conn_state);
>  
>  	/* Second common lane will stay alive on its own now */
>  	chv_phy_release_cl2_override(encoder);
>  }
>  
> -static void chv_dp_pre_pll_enable(struct intel_encoder *encoder,
> +static void chv_dp_pre_pll_enable(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *pipe_config,
>  				  const struct drm_connector_state
> *conn_state)
>  {
> @@ -3800,7 +3814,8 @@ static void chv_dp_pre_pll_enable(struct
> intel_encoder *encoder,
>  	chv_phy_pre_pll_enable(encoder, pipe_config);
>  }
>  
> -static void chv_dp_post_pll_disable(struct intel_encoder *encoder,
> +static void chv_dp_post_pll_disable(struct intel_atomic_state
> *state,
> +				    struct intel_encoder *encoder,
>  				    const struct intel_crtc_state
> *old_crtc_state,
>  				    const struct drm_connector_state
> *old_conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index b9afc1135b9b..5f54cc2d6b40 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -316,7 +316,8 @@ intel_dp_mst_atomic_check(struct drm_connector
> *connector,
>  	return ret;
>  }
>  
> -static void intel_mst_disable_dp(struct intel_encoder *encoder,
> +static void intel_mst_disable_dp(struct intel_atomic_state *state,
> +				 struct intel_encoder *encoder,
>  				 const struct intel_crtc_state
> *old_crtc_state,
>  				 const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -340,7 +341,8 @@ static void intel_mst_disable_dp(struct
> intel_encoder *encoder,
>  					  old_crtc_state,
> old_conn_state);
>  }
>  
> -static void intel_mst_post_disable_dp(struct intel_encoder *encoder,
> +static void intel_mst_post_disable_dp(struct intel_atomic_state
> *state,
> +				      struct intel_encoder *encoder,
>  				      const struct intel_crtc_state
> *old_crtc_state,
>  				      const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -405,13 +407,14 @@ static void intel_mst_post_disable_dp(struct
> intel_encoder *encoder,
>  
>  	intel_mst->connector = NULL;
>  	if (last_mst_stream)
> -		intel_dig_port->base.post_disable(&intel_dig_port-
> >base,
> +		intel_dig_port->base.post_disable(state,
> &intel_dig_port->base,
>  						  old_crtc_state,
> NULL);
>  
>  	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
>  }
>  
> -static void intel_mst_pre_pll_enable_dp(struct intel_encoder
> *encoder,
> +static void intel_mst_pre_pll_enable_dp(struct intel_atomic_state
> *state,
> +					struct intel_encoder *encoder,
>  					const struct intel_crtc_state
> *pipe_config,
>  					const struct
> drm_connector_state *conn_state)
>  {
> @@ -420,11 +423,12 @@ static void intel_mst_pre_pll_enable_dp(struct
> intel_encoder *encoder,
>  	struct intel_dp *intel_dp = &intel_dig_port->dp;
>  
>  	if (intel_dp->active_mst_links == 0)
> -		intel_dig_port->base.pre_pll_enable(&intel_dig_port-
> >base,
> +		intel_dig_port->base.pre_pll_enable(state,
> &intel_dig_port->base,
>  						    pipe_config, NULL);
>  }
>  
> -static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
> +static void intel_mst_pre_enable_dp(struct intel_atomic_state
> *state,
> +				    struct intel_encoder *encoder,
>  				    const struct intel_crtc_state
> *pipe_config,
>  				    const struct drm_connector_state
> *conn_state)
>  {
> @@ -456,7 +460,7 @@ static void intel_mst_pre_enable_dp(struct
> intel_encoder *encoder,
>  	drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector-
> >port, true);
>  
>  	if (first_mst_stream)
> -		intel_dig_port->base.pre_enable(&intel_dig_port->base,
> +		intel_dig_port->base.pre_enable(state, &intel_dig_port-
> >base,
>  						pipe_config, NULL);
>  
>  	ret = drm_dp_mst_allocate_vcpi(&intel_dp->mst_mgr,
> @@ -487,7 +491,8 @@ static void intel_mst_pre_enable_dp(struct
> intel_encoder *encoder,
>  	intel_dp_set_m_n(pipe_config, M1_N1);
>  }
>  
> -static void intel_mst_enable_dp(struct intel_encoder *encoder,
> +static void intel_mst_enable_dp(struct intel_atomic_state *state,
> +				struct intel_encoder *encoder,
>  				const struct intel_crtc_state
> *pipe_config,
>  				const struct drm_connector_state
> *conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c
> b/drivers/gpu/drm/i915/display/intel_dvo.c
> index 341d5ce8b062..5cd09034519b 100644
> --- a/drivers/gpu/drm/i915/display/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_dvo.c
> @@ -183,7 +183,8 @@ static void intel_dvo_get_config(struct
> intel_encoder *encoder,
>  	pipe_config->hw.adjusted_mode.crtc_clock = pipe_config-
> >port_clock;
>  }
>  
> -static void intel_disable_dvo(struct intel_encoder *encoder,
> +static void intel_disable_dvo(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *old_crtc_state,
>  			      const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -197,7 +198,8 @@ static void intel_disable_dvo(struct
> intel_encoder *encoder,
>  	intel_de_read(dev_priv, dvo_reg);
>  }
>  
> -static void intel_enable_dvo(struct intel_encoder *encoder,
> +static void intel_enable_dvo(struct intel_atomic_state *state,
> +			     struct intel_encoder *encoder,
>  			     const struct intel_crtc_state
> *pipe_config,
>  			     const struct drm_connector_state
> *conn_state)
>  {
> @@ -272,7 +274,8 @@ static int intel_dvo_compute_config(struct
> intel_encoder *encoder,
>  	return 0;
>  }
>  
> -static void intel_dvo_pre_enable(struct intel_encoder *encoder,
> +static void intel_dvo_pre_enable(struct intel_atomic_state *state,
> +				 struct intel_encoder *encoder,
>  				 const struct intel_crtc_state
> *pipe_config,
>  				 const struct drm_connector_state
> *conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c
> b/drivers/gpu/drm/i915/display/intel_hdcp.c
> index ee0f27ea2810..0ed9c5d33d75 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdcp.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
> @@ -2075,7 +2075,8 @@ int intel_hdcp_disable(struct intel_connector
> *connector)
>  	return ret;
>  }
>  
> -void intel_hdcp_update_pipe(struct intel_encoder *encoder,
> +void intel_hdcp_update_pipe(struct intel_atomic_state *state,
> +			    struct intel_encoder *encoder,
>  			    const struct intel_crtc_state *crtc_state,
>  			    const struct drm_connector_state
> *conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.h
> b/drivers/gpu/drm/i915/display/intel_hdcp.h
> index 7c12ad609b1f..86bbaec120cc 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdcp.h
> +++ b/drivers/gpu/drm/i915/display/intel_hdcp.h
> @@ -11,6 +11,7 @@
>  struct drm_connector;
>  struct drm_connector_state;
>  struct drm_i915_private;
> +struct intel_atomic_state;
>  struct intel_connector;
>  struct intel_crtc_state;
>  struct intel_encoder;
> @@ -26,7 +27,8 @@ int intel_hdcp_init(struct intel_connector
> *connector,
>  int intel_hdcp_enable(struct intel_connector *connector,
>  		      enum transcoder cpu_transcoder, u8 content_type);
>  int intel_hdcp_disable(struct intel_connector *connector);
> -void intel_hdcp_update_pipe(struct intel_encoder *encoder,
> +void intel_hdcp_update_pipe(struct intel_atomic_state *state,
> +			    struct intel_encoder *encoder,
>  			    const struct intel_crtc_state *crtc_state,
>  			    const struct drm_connector_state
> *conn_state);
>  bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port
> port);
> diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c
> b/drivers/gpu/drm/i915/display/intel_hdmi.c
> index 39930232b253..484e067b100b 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> @@ -1878,7 +1878,8 @@ static void intel_enable_hdmi_audio(struct
> intel_encoder *encoder,
>  	intel_audio_codec_enable(encoder, pipe_config, conn_state);
>  }
>  
> -static void g4x_enable_hdmi(struct intel_encoder *encoder,
> +static void g4x_enable_hdmi(struct intel_atomic_state *state,
> +			    struct intel_encoder *encoder,
>  			    const struct intel_crtc_state *pipe_config,
>  			    const struct drm_connector_state
> *conn_state)
>  {
> @@ -1900,7 +1901,8 @@ static void g4x_enable_hdmi(struct
> intel_encoder *encoder,
>  		intel_enable_hdmi_audio(encoder, pipe_config,
> conn_state);
>  }
>  
> -static void ibx_enable_hdmi(struct intel_encoder *encoder,
> +static void ibx_enable_hdmi(struct intel_atomic_state *state,
> +			    struct intel_encoder *encoder,
>  			    const struct intel_crtc_state *pipe_config,
>  			    const struct drm_connector_state
> *conn_state)
>  {
> @@ -1951,7 +1953,8 @@ static void ibx_enable_hdmi(struct
> intel_encoder *encoder,
>  		intel_enable_hdmi_audio(encoder, pipe_config,
> conn_state);
>  }
>  
> -static void cpt_enable_hdmi(struct intel_encoder *encoder,
> +static void cpt_enable_hdmi(struct intel_atomic_state *state,
> +			    struct intel_encoder *encoder,
>  			    const struct intel_crtc_state *pipe_config,
>  			    const struct drm_connector_state
> *conn_state)
>  {
> @@ -2004,13 +2007,15 @@ static void cpt_enable_hdmi(struct
> intel_encoder *encoder,
>  		intel_enable_hdmi_audio(encoder, pipe_config,
> conn_state);
>  }
>  
> -static void vlv_enable_hdmi(struct intel_encoder *encoder,
> +static void vlv_enable_hdmi(struct intel_atomic_state *state,
> +			    struct intel_encoder *encoder,
>  			    const struct intel_crtc_state *pipe_config,
>  			    const struct drm_connector_state
> *conn_state)
>  {
>  }
>  
> -static void intel_disable_hdmi(struct intel_encoder *encoder,
> +static void intel_disable_hdmi(struct intel_atomic_state *state,
> +			       struct intel_encoder *encoder,
>  			       const struct intel_crtc_state
> *old_crtc_state,
>  			       const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -2068,7 +2073,8 @@ static void intel_disable_hdmi(struct
> intel_encoder *encoder,
>  	intel_dp_dual_mode_set_tmds_output(intel_hdmi, false);
>  }
>  
> -static void g4x_disable_hdmi(struct intel_encoder *encoder,
> +static void g4x_disable_hdmi(struct intel_atomic_state *state,
> +			     struct intel_encoder *encoder,
>  			     const struct intel_crtc_state
> *old_crtc_state,
>  			     const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -2076,10 +2082,11 @@ static void g4x_disable_hdmi(struct
> intel_encoder *encoder,
>  		intel_audio_codec_disable(encoder,
>  					  old_crtc_state,
> old_conn_state);
>  
> -	intel_disable_hdmi(encoder, old_crtc_state, old_conn_state);
> +	intel_disable_hdmi(state, encoder, old_crtc_state,
> old_conn_state);
>  }
>  
> -static void pch_disable_hdmi(struct intel_encoder *encoder,
> +static void pch_disable_hdmi(struct intel_atomic_state *state,
> +			     struct intel_encoder *encoder,
>  			     const struct intel_crtc_state
> *old_crtc_state,
>  			     const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -2088,11 +2095,12 @@ static void pch_disable_hdmi(struct
> intel_encoder *encoder,
>  					  old_crtc_state,
> old_conn_state);
>  }
>  
> -static void pch_post_disable_hdmi(struct intel_encoder *encoder,
> +static void pch_post_disable_hdmi(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *old_crtc_state,
>  				  const struct drm_connector_state
> *old_conn_state)
>  {
> -	intel_disable_hdmi(encoder, old_crtc_state, old_conn_state);
> +	intel_disable_hdmi(state, encoder, old_crtc_state,
> old_conn_state);
>  }
>  
>  static int intel_hdmi_source_max_tmds_clock(struct intel_encoder
> *encoder)
> @@ -2474,7 +2482,8 @@ int intel_hdmi_compute_config(struct
> intel_encoder *encoder,
>  		}
>  	}
>  
> -	intel_hdmi_compute_gcp_infoframe(encoder, pipe_config,
> conn_state);
> +	intel_hdmi_compute_gcp_infoframe(encoder, pipe_config,
> +					 conn_state);
>  
>  	if (!intel_hdmi_compute_avi_infoframe(encoder, pipe_config,
> conn_state)) {
>  		DRM_DEBUG_KMS("bad AVI infoframe\n");
> @@ -2664,7 +2673,8 @@ static int intel_hdmi_get_modes(struct
> drm_connector *connector)
>  	return intel_connector_update_modes(connector, edid);
>  }
>  
> -static void intel_hdmi_pre_enable(struct intel_encoder *encoder,
> +static void intel_hdmi_pre_enable(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *pipe_config,
>  				  const struct drm_connector_state
> *conn_state)
>  {
> @@ -2678,7 +2688,8 @@ static void intel_hdmi_pre_enable(struct
> intel_encoder *encoder,
>  				       pipe_config, conn_state);
>  }
>  
> -static void vlv_hdmi_pre_enable(struct intel_encoder *encoder,
> +static void vlv_hdmi_pre_enable(struct intel_atomic_state *state,
> +				struct intel_encoder *encoder,
>  				const struct intel_crtc_state
> *pipe_config,
>  				const struct drm_connector_state
> *conn_state)
>  {
> @@ -2695,12 +2706,13 @@ static void vlv_hdmi_pre_enable(struct
> intel_encoder *encoder,
>  			      pipe_config->has_infoframe,
>  			      pipe_config, conn_state);
>  
> -	g4x_enable_hdmi(encoder, pipe_config, conn_state);
> +	g4x_enable_hdmi(state, encoder, pipe_config, conn_state);
>  
>  	vlv_wait_port_ready(dev_priv, dport, 0x0);
>  }
>  
> -static void vlv_hdmi_pre_pll_enable(struct intel_encoder *encoder,
> +static void vlv_hdmi_pre_pll_enable(struct intel_atomic_state
> *state,
> +				    struct intel_encoder *encoder,
>  				    const struct intel_crtc_state
> *pipe_config,
>  				    const struct drm_connector_state
> *conn_state)
>  {
> @@ -2709,7 +2721,8 @@ static void vlv_hdmi_pre_pll_enable(struct
> intel_encoder *encoder,
>  	vlv_phy_pre_pll_enable(encoder, pipe_config);
>  }
>  
> -static void chv_hdmi_pre_pll_enable(struct intel_encoder *encoder,
> +static void chv_hdmi_pre_pll_enable(struct intel_atomic_state
> *state,
> +				    struct intel_encoder *encoder,
>  				    const struct intel_crtc_state
> *pipe_config,
>  				    const struct drm_connector_state
> *conn_state)
>  {
> @@ -2718,14 +2731,16 @@ static void chv_hdmi_pre_pll_enable(struct
> intel_encoder *encoder,
>  	chv_phy_pre_pll_enable(encoder, pipe_config);
>  }
>  
> -static void chv_hdmi_post_pll_disable(struct intel_encoder *encoder,
> +static void chv_hdmi_post_pll_disable(struct intel_atomic_state
> *state,
> +				      struct intel_encoder *encoder,
>  				      const struct intel_crtc_state
> *old_crtc_state,
>  				      const struct drm_connector_state
> *old_conn_state)
>  {
>  	chv_phy_post_pll_disable(encoder, old_crtc_state);
>  }
>  
> -static void vlv_hdmi_post_disable(struct intel_encoder *encoder,
> +static void vlv_hdmi_post_disable(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *old_crtc_state,
>  				  const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -2733,7 +2748,8 @@ static void vlv_hdmi_post_disable(struct
> intel_encoder *encoder,
>  	vlv_phy_reset_lanes(encoder, old_crtc_state);
>  }
>  
> -static void chv_hdmi_post_disable(struct intel_encoder *encoder,
> +static void chv_hdmi_post_disable(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *old_crtc_state,
>  				  const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -2748,7 +2764,8 @@ static void chv_hdmi_post_disable(struct
> intel_encoder *encoder,
>  	vlv_dpio_put(dev_priv);
>  }
>  
> -static void chv_hdmi_pre_enable(struct intel_encoder *encoder,
> +static void chv_hdmi_pre_enable(struct intel_atomic_state *state,
> +				struct intel_encoder *encoder,
>  				const struct intel_crtc_state
> *pipe_config,
>  				const struct drm_connector_state
> *conn_state)
>  {
> @@ -2766,7 +2783,7 @@ static void chv_hdmi_pre_enable(struct
> intel_encoder *encoder,
>  			      pipe_config->has_infoframe,
>  			      pipe_config, conn_state);
>  
> -	g4x_enable_hdmi(encoder, pipe_config, conn_state);
> +	g4x_enable_hdmi(state, encoder, pipe_config, conn_state);
>  
>  	vlv_wait_port_ready(dev_priv, dport, 0x0);
>  
> diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c
> b/drivers/gpu/drm/i915/display/intel_lvds.c
> index 9a067effcfa0..fe591f82163e 100644
> --- a/drivers/gpu/drm/i915/display/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/display/intel_lvds.c
> @@ -220,7 +220,8 @@ static void intel_lvds_pps_init_hw(struct
> drm_i915_private *dev_priv,
>  		       REG_FIELD_PREP(PP_REFERENCE_DIVIDER_MASK, pps-
> >divider) | REG_FIELD_PREP(PANEL_POWER_CYCLE_DELAY_MASK,
> DIV_ROUND_UP(pps->t4, 1000) + 1));
>  }
>  
> -static void intel_pre_enable_lvds(struct intel_encoder *encoder,
> +static void intel_pre_enable_lvds(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *pipe_config,
>  				  const struct drm_connector_state
> *conn_state)
>  {
> @@ -301,7 +302,8 @@ static void intel_pre_enable_lvds(struct
> intel_encoder *encoder,
>  /*
>   * Sets the power state for the panel.
>   */
> -static void intel_enable_lvds(struct intel_encoder *encoder,
> +static void intel_enable_lvds(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *pipe_config,
>  			      const struct drm_connector_state
> *conn_state)
>  {
> @@ -323,7 +325,8 @@ static void intel_enable_lvds(struct
> intel_encoder *encoder,
>  	intel_panel_enable_backlight(pipe_config, conn_state);
>  }
>  
> -static void intel_disable_lvds(struct intel_encoder *encoder,
> +static void intel_disable_lvds(struct intel_atomic_state *state,
> +			       struct intel_encoder *encoder,
>  			       const struct intel_crtc_state
> *old_crtc_state,
>  			       const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -341,28 +344,31 @@ static void intel_disable_lvds(struct
> intel_encoder *encoder,
>  	intel_de_posting_read(dev_priv, lvds_encoder->reg);
>  }
>  
> -static void gmch_disable_lvds(struct intel_encoder *encoder,
> +static void gmch_disable_lvds(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *old_crtc_state,
>  			      const struct drm_connector_state
> *old_conn_state)
>  
>  {
>  	intel_panel_disable_backlight(old_conn_state);
>  
> -	intel_disable_lvds(encoder, old_crtc_state, old_conn_state);
> +	intel_disable_lvds(state, encoder, old_crtc_state,
> old_conn_state);
>  }
>  
> -static void pch_disable_lvds(struct intel_encoder *encoder,
> +static void pch_disable_lvds(struct intel_atomic_state *state,
> +			     struct intel_encoder *encoder,
>  			     const struct intel_crtc_state
> *old_crtc_state,
>  			     const struct drm_connector_state
> *old_conn_state)
>  {
>  	intel_panel_disable_backlight(old_conn_state);
>  }
>  
> -static void pch_post_disable_lvds(struct intel_encoder *encoder,
> +static void pch_post_disable_lvds(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *old_crtc_state,
>  				  const struct drm_connector_state
> *old_conn_state)
>  {
> -	intel_disable_lvds(encoder, old_crtc_state, old_conn_state);
> +	intel_disable_lvds(state, encoder, old_crtc_state,
> old_conn_state);
>  }
>  
>  static enum drm_mode_status
> diff --git a/drivers/gpu/drm/i915/display/intel_panel.c
> b/drivers/gpu/drm/i915/display/intel_panel.c
> index 276f43870802..f8ccfe67429e 100644
> --- a/drivers/gpu/drm/i915/display/intel_panel.c
> +++ b/drivers/gpu/drm/i915/display/intel_panel.c
> @@ -1931,7 +1931,8 @@ static int pwm_setup_backlight(struct
> intel_connector *connector,
>  	return 0;
>  }
>  
> -void intel_panel_update_backlight(struct intel_encoder *encoder,
> +void intel_panel_update_backlight(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *crtc_state,
>  				  const struct drm_connector_state
> *conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_panel.h
> b/drivers/gpu/drm/i915/display/intel_panel.h
> index cedeea443336..11f2f6b628d8 100644
> --- a/drivers/gpu/drm/i915/display/intel_panel.h
> +++ b/drivers/gpu/drm/i915/display/intel_panel.h
> @@ -37,7 +37,8 @@ int intel_panel_setup_backlight(struct
> drm_connector *connector,
>  				enum pipe pipe);
>  void intel_panel_enable_backlight(const struct intel_crtc_state
> *crtc_state,
>  				  const struct drm_connector_state
> *conn_state);
> -void intel_panel_update_backlight(struct intel_encoder *encoder,
> +void intel_panel_update_backlight(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *crtc_state,
>  				  const struct drm_connector_state
> *conn_state);
>  void intel_panel_disable_backlight(const struct drm_connector_state
> *old_conn_state);
> diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c
> b/drivers/gpu/drm/i915/display/intel_sdvo.c
> index 637d8fe2f8c2..e6306cbb7a3a 100644
> --- a/drivers/gpu/drm/i915/display/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
> @@ -1430,7 +1430,8 @@ static void intel_sdvo_update_props(struct
> intel_sdvo *intel_sdvo,
>  #undef UPDATE_PROPERTY
>  }
>  
> -static void intel_sdvo_pre_enable(struct intel_encoder
> *intel_encoder,
> +static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
> +				  struct intel_encoder *intel_encoder,
>  				  const struct intel_crtc_state
> *crtc_state,
>  				  const struct drm_connector_state
> *conn_state)
>  {
> @@ -1727,7 +1728,8 @@ static void intel_sdvo_enable_audio(struct
> intel_sdvo *intel_sdvo,
>  				   SDVO_AUDIO_PRESENCE_DETECT);
>  }
>  
> -static void intel_disable_sdvo(struct intel_encoder *encoder,
> +static void intel_disable_sdvo(struct intel_atomic_state *state,
> +			       struct intel_encoder *encoder,
>  			       const struct intel_crtc_state
> *old_crtc_state,
>  			       const struct drm_connector_state
> *conn_state)
>  {
> @@ -1775,20 +1777,23 @@ static void intel_disable_sdvo(struct
> intel_encoder *encoder,
>  	}
>  }
>  
> -static void pch_disable_sdvo(struct intel_encoder *encoder,
> +static void pch_disable_sdvo(struct intel_atomic_state *state,
> +			     struct intel_encoder *encoder,
>  			     const struct intel_crtc_state
> *old_crtc_state,
>  			     const struct drm_connector_state
> *old_conn_state)
>  {
>  }
>  
> -static void pch_post_disable_sdvo(struct intel_encoder *encoder,
> +static void pch_post_disable_sdvo(struct intel_atomic_state *state,
> +				  struct intel_encoder *encoder,
>  				  const struct intel_crtc_state
> *old_crtc_state,
>  				  const struct drm_connector_state
> *old_conn_state)
>  {
> -	intel_disable_sdvo(encoder, old_crtc_state, old_conn_state);
> +	intel_disable_sdvo(state, encoder, old_crtc_state,
> old_conn_state);
>  }
>  
> -static void intel_enable_sdvo(struct intel_encoder *encoder,
> +static void intel_enable_sdvo(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *pipe_config,
>  			      const struct drm_connector_state
> *conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_tv.c
> b/drivers/gpu/drm/i915/display/intel_tv.c
> index d2e3a3a323e9..b6003fc9e268 100644
> --- a/drivers/gpu/drm/i915/display/intel_tv.c
> +++ b/drivers/gpu/drm/i915/display/intel_tv.c
> @@ -914,7 +914,8 @@ intel_tv_get_hw_state(struct intel_encoder
> *encoder, enum pipe *pipe)
>  }
>  
>  static void
> -intel_enable_tv(struct intel_encoder *encoder,
> +intel_enable_tv(struct intel_atomic_state *state,
> +		struct intel_encoder *encoder,
>  		const struct intel_crtc_state *pipe_config,
>  		const struct drm_connector_state *conn_state)
>  {
> @@ -930,7 +931,8 @@ intel_enable_tv(struct intel_encoder *encoder,
>  }
>  
>  static void
> -intel_disable_tv(struct intel_encoder *encoder,
> +intel_disable_tv(struct intel_atomic_state *state,
> +		 struct intel_encoder *encoder,
>  		 const struct intel_crtc_state *old_crtc_state,
>  		 const struct drm_connector_state *old_conn_state)
>  {
> @@ -1414,7 +1416,8 @@ static void set_color_conversion(struct
> drm_i915_private *dev_priv,
>  		       (color_conversion->bv << 16) | color_conversion-
> >av);
>  }
>  
> -static void intel_tv_pre_enable(struct intel_encoder *encoder,
> +static void intel_tv_pre_enable(struct intel_atomic_state *state,
> +				struct intel_encoder *encoder,
>  				const struct intel_crtc_state
> *pipe_config,
>  				const struct drm_connector_state
> *conn_state)
>  {
> diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c
> b/drivers/gpu/drm/i915/display/vlv_dsi.c
> index f4c362dc6e15..a277d7d6b3bf 100644
> --- a/drivers/gpu/drm/i915/display/vlv_dsi.c
> +++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
> @@ -759,7 +759,8 @@ static void intel_dsi_unprepare(struct
> intel_encoder *encoder);
>   * DSI port enable has to be done before pipe and plane enable, so
> we do it in
>   * the pre_enable hook instead of the enable hook.
>   */
> -static void intel_dsi_pre_enable(struct intel_encoder *encoder,
> +static void intel_dsi_pre_enable(struct intel_atomic_state *state,
> +				 struct intel_encoder *encoder,
>  				 const struct intel_crtc_state
> *pipe_config,
>  				 const struct drm_connector_state
> *conn_state)
>  {
> @@ -858,7 +859,8 @@ static void intel_dsi_pre_enable(struct
> intel_encoder *encoder,
>  	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_BACKLIGHT_ON);
>  }
>  
> -static void bxt_dsi_enable(struct intel_encoder *encoder,
> +static void bxt_dsi_enable(struct intel_atomic_state *state,
> +			   struct intel_encoder *encoder,
>  			   const struct intel_crtc_state *crtc_state,
>  			   const struct drm_connector_state
> *conn_state)
>  {
> @@ -871,7 +873,8 @@ static void bxt_dsi_enable(struct intel_encoder
> *encoder,
>   * DSI port disable has to be done after pipe and plane disable, so
> we do it in
>   * the post_disable hook.
>   */
> -static void intel_dsi_disable(struct intel_encoder *encoder,
> +static void intel_dsi_disable(struct intel_atomic_state *state,
> +			      struct intel_encoder *encoder,
>  			      const struct intel_crtc_state
> *old_crtc_state,
>  			      const struct drm_connector_state
> *old_conn_state)
>  {
> @@ -906,7 +909,8 @@ static void intel_dsi_clear_device_ready(struct
> intel_encoder *encoder)
>  		vlv_dsi_clear_device_ready(encoder);
>  }
>  
> -static void intel_dsi_post_disable(struct intel_encoder *encoder,
> +static void intel_dsi_post_disable(struct intel_atomic_state *state,
> +				   struct intel_encoder *encoder,
>  				   const struct intel_crtc_state
> *old_crtc_state,
>  				   const struct drm_connector_state
> *old_conn_state)
>  {

Patch
diff mbox series

diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c
index 17cee6f80d8b..ea9907c3e5ba 100644
--- a/drivers/gpu/drm/i915/display/icl_dsi.c
+++ b/drivers/gpu/drm/i915/display/icl_dsi.c
@@ -1088,7 +1088,8 @@  static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
 	wait_for_cmds_dispatched_to_panel(encoder);
 }
 
-static void gen11_dsi_pre_pll_enable(struct intel_encoder *encoder,
+static void gen11_dsi_pre_pll_enable(struct intel_atomic_state *state,
+				     struct intel_encoder *encoder,
 				     const struct intel_crtc_state *crtc_state,
 				     const struct drm_connector_state *conn_state)
 {
@@ -1099,7 +1100,8 @@  static void gen11_dsi_pre_pll_enable(struct intel_encoder *encoder,
 	gen11_dsi_program_esc_clk_div(encoder, crtc_state);
 }
 
-static void gen11_dsi_pre_enable(struct intel_encoder *encoder,
+static void gen11_dsi_pre_enable(struct intel_atomic_state *state,
+				 struct intel_encoder *encoder,
 				 const struct intel_crtc_state *pipe_config,
 				 const struct drm_connector_state *conn_state)
 {
@@ -1118,7 +1120,8 @@  static void gen11_dsi_pre_enable(struct intel_encoder *encoder,
 	gen11_dsi_set_transcoder_timings(encoder, pipe_config);
 }
 
-static void gen11_dsi_enable(struct intel_encoder *encoder,
+static void gen11_dsi_enable(struct intel_atomic_state *state,
+			     struct intel_encoder *encoder,
 			     const struct intel_crtc_state *crtc_state,
 			     const struct drm_connector_state *conn_state)
 {
@@ -1264,7 +1267,8 @@  static void gen11_dsi_disable_io_power(struct intel_encoder *encoder)
 	}
 }
 
-static void gen11_dsi_disable(struct intel_encoder *encoder,
+static void gen11_dsi_disable(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *old_crtc_state,
 			      const struct drm_connector_state *old_conn_state)
 {
@@ -1290,7 +1294,8 @@  static void gen11_dsi_disable(struct intel_encoder *encoder,
 	gen11_dsi_disable_io_power(encoder);
 }
 
-static void gen11_dsi_post_disable(struct intel_encoder *encoder,
+static void gen11_dsi_post_disable(struct intel_atomic_state *state,
+				   struct intel_encoder *encoder,
 				   const struct intel_crtc_state *old_crtc_state,
 				   const struct drm_connector_state *old_conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
index 78f9b6cde810..80c91404046f 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -203,27 +203,31 @@  static void intel_crt_set_dpms(struct intel_encoder *encoder,
 	intel_de_write(dev_priv, crt->adpa_reg, adpa);
 }
 
-static void intel_disable_crt(struct intel_encoder *encoder,
+static void intel_disable_crt(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *old_crtc_state,
 			      const struct drm_connector_state *old_conn_state)
 {
 	intel_crt_set_dpms(encoder, old_crtc_state, DRM_MODE_DPMS_OFF);
 }
 
-static void pch_disable_crt(struct intel_encoder *encoder,
+static void pch_disable_crt(struct intel_atomic_state *state,
+			    struct intel_encoder *encoder,
 			    const struct intel_crtc_state *old_crtc_state,
 			    const struct drm_connector_state *old_conn_state)
 {
 }
 
-static void pch_post_disable_crt(struct intel_encoder *encoder,
+static void pch_post_disable_crt(struct intel_atomic_state *state,
+				 struct intel_encoder *encoder,
 				 const struct intel_crtc_state *old_crtc_state,
 				 const struct drm_connector_state *old_conn_state)
 {
-	intel_disable_crt(encoder, old_crtc_state, old_conn_state);
+	intel_disable_crt(state, encoder, old_crtc_state, old_conn_state);
 }
 
-static void hsw_disable_crt(struct intel_encoder *encoder,
+static void hsw_disable_crt(struct intel_atomic_state *state,
+			    struct intel_encoder *encoder,
 			    const struct intel_crtc_state *old_crtc_state,
 			    const struct drm_connector_state *old_conn_state)
 {
@@ -234,7 +238,8 @@  static void hsw_disable_crt(struct intel_encoder *encoder,
 	intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, false);
 }
 
-static void hsw_post_disable_crt(struct intel_encoder *encoder,
+static void hsw_post_disable_crt(struct intel_atomic_state *state,
+				 struct intel_encoder *encoder,
 				 const struct intel_crtc_state *old_crtc_state,
 				 const struct drm_connector_state *old_conn_state)
 {
@@ -250,19 +255,20 @@  static void hsw_post_disable_crt(struct intel_encoder *encoder,
 
 	intel_ddi_disable_pipe_clock(old_crtc_state);
 
-	pch_post_disable_crt(encoder, old_crtc_state, old_conn_state);
+	pch_post_disable_crt(state, encoder, old_crtc_state, old_conn_state);
 
 	lpt_disable_pch_transcoder(dev_priv);
 	lpt_disable_iclkip(dev_priv);
 
-	intel_ddi_fdi_post_disable(encoder, old_crtc_state, old_conn_state);
+	intel_ddi_fdi_post_disable(state, encoder, old_crtc_state, old_conn_state);
 
 	drm_WARN_ON(&dev_priv->drm, !old_crtc_state->has_pch_encoder);
 
 	intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
 }
 
-static void hsw_pre_pll_enable_crt(struct intel_encoder *encoder,
+static void hsw_pre_pll_enable_crt(struct intel_atomic_state *state,
+				   struct intel_encoder *encoder,
 				   const struct intel_crtc_state *crtc_state,
 				   const struct drm_connector_state *conn_state)
 {
@@ -273,7 +279,8 @@  static void hsw_pre_pll_enable_crt(struct intel_encoder *encoder,
 	intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, false);
 }
 
-static void hsw_pre_enable_crt(struct intel_encoder *encoder,
+static void hsw_pre_enable_crt(struct intel_atomic_state *state,
+			       struct intel_encoder *encoder,
 			       const struct intel_crtc_state *crtc_state,
 			       const struct drm_connector_state *conn_state)
 {
@@ -290,7 +297,8 @@  static void hsw_pre_enable_crt(struct intel_encoder *encoder,
 	intel_ddi_enable_pipe_clock(crtc_state);
 }
 
-static void hsw_enable_crt(struct intel_encoder *encoder,
+static void hsw_enable_crt(struct intel_atomic_state *state,
+			   struct intel_encoder *encoder,
 			   const struct intel_crtc_state *crtc_state,
 			   const struct drm_connector_state *conn_state)
 {
@@ -314,7 +322,8 @@  static void hsw_enable_crt(struct intel_encoder *encoder,
 	intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
 }
 
-static void intel_enable_crt(struct intel_encoder *encoder,
+static void intel_enable_crt(struct intel_atomic_state *state,
+			     struct intel_encoder *encoder,
 			     const struct intel_crtc_state *crtc_state,
 			     const struct drm_connector_state *conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 9e6eb0ee5ba4..98475c81f1da 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -3017,7 +3017,8 @@  static void intel_ddi_disable_fec_state(struct intel_encoder *encoder,
 	intel_de_posting_read(dev_priv, intel_dp->regs.dp_tp_ctl);
 }
 
-static void tgl_ddi_pre_enable_dp(struct intel_encoder *encoder,
+static void tgl_ddi_pre_enable_dp(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *crtc_state,
 				  const struct drm_connector_state *conn_state)
 {
@@ -3157,7 +3158,8 @@  static void tgl_ddi_pre_enable_dp(struct intel_encoder *encoder,
 	intel_dsc_enable(encoder, crtc_state);
 }
 
-static void hsw_ddi_pre_enable_dp(struct intel_encoder *encoder,
+static void hsw_ddi_pre_enable_dp(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *crtc_state,
 				  const struct drm_connector_state *conn_state)
 {
@@ -3230,16 +3232,17 @@  static void hsw_ddi_pre_enable_dp(struct intel_encoder *encoder,
 	intel_dsc_enable(encoder, crtc_state);
 }
 
-static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
+static void intel_ddi_pre_enable_dp(struct intel_atomic_state *state,
+				    struct intel_encoder *encoder,
 				    const struct intel_crtc_state *crtc_state,
 				    const struct drm_connector_state *conn_state)
 {
 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 
 	if (INTEL_GEN(dev_priv) >= 12)
-		tgl_ddi_pre_enable_dp(encoder, crtc_state, conn_state);
+		tgl_ddi_pre_enable_dp(state, encoder, crtc_state, conn_state);
 	else
-		hsw_ddi_pre_enable_dp(encoder, crtc_state, conn_state);
+		hsw_ddi_pre_enable_dp(state, encoder, crtc_state, conn_state);
 
 	/* MST will call a setting of MSA after an allocating of Virtual Channel
 	 * from MST encoder pre_enable callback.
@@ -3251,7 +3254,8 @@  static void intel_ddi_pre_enable_dp(struct intel_encoder *encoder,
 	}
 }
 
-static void intel_ddi_pre_enable_hdmi(struct intel_encoder *encoder,
+static void intel_ddi_pre_enable_hdmi(struct intel_atomic_state *state,
+				      struct intel_encoder *encoder,
 				      const struct intel_crtc_state *crtc_state,
 				      const struct drm_connector_state *conn_state)
 {
@@ -3291,7 +3295,8 @@  static void intel_ddi_pre_enable_hdmi(struct intel_encoder *encoder,
 				       crtc_state, conn_state);
 }
 
-static void intel_ddi_pre_enable(struct intel_encoder *encoder,
+static void intel_ddi_pre_enable(struct intel_atomic_state *state,
+				 struct intel_encoder *encoder,
 				 const struct intel_crtc_state *crtc_state,
 				 const struct drm_connector_state *conn_state)
 {
@@ -3320,12 +3325,14 @@  static void intel_ddi_pre_enable(struct intel_encoder *encoder,
 	intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
 
 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
-		intel_ddi_pre_enable_hdmi(encoder, crtc_state, conn_state);
+		intel_ddi_pre_enable_hdmi(state, encoder, crtc_state,
+					  conn_state);
 	} else {
 		struct intel_lspcon *lspcon =
 				enc_to_intel_lspcon(encoder);
 
-		intel_ddi_pre_enable_dp(encoder, crtc_state, conn_state);
+		intel_ddi_pre_enable_dp(state, encoder, crtc_state,
+					conn_state);
 		if (lspcon->active) {
 			struct intel_digital_port *dig_port =
 					enc_to_dig_port(encoder);
@@ -3368,7 +3375,8 @@  static void intel_disable_ddi_buf(struct intel_encoder *encoder,
 		intel_wait_ddi_buf_idle(dev_priv, port);
 }
 
-static void intel_ddi_post_disable_dp(struct intel_encoder *encoder,
+static void intel_ddi_post_disable_dp(struct intel_atomic_state *state,
+				      struct intel_encoder *encoder,
 				      const struct intel_crtc_state *old_crtc_state,
 				      const struct drm_connector_state *old_conn_state)
 {
@@ -3424,7 +3432,8 @@  static void intel_ddi_post_disable_dp(struct intel_encoder *encoder,
 	intel_ddi_clk_disable(encoder);
 }
 
-static void intel_ddi_post_disable_hdmi(struct intel_encoder *encoder,
+static void intel_ddi_post_disable_hdmi(struct intel_atomic_state *state,
+					struct intel_encoder *encoder,
 					const struct intel_crtc_state *old_crtc_state,
 					const struct drm_connector_state *old_conn_state)
 {
@@ -3447,7 +3456,8 @@  static void intel_ddi_post_disable_hdmi(struct intel_encoder *encoder,
 	intel_dp_dual_mode_set_tmds_output(intel_hdmi, false);
 }
 
-static void intel_ddi_post_disable(struct intel_encoder *encoder,
+static void intel_ddi_post_disable(struct intel_atomic_state *state,
+				   struct intel_encoder *encoder,
 				   const struct intel_crtc_state *old_crtc_state,
 				   const struct drm_connector_state *old_conn_state)
 {
@@ -3485,11 +3495,11 @@  static void intel_ddi_post_disable(struct intel_encoder *encoder,
 	 */
 
 	if (intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_HDMI))
-		intel_ddi_post_disable_hdmi(encoder,
-					    old_crtc_state, old_conn_state);
+		intel_ddi_post_disable_hdmi(state, encoder, old_crtc_state,
+					    old_conn_state);
 	else
-		intel_ddi_post_disable_dp(encoder,
-					  old_crtc_state, old_conn_state);
+		intel_ddi_post_disable_dp(state, encoder, old_crtc_state,
+					  old_conn_state);
 
 	if (INTEL_GEN(dev_priv) >= 11)
 		icl_unmap_plls_to_ports(encoder);
@@ -3502,7 +3512,8 @@  static void intel_ddi_post_disable(struct intel_encoder *encoder,
 		intel_tc_port_put_link(dig_port);
 }
 
-void intel_ddi_fdi_post_disable(struct intel_encoder *encoder,
+void intel_ddi_fdi_post_disable(struct intel_atomic_state *state,
+				struct intel_encoder *encoder,
 				const struct intel_crtc_state *old_crtc_state,
 				const struct drm_connector_state *old_conn_state)
 {
@@ -3536,7 +3547,8 @@  void intel_ddi_fdi_post_disable(struct intel_encoder *encoder,
 	intel_de_write(dev_priv, FDI_RX_CTL(PIPE_A), val);
 }
 
-static void intel_enable_ddi_dp(struct intel_encoder *encoder,
+static void intel_enable_ddi_dp(struct intel_atomic_state *state,
+				struct intel_encoder *encoder,
 				const struct intel_crtc_state *crtc_state,
 				const struct drm_connector_state *conn_state)
 {
@@ -3577,7 +3589,8 @@  gen9_chicken_trans_reg_by_port(struct drm_i915_private *dev_priv,
 	return CHICKEN_TRANS(trans[port]);
 }
 
-static void intel_enable_ddi_hdmi(struct intel_encoder *encoder,
+static void intel_enable_ddi_hdmi(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *crtc_state,
 				  const struct drm_connector_state *conn_state)
 {
@@ -3639,7 +3652,8 @@  static void intel_enable_ddi_hdmi(struct intel_encoder *encoder,
 		intel_audio_codec_enable(encoder, crtc_state, conn_state);
 }
 
-static void intel_enable_ddi(struct intel_encoder *encoder,
+static void intel_enable_ddi(struct intel_atomic_state *state,
+			     struct intel_encoder *encoder,
 			     const struct intel_crtc_state *crtc_state,
 			     const struct drm_connector_state *conn_state)
 {
@@ -3650,9 +3664,9 @@  static void intel_enable_ddi(struct intel_encoder *encoder,
 	intel_crtc_vblank_on(crtc_state);
 
 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
-		intel_enable_ddi_hdmi(encoder, crtc_state, conn_state);
+		intel_enable_ddi_hdmi(state, encoder, crtc_state, conn_state);
 	else
-		intel_enable_ddi_dp(encoder, crtc_state, conn_state);
+		intel_enable_ddi_dp(state, encoder, crtc_state, conn_state);
 
 	/* Enable hdcp if it's desired */
 	if (conn_state->content_protection ==
@@ -3662,7 +3676,8 @@  static void intel_enable_ddi(struct intel_encoder *encoder,
 				  (u8)conn_state->hdcp_content_type);
 }
 
-static void intel_disable_ddi_dp(struct intel_encoder *encoder,
+static void intel_disable_ddi_dp(struct intel_atomic_state *state,
+				 struct intel_encoder *encoder,
 				 const struct intel_crtc_state *old_crtc_state,
 				 const struct drm_connector_state *old_conn_state)
 {
@@ -3682,7 +3697,8 @@  static void intel_disable_ddi_dp(struct intel_encoder *encoder,
 					      false);
 }
 
-static void intel_disable_ddi_hdmi(struct intel_encoder *encoder,
+static void intel_disable_ddi_hdmi(struct intel_atomic_state *state,
+				   struct intel_encoder *encoder,
 				   const struct intel_crtc_state *old_crtc_state,
 				   const struct drm_connector_state *old_conn_state)
 {
@@ -3698,19 +3714,23 @@  static void intel_disable_ddi_hdmi(struct intel_encoder *encoder,
 			      connector->base.id, connector->name);
 }
 
-static void intel_disable_ddi(struct intel_encoder *encoder,
+static void intel_disable_ddi(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *old_crtc_state,
 			      const struct drm_connector_state *old_conn_state)
 {
 	intel_hdcp_disable(to_intel_connector(old_conn_state->connector));
 
 	if (intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_HDMI))
-		intel_disable_ddi_hdmi(encoder, old_crtc_state, old_conn_state);
+		intel_disable_ddi_hdmi(state, encoder, old_crtc_state,
+				       old_conn_state);
 	else
-		intel_disable_ddi_dp(encoder, old_crtc_state, old_conn_state);
+		intel_disable_ddi_dp(state, encoder, old_crtc_state,
+				     old_conn_state);
 }
 
-static void intel_ddi_update_pipe_dp(struct intel_encoder *encoder,
+static void intel_ddi_update_pipe_dp(struct intel_atomic_state *state,
+				     struct intel_encoder *encoder,
 				     const struct intel_crtc_state *crtc_state,
 				     const struct drm_connector_state *conn_state)
 {
@@ -3721,18 +3741,20 @@  static void intel_ddi_update_pipe_dp(struct intel_encoder *encoder,
 	intel_psr_update(intel_dp, crtc_state);
 	intel_edp_drrs_enable(intel_dp, crtc_state);
 
-	intel_panel_update_backlight(encoder, crtc_state, conn_state);
+	intel_panel_update_backlight(state, encoder, crtc_state, conn_state);
 }
 
-static void intel_ddi_update_pipe(struct intel_encoder *encoder,
+static void intel_ddi_update_pipe(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *crtc_state,
 				  const struct drm_connector_state *conn_state)
 {
 
 	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
-		intel_ddi_update_pipe_dp(encoder, crtc_state, conn_state);
+		intel_ddi_update_pipe_dp(state, encoder, crtc_state,
+					 conn_state);
 
-	intel_hdcp_update_pipe(encoder, crtc_state, conn_state);
+	intel_hdcp_update_pipe(state, encoder, crtc_state, conn_state);
 }
 
 static void
@@ -3761,7 +3783,8 @@  intel_ddi_update_complete(struct intel_atomic_state *state,
 }
 
 static void
-intel_ddi_pre_pll_enable(struct intel_encoder *encoder,
+intel_ddi_pre_pll_enable(struct intel_atomic_state *state,
+			 struct intel_encoder *encoder,
 			 const struct intel_crtc_state *crtc_state,
 			 const struct drm_connector_state *conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.h b/drivers/gpu/drm/i915/display/intel_ddi.h
index 55fd72b901fe..de4cd877c002 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.h
+++ b/drivers/gpu/drm/i915/display/intel_ddi.h
@@ -17,7 +17,8 @@  struct intel_dp;
 struct intel_dpll_hw_state;
 struct intel_encoder;
 
-void intel_ddi_fdi_post_disable(struct intel_encoder *intel_encoder,
+void intel_ddi_fdi_post_disable(struct intel_atomic_state *state,
+				struct intel_encoder *intel_encoder,
 				const struct intel_crtc_state *old_crtc_state,
 				const struct drm_connector_state *old_conn_state);
 void hsw_fdi_link_train(struct intel_encoder *encoder,
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 3926ac8f1f10..84e59f6ab8e4 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -6689,7 +6689,8 @@  static void intel_encoders_pre_pll_enable(struct intel_atomic_state *state,
 			continue;
 
 		if (encoder->pre_pll_enable)
-			encoder->pre_pll_enable(encoder, crtc_state, conn_state);
+			encoder->pre_pll_enable(state, encoder,
+						crtc_state, conn_state);
 	}
 }
 
@@ -6710,7 +6711,8 @@  static void intel_encoders_pre_enable(struct intel_atomic_state *state,
 			continue;
 
 		if (encoder->pre_enable)
-			encoder->pre_enable(encoder, crtc_state, conn_state);
+			encoder->pre_enable(state, encoder,
+					    crtc_state, conn_state);
 	}
 }
 
@@ -6731,7 +6733,8 @@  static void intel_encoders_enable(struct intel_atomic_state *state,
 			continue;
 
 		if (encoder->enable)
-			encoder->enable(encoder, crtc_state, conn_state);
+			encoder->enable(state, encoder,
+					crtc_state, conn_state);
 		intel_opregion_notify_encoder(encoder, true);
 	}
 }
@@ -6754,7 +6757,8 @@  static void intel_encoders_disable(struct intel_atomic_state *state,
 
 		intel_opregion_notify_encoder(encoder, false);
 		if (encoder->disable)
-			encoder->disable(encoder, old_crtc_state, old_conn_state);
+			encoder->disable(state, encoder,
+					 old_crtc_state, old_conn_state);
 	}
 }
 
@@ -6775,7 +6779,8 @@  static void intel_encoders_post_disable(struct intel_atomic_state *state,
 			continue;
 
 		if (encoder->post_disable)
-			encoder->post_disable(encoder, old_crtc_state, old_conn_state);
+			encoder->post_disable(state, encoder,
+					      old_crtc_state, old_conn_state);
 	}
 }
 
@@ -6796,7 +6801,8 @@  static void intel_encoders_post_pll_disable(struct intel_atomic_state *state,
 			continue;
 
 		if (encoder->post_pll_disable)
-			encoder->post_pll_disable(encoder, old_crtc_state, old_conn_state);
+			encoder->post_pll_disable(state, encoder,
+						  old_crtc_state, old_conn_state);
 	}
 }
 
@@ -6817,7 +6823,8 @@  static void intel_encoders_update_pipe(struct intel_atomic_state *state,
 			continue;
 
 		if (encoder->update_pipe)
-			encoder->update_pipe(encoder, crtc_state, conn_state);
+			encoder->update_pipe(state, encoder,
+					     crtc_state, conn_state);
 	}
 }
 
@@ -18133,11 +18140,12 @@  static void intel_sanitize_encoder(struct intel_encoder *encoder)
 			best_encoder = connector->base.state->best_encoder;
 			connector->base.state->best_encoder = &encoder->base;
 
+			/* FIXME NULL atomic state passed! */
 			if (encoder->disable)
-				encoder->disable(encoder, crtc_state,
+				encoder->disable(NULL, encoder, crtc_state,
 						 connector->base.state);
 			if (encoder->post_disable)
-				encoder->post_disable(encoder, crtc_state,
+				encoder->post_disable(NULL, encoder, crtc_state,
 						      connector->base.state);
 
 			connector->base.state->best_encoder = best_encoder;
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 5e00e611f077..ad39386231d5 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -146,28 +146,35 @@  struct intel_encoder {
 	void (*update_prepare)(struct intel_atomic_state *,
 			       struct intel_encoder *,
 			       struct intel_crtc *);
-	void (*pre_pll_enable)(struct intel_encoder *,
+	void (*pre_pll_enable)(struct intel_atomic_state *,
+			       struct intel_encoder *,
 			       const struct intel_crtc_state *,
 			       const struct drm_connector_state *);
-	void (*pre_enable)(struct intel_encoder *,
+	void (*pre_enable)(struct intel_atomic_state *,
+			   struct intel_encoder *,
 			   const struct intel_crtc_state *,
 			   const struct drm_connector_state *);
-	void (*enable)(struct intel_encoder *,
+	void (*enable)(struct intel_atomic_state *,
+		       struct intel_encoder *,
 		       const struct intel_crtc_state *,
 		       const struct drm_connector_state *);
 	void (*update_complete)(struct intel_atomic_state *,
 				struct intel_encoder *,
 				struct intel_crtc *);
-	void (*disable)(struct intel_encoder *,
+	void (*disable)(struct intel_atomic_state *,
+			struct intel_encoder *,
 			const struct intel_crtc_state *,
 			const struct drm_connector_state *);
-	void (*post_disable)(struct intel_encoder *,
+	void (*post_disable)(struct intel_atomic_state *,
+			     struct intel_encoder *,
 			     const struct intel_crtc_state *,
 			     const struct drm_connector_state *);
-	void (*post_pll_disable)(struct intel_encoder *,
+	void (*post_pll_disable)(struct intel_atomic_state *,
+				 struct intel_encoder *,
 				 const struct intel_crtc_state *,
 				 const struct drm_connector_state *);
-	void (*update_pipe)(struct intel_encoder *,
+	void (*update_pipe)(struct intel_atomic_state *,
+			    struct intel_encoder *,
 			    const struct intel_crtc_state *,
 			    const struct drm_connector_state *);
 	/* Read out the current hw state of this connector, returning true if
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 89d54f5fe60b..d4c17a5e9be2 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -3393,7 +3393,8 @@  static void intel_dp_get_config(struct intel_encoder *encoder,
 	}
 }
 
-static void intel_disable_dp(struct intel_encoder *encoder,
+static void intel_disable_dp(struct intel_atomic_state *state,
+			     struct intel_encoder *encoder,
 			     const struct intel_crtc_state *old_crtc_state,
 			     const struct drm_connector_state *old_conn_state)
 {
@@ -3413,21 +3414,24 @@  static void intel_disable_dp(struct intel_encoder *encoder,
 	intel_edp_panel_off(intel_dp);
 }
 
-static void g4x_disable_dp(struct intel_encoder *encoder,
+static void g4x_disable_dp(struct intel_atomic_state *state,
+			   struct intel_encoder *encoder,
 			   const struct intel_crtc_state *old_crtc_state,
 			   const struct drm_connector_state *old_conn_state)
 {
-	intel_disable_dp(encoder, old_crtc_state, old_conn_state);
+	intel_disable_dp(state, encoder, old_crtc_state, old_conn_state);
 }
 
-static void vlv_disable_dp(struct intel_encoder *encoder,
+static void vlv_disable_dp(struct intel_atomic_state *state,
+			   struct intel_encoder *encoder,
 			   const struct intel_crtc_state *old_crtc_state,
 			   const struct drm_connector_state *old_conn_state)
 {
-	intel_disable_dp(encoder, old_crtc_state, old_conn_state);
+	intel_disable_dp(state, encoder, old_crtc_state, old_conn_state);
 }
 
-static void g4x_post_disable_dp(struct intel_encoder *encoder,
+static void g4x_post_disable_dp(struct intel_atomic_state *state,
+				struct intel_encoder *encoder,
 				const struct intel_crtc_state *old_crtc_state,
 				const struct drm_connector_state *old_conn_state)
 {
@@ -3447,14 +3451,16 @@  static void g4x_post_disable_dp(struct intel_encoder *encoder,
 		ilk_edp_pll_off(intel_dp, old_crtc_state);
 }
 
-static void vlv_post_disable_dp(struct intel_encoder *encoder,
+static void vlv_post_disable_dp(struct intel_atomic_state *state,
+				struct intel_encoder *encoder,
 				const struct intel_crtc_state *old_crtc_state,
 				const struct drm_connector_state *old_conn_state)
 {
 	intel_dp_link_down(encoder, old_crtc_state);
 }
 
-static void chv_post_disable_dp(struct intel_encoder *encoder,
+static void chv_post_disable_dp(struct intel_atomic_state *state,
+				struct intel_encoder *encoder,
 				const struct intel_crtc_state *old_crtc_state,
 				const struct drm_connector_state *old_conn_state)
 {
@@ -3580,7 +3586,8 @@  static void intel_dp_enable_port(struct intel_dp *intel_dp,
 	intel_de_posting_read(dev_priv, intel_dp->output_reg);
 }
 
-static void intel_enable_dp(struct intel_encoder *encoder,
+static void intel_enable_dp(struct intel_atomic_state *state,
+			    struct intel_encoder *encoder,
 			    const struct intel_crtc_state *pipe_config,
 			    const struct drm_connector_state *conn_state)
 {
@@ -3626,22 +3633,25 @@  static void intel_enable_dp(struct intel_encoder *encoder,
 	}
 }
 
-static void g4x_enable_dp(struct intel_encoder *encoder,
+static void g4x_enable_dp(struct intel_atomic_state *state,
+			  struct intel_encoder *encoder,
 			  const struct intel_crtc_state *pipe_config,
 			  const struct drm_connector_state *conn_state)
 {
-	intel_enable_dp(encoder, pipe_config, conn_state);
+	intel_enable_dp(state, encoder, pipe_config, conn_state);
 	intel_edp_backlight_on(pipe_config, conn_state);
 }
 
-static void vlv_enable_dp(struct intel_encoder *encoder,
+static void vlv_enable_dp(struct intel_atomic_state *state,
+			  struct intel_encoder *encoder,
 			  const struct intel_crtc_state *pipe_config,
 			  const struct drm_connector_state *conn_state)
 {
 	intel_edp_backlight_on(pipe_config, conn_state);
 }
 
-static void g4x_pre_enable_dp(struct intel_encoder *encoder,
+static void g4x_pre_enable_dp(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *pipe_config,
 			      const struct drm_connector_state *conn_state)
 {
@@ -3761,16 +3771,18 @@  static void vlv_init_panel_power_sequencer(struct intel_encoder *encoder,
 	intel_dp_init_panel_power_sequencer_registers(intel_dp, true);
 }
 
-static void vlv_pre_enable_dp(struct intel_encoder *encoder,
+static void vlv_pre_enable_dp(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *pipe_config,
 			      const struct drm_connector_state *conn_state)
 {
 	vlv_phy_pre_encoder_enable(encoder, pipe_config);
 
-	intel_enable_dp(encoder, pipe_config, conn_state);
+	intel_enable_dp(state, encoder, pipe_config, conn_state);
 }
 
-static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder,
+static void vlv_dp_pre_pll_enable(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *pipe_config,
 				  const struct drm_connector_state *conn_state)
 {
@@ -3779,19 +3791,21 @@  static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder,
 	vlv_phy_pre_pll_enable(encoder, pipe_config);
 }
 
-static void chv_pre_enable_dp(struct intel_encoder *encoder,
+static void chv_pre_enable_dp(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *pipe_config,
 			      const struct drm_connector_state *conn_state)
 {
 	chv_phy_pre_encoder_enable(encoder, pipe_config);
 
-	intel_enable_dp(encoder, pipe_config, conn_state);
+	intel_enable_dp(state, encoder, pipe_config, conn_state);
 
 	/* Second common lane will stay alive on its own now */
 	chv_phy_release_cl2_override(encoder);
 }
 
-static void chv_dp_pre_pll_enable(struct intel_encoder *encoder,
+static void chv_dp_pre_pll_enable(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *pipe_config,
 				  const struct drm_connector_state *conn_state)
 {
@@ -3800,7 +3814,8 @@  static void chv_dp_pre_pll_enable(struct intel_encoder *encoder,
 	chv_phy_pre_pll_enable(encoder, pipe_config);
 }
 
-static void chv_dp_post_pll_disable(struct intel_encoder *encoder,
+static void chv_dp_post_pll_disable(struct intel_atomic_state *state,
+				    struct intel_encoder *encoder,
 				    const struct intel_crtc_state *old_crtc_state,
 				    const struct drm_connector_state *old_conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index b9afc1135b9b..5f54cc2d6b40 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -316,7 +316,8 @@  intel_dp_mst_atomic_check(struct drm_connector *connector,
 	return ret;
 }
 
-static void intel_mst_disable_dp(struct intel_encoder *encoder,
+static void intel_mst_disable_dp(struct intel_atomic_state *state,
+				 struct intel_encoder *encoder,
 				 const struct intel_crtc_state *old_crtc_state,
 				 const struct drm_connector_state *old_conn_state)
 {
@@ -340,7 +341,8 @@  static void intel_mst_disable_dp(struct intel_encoder *encoder,
 					  old_crtc_state, old_conn_state);
 }
 
-static void intel_mst_post_disable_dp(struct intel_encoder *encoder,
+static void intel_mst_post_disable_dp(struct intel_atomic_state *state,
+				      struct intel_encoder *encoder,
 				      const struct intel_crtc_state *old_crtc_state,
 				      const struct drm_connector_state *old_conn_state)
 {
@@ -405,13 +407,14 @@  static void intel_mst_post_disable_dp(struct intel_encoder *encoder,
 
 	intel_mst->connector = NULL;
 	if (last_mst_stream)
-		intel_dig_port->base.post_disable(&intel_dig_port->base,
+		intel_dig_port->base.post_disable(state, &intel_dig_port->base,
 						  old_crtc_state, NULL);
 
 	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
 }
 
-static void intel_mst_pre_pll_enable_dp(struct intel_encoder *encoder,
+static void intel_mst_pre_pll_enable_dp(struct intel_atomic_state *state,
+					struct intel_encoder *encoder,
 					const struct intel_crtc_state *pipe_config,
 					const struct drm_connector_state *conn_state)
 {
@@ -420,11 +423,12 @@  static void intel_mst_pre_pll_enable_dp(struct intel_encoder *encoder,
 	struct intel_dp *intel_dp = &intel_dig_port->dp;
 
 	if (intel_dp->active_mst_links == 0)
-		intel_dig_port->base.pre_pll_enable(&intel_dig_port->base,
+		intel_dig_port->base.pre_pll_enable(state, &intel_dig_port->base,
 						    pipe_config, NULL);
 }
 
-static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
+static void intel_mst_pre_enable_dp(struct intel_atomic_state *state,
+				    struct intel_encoder *encoder,
 				    const struct intel_crtc_state *pipe_config,
 				    const struct drm_connector_state *conn_state)
 {
@@ -456,7 +460,7 @@  static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
 	drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true);
 
 	if (first_mst_stream)
-		intel_dig_port->base.pre_enable(&intel_dig_port->base,
+		intel_dig_port->base.pre_enable(state, &intel_dig_port->base,
 						pipe_config, NULL);
 
 	ret = drm_dp_mst_allocate_vcpi(&intel_dp->mst_mgr,
@@ -487,7 +491,8 @@  static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
 	intel_dp_set_m_n(pipe_config, M1_N1);
 }
 
-static void intel_mst_enable_dp(struct intel_encoder *encoder,
+static void intel_mst_enable_dp(struct intel_atomic_state *state,
+				struct intel_encoder *encoder,
 				const struct intel_crtc_state *pipe_config,
 				const struct drm_connector_state *conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_dvo.c b/drivers/gpu/drm/i915/display/intel_dvo.c
index 341d5ce8b062..5cd09034519b 100644
--- a/drivers/gpu/drm/i915/display/intel_dvo.c
+++ b/drivers/gpu/drm/i915/display/intel_dvo.c
@@ -183,7 +183,8 @@  static void intel_dvo_get_config(struct intel_encoder *encoder,
 	pipe_config->hw.adjusted_mode.crtc_clock = pipe_config->port_clock;
 }
 
-static void intel_disable_dvo(struct intel_encoder *encoder,
+static void intel_disable_dvo(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *old_crtc_state,
 			      const struct drm_connector_state *old_conn_state)
 {
@@ -197,7 +198,8 @@  static void intel_disable_dvo(struct intel_encoder *encoder,
 	intel_de_read(dev_priv, dvo_reg);
 }
 
-static void intel_enable_dvo(struct intel_encoder *encoder,
+static void intel_enable_dvo(struct intel_atomic_state *state,
+			     struct intel_encoder *encoder,
 			     const struct intel_crtc_state *pipe_config,
 			     const struct drm_connector_state *conn_state)
 {
@@ -272,7 +274,8 @@  static int intel_dvo_compute_config(struct intel_encoder *encoder,
 	return 0;
 }
 
-static void intel_dvo_pre_enable(struct intel_encoder *encoder,
+static void intel_dvo_pre_enable(struct intel_atomic_state *state,
+				 struct intel_encoder *encoder,
 				 const struct intel_crtc_state *pipe_config,
 				 const struct drm_connector_state *conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c b/drivers/gpu/drm/i915/display/intel_hdcp.c
index ee0f27ea2810..0ed9c5d33d75 100644
--- a/drivers/gpu/drm/i915/display/intel_hdcp.c
+++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
@@ -2075,7 +2075,8 @@  int intel_hdcp_disable(struct intel_connector *connector)
 	return ret;
 }
 
-void intel_hdcp_update_pipe(struct intel_encoder *encoder,
+void intel_hdcp_update_pipe(struct intel_atomic_state *state,
+			    struct intel_encoder *encoder,
 			    const struct intel_crtc_state *crtc_state,
 			    const struct drm_connector_state *conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.h b/drivers/gpu/drm/i915/display/intel_hdcp.h
index 7c12ad609b1f..86bbaec120cc 100644
--- a/drivers/gpu/drm/i915/display/intel_hdcp.h
+++ b/drivers/gpu/drm/i915/display/intel_hdcp.h
@@ -11,6 +11,7 @@ 
 struct drm_connector;
 struct drm_connector_state;
 struct drm_i915_private;
+struct intel_atomic_state;
 struct intel_connector;
 struct intel_crtc_state;
 struct intel_encoder;
@@ -26,7 +27,8 @@  int intel_hdcp_init(struct intel_connector *connector,
 int intel_hdcp_enable(struct intel_connector *connector,
 		      enum transcoder cpu_transcoder, u8 content_type);
 int intel_hdcp_disable(struct intel_connector *connector);
-void intel_hdcp_update_pipe(struct intel_encoder *encoder,
+void intel_hdcp_update_pipe(struct intel_atomic_state *state,
+			    struct intel_encoder *encoder,
 			    const struct intel_crtc_state *crtc_state,
 			    const struct drm_connector_state *conn_state);
 bool is_hdcp_supported(struct drm_i915_private *dev_priv, enum port port);
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
index 39930232b253..484e067b100b 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -1878,7 +1878,8 @@  static void intel_enable_hdmi_audio(struct intel_encoder *encoder,
 	intel_audio_codec_enable(encoder, pipe_config, conn_state);
 }
 
-static void g4x_enable_hdmi(struct intel_encoder *encoder,
+static void g4x_enable_hdmi(struct intel_atomic_state *state,
+			    struct intel_encoder *encoder,
 			    const struct intel_crtc_state *pipe_config,
 			    const struct drm_connector_state *conn_state)
 {
@@ -1900,7 +1901,8 @@  static void g4x_enable_hdmi(struct intel_encoder *encoder,
 		intel_enable_hdmi_audio(encoder, pipe_config, conn_state);
 }
 
-static void ibx_enable_hdmi(struct intel_encoder *encoder,
+static void ibx_enable_hdmi(struct intel_atomic_state *state,
+			    struct intel_encoder *encoder,
 			    const struct intel_crtc_state *pipe_config,
 			    const struct drm_connector_state *conn_state)
 {
@@ -1951,7 +1953,8 @@  static void ibx_enable_hdmi(struct intel_encoder *encoder,
 		intel_enable_hdmi_audio(encoder, pipe_config, conn_state);
 }
 
-static void cpt_enable_hdmi(struct intel_encoder *encoder,
+static void cpt_enable_hdmi(struct intel_atomic_state *state,
+			    struct intel_encoder *encoder,
 			    const struct intel_crtc_state *pipe_config,
 			    const struct drm_connector_state *conn_state)
 {
@@ -2004,13 +2007,15 @@  static void cpt_enable_hdmi(struct intel_encoder *encoder,
 		intel_enable_hdmi_audio(encoder, pipe_config, conn_state);
 }
 
-static void vlv_enable_hdmi(struct intel_encoder *encoder,
+static void vlv_enable_hdmi(struct intel_atomic_state *state,
+			    struct intel_encoder *encoder,
 			    const struct intel_crtc_state *pipe_config,
 			    const struct drm_connector_state *conn_state)
 {
 }
 
-static void intel_disable_hdmi(struct intel_encoder *encoder,
+static void intel_disable_hdmi(struct intel_atomic_state *state,
+			       struct intel_encoder *encoder,
 			       const struct intel_crtc_state *old_crtc_state,
 			       const struct drm_connector_state *old_conn_state)
 {
@@ -2068,7 +2073,8 @@  static void intel_disable_hdmi(struct intel_encoder *encoder,
 	intel_dp_dual_mode_set_tmds_output(intel_hdmi, false);
 }
 
-static void g4x_disable_hdmi(struct intel_encoder *encoder,
+static void g4x_disable_hdmi(struct intel_atomic_state *state,
+			     struct intel_encoder *encoder,
 			     const struct intel_crtc_state *old_crtc_state,
 			     const struct drm_connector_state *old_conn_state)
 {
@@ -2076,10 +2082,11 @@  static void g4x_disable_hdmi(struct intel_encoder *encoder,
 		intel_audio_codec_disable(encoder,
 					  old_crtc_state, old_conn_state);
 
-	intel_disable_hdmi(encoder, old_crtc_state, old_conn_state);
+	intel_disable_hdmi(state, encoder, old_crtc_state, old_conn_state);
 }
 
-static void pch_disable_hdmi(struct intel_encoder *encoder,
+static void pch_disable_hdmi(struct intel_atomic_state *state,
+			     struct intel_encoder *encoder,
 			     const struct intel_crtc_state *old_crtc_state,
 			     const struct drm_connector_state *old_conn_state)
 {
@@ -2088,11 +2095,12 @@  static void pch_disable_hdmi(struct intel_encoder *encoder,
 					  old_crtc_state, old_conn_state);
 }
 
-static void pch_post_disable_hdmi(struct intel_encoder *encoder,
+static void pch_post_disable_hdmi(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *old_crtc_state,
 				  const struct drm_connector_state *old_conn_state)
 {
-	intel_disable_hdmi(encoder, old_crtc_state, old_conn_state);
+	intel_disable_hdmi(state, encoder, old_crtc_state, old_conn_state);
 }
 
 static int intel_hdmi_source_max_tmds_clock(struct intel_encoder *encoder)
@@ -2474,7 +2482,8 @@  int intel_hdmi_compute_config(struct intel_encoder *encoder,
 		}
 	}
 
-	intel_hdmi_compute_gcp_infoframe(encoder, pipe_config, conn_state);
+	intel_hdmi_compute_gcp_infoframe(encoder, pipe_config,
+					 conn_state);
 
 	if (!intel_hdmi_compute_avi_infoframe(encoder, pipe_config, conn_state)) {
 		DRM_DEBUG_KMS("bad AVI infoframe\n");
@@ -2664,7 +2673,8 @@  static int intel_hdmi_get_modes(struct drm_connector *connector)
 	return intel_connector_update_modes(connector, edid);
 }
 
-static void intel_hdmi_pre_enable(struct intel_encoder *encoder,
+static void intel_hdmi_pre_enable(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *pipe_config,
 				  const struct drm_connector_state *conn_state)
 {
@@ -2678,7 +2688,8 @@  static void intel_hdmi_pre_enable(struct intel_encoder *encoder,
 				       pipe_config, conn_state);
 }
 
-static void vlv_hdmi_pre_enable(struct intel_encoder *encoder,
+static void vlv_hdmi_pre_enable(struct intel_atomic_state *state,
+				struct intel_encoder *encoder,
 				const struct intel_crtc_state *pipe_config,
 				const struct drm_connector_state *conn_state)
 {
@@ -2695,12 +2706,13 @@  static void vlv_hdmi_pre_enable(struct intel_encoder *encoder,
 			      pipe_config->has_infoframe,
 			      pipe_config, conn_state);
 
-	g4x_enable_hdmi(encoder, pipe_config, conn_state);
+	g4x_enable_hdmi(state, encoder, pipe_config, conn_state);
 
 	vlv_wait_port_ready(dev_priv, dport, 0x0);
 }
 
-static void vlv_hdmi_pre_pll_enable(struct intel_encoder *encoder,
+static void vlv_hdmi_pre_pll_enable(struct intel_atomic_state *state,
+				    struct intel_encoder *encoder,
 				    const struct intel_crtc_state *pipe_config,
 				    const struct drm_connector_state *conn_state)
 {
@@ -2709,7 +2721,8 @@  static void vlv_hdmi_pre_pll_enable(struct intel_encoder *encoder,
 	vlv_phy_pre_pll_enable(encoder, pipe_config);
 }
 
-static void chv_hdmi_pre_pll_enable(struct intel_encoder *encoder,
+static void chv_hdmi_pre_pll_enable(struct intel_atomic_state *state,
+				    struct intel_encoder *encoder,
 				    const struct intel_crtc_state *pipe_config,
 				    const struct drm_connector_state *conn_state)
 {
@@ -2718,14 +2731,16 @@  static void chv_hdmi_pre_pll_enable(struct intel_encoder *encoder,
 	chv_phy_pre_pll_enable(encoder, pipe_config);
 }
 
-static void chv_hdmi_post_pll_disable(struct intel_encoder *encoder,
+static void chv_hdmi_post_pll_disable(struct intel_atomic_state *state,
+				      struct intel_encoder *encoder,
 				      const struct intel_crtc_state *old_crtc_state,
 				      const struct drm_connector_state *old_conn_state)
 {
 	chv_phy_post_pll_disable(encoder, old_crtc_state);
 }
 
-static void vlv_hdmi_post_disable(struct intel_encoder *encoder,
+static void vlv_hdmi_post_disable(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *old_crtc_state,
 				  const struct drm_connector_state *old_conn_state)
 {
@@ -2733,7 +2748,8 @@  static void vlv_hdmi_post_disable(struct intel_encoder *encoder,
 	vlv_phy_reset_lanes(encoder, old_crtc_state);
 }
 
-static void chv_hdmi_post_disable(struct intel_encoder *encoder,
+static void chv_hdmi_post_disable(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *old_crtc_state,
 				  const struct drm_connector_state *old_conn_state)
 {
@@ -2748,7 +2764,8 @@  static void chv_hdmi_post_disable(struct intel_encoder *encoder,
 	vlv_dpio_put(dev_priv);
 }
 
-static void chv_hdmi_pre_enable(struct intel_encoder *encoder,
+static void chv_hdmi_pre_enable(struct intel_atomic_state *state,
+				struct intel_encoder *encoder,
 				const struct intel_crtc_state *pipe_config,
 				const struct drm_connector_state *conn_state)
 {
@@ -2766,7 +2783,7 @@  static void chv_hdmi_pre_enable(struct intel_encoder *encoder,
 			      pipe_config->has_infoframe,
 			      pipe_config, conn_state);
 
-	g4x_enable_hdmi(encoder, pipe_config, conn_state);
+	g4x_enable_hdmi(state, encoder, pipe_config, conn_state);
 
 	vlv_wait_port_ready(dev_priv, dport, 0x0);
 
diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c b/drivers/gpu/drm/i915/display/intel_lvds.c
index 9a067effcfa0..fe591f82163e 100644
--- a/drivers/gpu/drm/i915/display/intel_lvds.c
+++ b/drivers/gpu/drm/i915/display/intel_lvds.c
@@ -220,7 +220,8 @@  static void intel_lvds_pps_init_hw(struct drm_i915_private *dev_priv,
 		       REG_FIELD_PREP(PP_REFERENCE_DIVIDER_MASK, pps->divider) | REG_FIELD_PREP(PANEL_POWER_CYCLE_DELAY_MASK, DIV_ROUND_UP(pps->t4, 1000) + 1));
 }
 
-static void intel_pre_enable_lvds(struct intel_encoder *encoder,
+static void intel_pre_enable_lvds(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *pipe_config,
 				  const struct drm_connector_state *conn_state)
 {
@@ -301,7 +302,8 @@  static void intel_pre_enable_lvds(struct intel_encoder *encoder,
 /*
  * Sets the power state for the panel.
  */
-static void intel_enable_lvds(struct intel_encoder *encoder,
+static void intel_enable_lvds(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *pipe_config,
 			      const struct drm_connector_state *conn_state)
 {
@@ -323,7 +325,8 @@  static void intel_enable_lvds(struct intel_encoder *encoder,
 	intel_panel_enable_backlight(pipe_config, conn_state);
 }
 
-static void intel_disable_lvds(struct intel_encoder *encoder,
+static void intel_disable_lvds(struct intel_atomic_state *state,
+			       struct intel_encoder *encoder,
 			       const struct intel_crtc_state *old_crtc_state,
 			       const struct drm_connector_state *old_conn_state)
 {
@@ -341,28 +344,31 @@  static void intel_disable_lvds(struct intel_encoder *encoder,
 	intel_de_posting_read(dev_priv, lvds_encoder->reg);
 }
 
-static void gmch_disable_lvds(struct intel_encoder *encoder,
+static void gmch_disable_lvds(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *old_crtc_state,
 			      const struct drm_connector_state *old_conn_state)
 
 {
 	intel_panel_disable_backlight(old_conn_state);
 
-	intel_disable_lvds(encoder, old_crtc_state, old_conn_state);
+	intel_disable_lvds(state, encoder, old_crtc_state, old_conn_state);
 }
 
-static void pch_disable_lvds(struct intel_encoder *encoder,
+static void pch_disable_lvds(struct intel_atomic_state *state,
+			     struct intel_encoder *encoder,
 			     const struct intel_crtc_state *old_crtc_state,
 			     const struct drm_connector_state *old_conn_state)
 {
 	intel_panel_disable_backlight(old_conn_state);
 }
 
-static void pch_post_disable_lvds(struct intel_encoder *encoder,
+static void pch_post_disable_lvds(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *old_crtc_state,
 				  const struct drm_connector_state *old_conn_state)
 {
-	intel_disable_lvds(encoder, old_crtc_state, old_conn_state);
+	intel_disable_lvds(state, encoder, old_crtc_state, old_conn_state);
 }
 
 static enum drm_mode_status
diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
index 276f43870802..f8ccfe67429e 100644
--- a/drivers/gpu/drm/i915/display/intel_panel.c
+++ b/drivers/gpu/drm/i915/display/intel_panel.c
@@ -1931,7 +1931,8 @@  static int pwm_setup_backlight(struct intel_connector *connector,
 	return 0;
 }
 
-void intel_panel_update_backlight(struct intel_encoder *encoder,
+void intel_panel_update_backlight(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *crtc_state,
 				  const struct drm_connector_state *conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_panel.h b/drivers/gpu/drm/i915/display/intel_panel.h
index cedeea443336..11f2f6b628d8 100644
--- a/drivers/gpu/drm/i915/display/intel_panel.h
+++ b/drivers/gpu/drm/i915/display/intel_panel.h
@@ -37,7 +37,8 @@  int intel_panel_setup_backlight(struct drm_connector *connector,
 				enum pipe pipe);
 void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state,
 				  const struct drm_connector_state *conn_state);
-void intel_panel_update_backlight(struct intel_encoder *encoder,
+void intel_panel_update_backlight(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *crtc_state,
 				  const struct drm_connector_state *conn_state);
 void intel_panel_disable_backlight(const struct drm_connector_state *old_conn_state);
diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c b/drivers/gpu/drm/i915/display/intel_sdvo.c
index 637d8fe2f8c2..e6306cbb7a3a 100644
--- a/drivers/gpu/drm/i915/display/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/display/intel_sdvo.c
@@ -1430,7 +1430,8 @@  static void intel_sdvo_update_props(struct intel_sdvo *intel_sdvo,
 #undef UPDATE_PROPERTY
 }
 
-static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder,
+static void intel_sdvo_pre_enable(struct intel_atomic_state *state,
+				  struct intel_encoder *intel_encoder,
 				  const struct intel_crtc_state *crtc_state,
 				  const struct drm_connector_state *conn_state)
 {
@@ -1727,7 +1728,8 @@  static void intel_sdvo_enable_audio(struct intel_sdvo *intel_sdvo,
 				   SDVO_AUDIO_PRESENCE_DETECT);
 }
 
-static void intel_disable_sdvo(struct intel_encoder *encoder,
+static void intel_disable_sdvo(struct intel_atomic_state *state,
+			       struct intel_encoder *encoder,
 			       const struct intel_crtc_state *old_crtc_state,
 			       const struct drm_connector_state *conn_state)
 {
@@ -1775,20 +1777,23 @@  static void intel_disable_sdvo(struct intel_encoder *encoder,
 	}
 }
 
-static void pch_disable_sdvo(struct intel_encoder *encoder,
+static void pch_disable_sdvo(struct intel_atomic_state *state,
+			     struct intel_encoder *encoder,
 			     const struct intel_crtc_state *old_crtc_state,
 			     const struct drm_connector_state *old_conn_state)
 {
 }
 
-static void pch_post_disable_sdvo(struct intel_encoder *encoder,
+static void pch_post_disable_sdvo(struct intel_atomic_state *state,
+				  struct intel_encoder *encoder,
 				  const struct intel_crtc_state *old_crtc_state,
 				  const struct drm_connector_state *old_conn_state)
 {
-	intel_disable_sdvo(encoder, old_crtc_state, old_conn_state);
+	intel_disable_sdvo(state, encoder, old_crtc_state, old_conn_state);
 }
 
-static void intel_enable_sdvo(struct intel_encoder *encoder,
+static void intel_enable_sdvo(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *pipe_config,
 			      const struct drm_connector_state *conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/intel_tv.c b/drivers/gpu/drm/i915/display/intel_tv.c
index d2e3a3a323e9..b6003fc9e268 100644
--- a/drivers/gpu/drm/i915/display/intel_tv.c
+++ b/drivers/gpu/drm/i915/display/intel_tv.c
@@ -914,7 +914,8 @@  intel_tv_get_hw_state(struct intel_encoder *encoder, enum pipe *pipe)
 }
 
 static void
-intel_enable_tv(struct intel_encoder *encoder,
+intel_enable_tv(struct intel_atomic_state *state,
+		struct intel_encoder *encoder,
 		const struct intel_crtc_state *pipe_config,
 		const struct drm_connector_state *conn_state)
 {
@@ -930,7 +931,8 @@  intel_enable_tv(struct intel_encoder *encoder,
 }
 
 static void
-intel_disable_tv(struct intel_encoder *encoder,
+intel_disable_tv(struct intel_atomic_state *state,
+		 struct intel_encoder *encoder,
 		 const struct intel_crtc_state *old_crtc_state,
 		 const struct drm_connector_state *old_conn_state)
 {
@@ -1414,7 +1416,8 @@  static void set_color_conversion(struct drm_i915_private *dev_priv,
 		       (color_conversion->bv << 16) | color_conversion->av);
 }
 
-static void intel_tv_pre_enable(struct intel_encoder *encoder,
+static void intel_tv_pre_enable(struct intel_atomic_state *state,
+				struct intel_encoder *encoder,
 				const struct intel_crtc_state *pipe_config,
 				const struct drm_connector_state *conn_state)
 {
diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c b/drivers/gpu/drm/i915/display/vlv_dsi.c
index f4c362dc6e15..a277d7d6b3bf 100644
--- a/drivers/gpu/drm/i915/display/vlv_dsi.c
+++ b/drivers/gpu/drm/i915/display/vlv_dsi.c
@@ -759,7 +759,8 @@  static void intel_dsi_unprepare(struct intel_encoder *encoder);
  * DSI port enable has to be done before pipe and plane enable, so we do it in
  * the pre_enable hook instead of the enable hook.
  */
-static void intel_dsi_pre_enable(struct intel_encoder *encoder,
+static void intel_dsi_pre_enable(struct intel_atomic_state *state,
+				 struct intel_encoder *encoder,
 				 const struct intel_crtc_state *pipe_config,
 				 const struct drm_connector_state *conn_state)
 {
@@ -858,7 +859,8 @@  static void intel_dsi_pre_enable(struct intel_encoder *encoder,
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_BACKLIGHT_ON);
 }
 
-static void bxt_dsi_enable(struct intel_encoder *encoder,
+static void bxt_dsi_enable(struct intel_atomic_state *state,
+			   struct intel_encoder *encoder,
 			   const struct intel_crtc_state *crtc_state,
 			   const struct drm_connector_state *conn_state)
 {
@@ -871,7 +873,8 @@  static void bxt_dsi_enable(struct intel_encoder *encoder,
  * DSI port disable has to be done after pipe and plane disable, so we do it in
  * the post_disable hook.
  */
-static void intel_dsi_disable(struct intel_encoder *encoder,
+static void intel_dsi_disable(struct intel_atomic_state *state,
+			      struct intel_encoder *encoder,
 			      const struct intel_crtc_state *old_crtc_state,
 			      const struct drm_connector_state *old_conn_state)
 {
@@ -906,7 +909,8 @@  static void intel_dsi_clear_device_ready(struct intel_encoder *encoder)
 		vlv_dsi_clear_device_ready(encoder);
 }
 
-static void intel_dsi_post_disable(struct intel_encoder *encoder,
+static void intel_dsi_post_disable(struct intel_atomic_state *state,
+				   struct intel_encoder *encoder,
 				   const struct intel_crtc_state *old_crtc_state,
 				   const struct drm_connector_state *old_conn_state)
 {