[Intel-gfx] [PATCH 12/13] drm/i915: Pass atomic state to encoder hooks

Souza, Jose jose.souza at intel.com
Thu Apr 2 01:18:21 UTC 2020


On Fri, 2020-03-13 at 18:48 +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at 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 at intel.com>

> 
> Signed-off-by: Ville Syrjälä <ville.syrjala at 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)
>  {


More information about the Intel-gfx mailing list