All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 05/15] drm/i915: Pass crtc_state and connector_state to encoder functions
Date: Thu, 18 Aug 2016 15:30:16 +0200	[thread overview]
Message-ID: <20160818133016.GG6232@phenom.ffwll.local> (raw)
In-Reply-To: <1470755054-32699-6-git-send-email-maarten.lankhorst@linux.intel.com>

On Tue, Aug 09, 2016 at 05:04:04PM +0200, Maarten Lankhorst wrote:
> This is mostly code churn, with exception of a few places:
> - intel_display.c has changes in intel_sanitize_encoder
> - intel_ddi.c has intel_ddi_fdi_disable calling intel_ddi_post_disable,
>   and required a function change. Also affects intel_display.c
> - intel_dp_mst.c passes a NULL crtc_state and conn_state to
>   intel_ddi_post_disable for shutting down the real encoder.

I didn't find this NULL callsite. Outdated commit message?

> 
> No other functional changes are done, diff stat is already huge.
> Each encoder type will need to be fixed to use the atomic states
> separately.
> 
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> @@ -5131,12 +5137,26 @@ static void haswell_crtc_disable(struct intel_crtc_state *old_crtc_state,
>  	if (!transcoder_is_dsi(cpu_transcoder))
>  		intel_ddi_disable_pipe_clock(intel_crtc);
>  
> -	intel_encoders_post_disable(crtc, old_state);
> +	intel_encoders_post_disable(crtc, old_crtc_state, old_state);
>  
>  	if (intel_crtc->config->has_pch_encoder) {
> +		struct drm_connector_state *old_conn_state;
> +		struct drm_connector *conn;
> +		int i;
> +
>  		lpt_disable_pch_transcoder(dev_priv);
>  		lpt_disable_iclkip(dev_priv);
> -		intel_ddi_fdi_disable(crtc);
> +
> +		for_each_connector_in_state(old_state, conn, old_conn_state, i)
> +			if (old_conn_state->crtc == crtc) {
> +				struct intel_encoder *encoder =
> +					to_intel_encoder(old_conn_state->best_encoder);
> +
> +				intel_ddi_fdi_disable(encoder,
> +						      old_crtc_state,
> +						      old_conn_state);
> +				break;
> +			}

This is pretty much the reasone why I think the hsw+ fdi code should be
part of the lpt+crt encoder driver, and _not_ in the shared crtc logic.
I've sent around patches a few times to make this happen, but they all got
shot down because that makes it unlike the ilk-ivb modeset code.

Imo it's time to finally do this, at least for this one here. Needs to be
a prep patch.

>  
>  		intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
>  						      true);
> @@ -6227,7 +6247,7 @@ static void valleyview_crtc_enable(struct intel_crtc_state *pipe_config,
>  
>  	intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
>  
> -	intel_encoders_pre_pll_enable(crtc, old_state);
> +	intel_encoders_pre_pll_enable(crtc, pipe_config, old_state);
>  
>  	if (IS_CHERRYVIEW(dev)) {
>  		chv_prepare_pll(intel_crtc, intel_crtc->config);
> @@ -6237,7 +6257,7 @@ static void valleyview_crtc_enable(struct intel_crtc_state *pipe_config,
>  		vlv_enable_pll(intel_crtc, intel_crtc->config);
>  	}
>  
> -	intel_encoders_pre_enable(crtc, old_state);
> +	intel_encoders_pre_enable(crtc, pipe_config, old_state);
>  
>  	i9xx_pfit_enable(intel_crtc);
>  
> @@ -6249,7 +6269,7 @@ static void valleyview_crtc_enable(struct intel_crtc_state *pipe_config,
>  	assert_vblank_disabled(crtc);
>  	drm_crtc_vblank_on(crtc);
>  
> -	intel_encoders_enable(crtc, old_state);
> +	intel_encoders_enable(crtc, pipe_config, old_state);
>  }
>  
>  static void i9xx_set_pll_dividers(struct intel_crtc *crtc)
> @@ -6288,7 +6308,7 @@ static void i9xx_crtc_enable(struct intel_crtc_state *pipe_config,
>  	if (!IS_GEN2(dev))
>  		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
>  
> -	intel_encoders_pre_enable(crtc, old_state);
> +	intel_encoders_pre_enable(crtc, pipe_config, old_state);
>  
>  	i9xx_enable_pll(intel_crtc);
>  
> @@ -6302,7 +6322,7 @@ static void i9xx_crtc_enable(struct intel_crtc_state *pipe_config,
>  	assert_vblank_disabled(crtc);
>  	drm_crtc_vblank_on(crtc);
>  
> -	intel_encoders_enable(crtc, old_state);
> +	intel_encoders_enable(crtc, pipe_config, old_state);
>  }
>  
>  static void i9xx_pfit_disable(struct intel_crtc *crtc)
> @@ -6336,7 +6356,7 @@ static void i9xx_crtc_disable(struct intel_crtc_state *old_crtc_state,
>  	if (IS_GEN2(dev))
>  		intel_wait_for_vblank(dev, pipe);
>  
> -	intel_encoders_disable(crtc, old_state);
> +	intel_encoders_disable(crtc, old_crtc_state, old_state);
>  
>  	drm_crtc_vblank_off(crtc);
>  	assert_vblank_disabled(crtc);
> @@ -6345,7 +6365,7 @@ static void i9xx_crtc_disable(struct intel_crtc_state *old_crtc_state,
>  
>  	i9xx_pfit_disable(intel_crtc);
>  
> -	intel_encoders_post_disable(crtc, old_state);
> +	intel_encoders_post_disable(crtc, old_crtc_state, old_state);
>  
>  	if (!intel_crtc_has_type(intel_crtc->config, INTEL_OUTPUT_DSI)) {
>  		if (IS_CHERRYVIEW(dev))
> @@ -6356,7 +6376,7 @@ static void i9xx_crtc_disable(struct intel_crtc_state *old_crtc_state,
>  			i9xx_disable_pll(intel_crtc);
>  	}
>  
> -	intel_encoders_post_pll_disable(crtc, old_state);
> +	intel_encoders_post_pll_disable(crtc, old_crtc_state, old_state);
>  
>  	if (!IS_GEN2(dev))
>  		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
> @@ -15858,17 +15878,6 @@ static bool intel_crtc_has_encoders(struct intel_crtc *crtc)
>  	return false;
>  }
>  
> -static bool intel_encoder_has_connectors(struct intel_encoder *encoder)
> -{
> -	struct drm_device *dev = encoder->base.dev;
> -	struct intel_connector *connector;
> -
> -	for_each_connector_on_encoder(dev, &encoder->base, connector)
> -		return true;
> -
> -	return false;
> -}

Imo rename this to static intel_connector *intel_encoder_find_connector
and then the below code changes becomes a lot more readable.

Otherwise lgtm.
-Daniel

> -
>  static void intel_sanitize_crtc(struct intel_crtc *crtc)
>  {
>  	struct drm_device *dev = crtc->base.dev;
> @@ -15955,6 +15964,7 @@ static void intel_sanitize_encoder(struct intel_encoder *encoder)
>  {
>  	struct intel_connector *connector;
>  	struct drm_device *dev = encoder->base.dev;
> +	bool found_connector = false;
>  
>  	/* We need to check both for a crtc link (meaning that the
>  	 * encoder is active and trying to read from a pipe) and the
> @@ -15962,7 +15972,12 @@ static void intel_sanitize_encoder(struct intel_encoder *encoder)
>  	bool has_active_crtc = encoder->base.crtc &&
>  		to_intel_crtc(encoder->base.crtc)->active;
>  
> -	if (intel_encoder_has_connectors(encoder) && !has_active_crtc) {
> +	for_each_connector_on_encoder(dev, &encoder->base, connector) {
> +		found_connector = true;
> +		break;
> +	}
> +
> +	if (found_connector && !has_active_crtc) {
>  		DRM_DEBUG_KMS("[ENCODER:%d:%s] has active connectors but no active pipe!\n",
>  			      encoder->base.base.id,
>  			      encoder->base.name);
> @@ -15971,12 +15986,14 @@ static void intel_sanitize_encoder(struct intel_encoder *encoder)
>  		 * fallout from our resume register restoring. Disable
>  		 * the encoder manually again. */
>  		if (encoder->base.crtc) {
> +			struct drm_crtc_state *crtc_state = encoder->base.crtc->state;
> +
>  			DRM_DEBUG_KMS("[ENCODER:%d:%s] manually disabled\n",
>  				      encoder->base.base.id,
>  				      encoder->base.name);
> -			encoder->disable(encoder);
> +			encoder->disable(encoder, to_intel_crtc_state(crtc_state), connector->base.state);
>  			if (encoder->post_disable)
> -				encoder->post_disable(encoder);
> +				encoder->post_disable(encoder, to_intel_crtc_state(crtc_state), connector->base.state);
>  		}
>  		encoder->base.crtc = NULL;
>  
> @@ -15984,12 +16001,9 @@ static void intel_sanitize_encoder(struct intel_encoder *encoder)
>  		 * a bug in one of the get_hw_state functions. Or someplace else
>  		 * in our code, like the register restore mess on resume. Clamp
>  		 * things to off as a safer default. */
> -		for_each_intel_connector(dev, connector) {
> -			if (connector->encoder != encoder)
> -				continue;
> -			connector->base.dpms = DRM_MODE_DPMS_OFF;
> -			connector->base.encoder = NULL;
> -		}
> +
> +		connector->base.dpms = DRM_MODE_DPMS_OFF;
> +		connector->base.encoder = NULL;
>  	}
>  	/* Enabled encoders without active connectors will be fixed in
>  	 * the crtc fixup. */
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 8fe2afa5439e..8bf1ba3166e9 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -2479,7 +2479,9 @@ 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_encoder *encoder,
> +			     struct intel_crtc_state *old_crtc_state,
> +			     struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>  	struct drm_device *dev = encoder->base.dev;
> @@ -2503,7 +2505,9 @@ static void intel_disable_dp(struct intel_encoder *encoder)
>  		intel_dp_link_down(intel_dp);
>  }
>  
> -static void ilk_post_disable_dp(struct intel_encoder *encoder)
> +static void ilk_post_disable_dp(struct intel_encoder *encoder,
> +				struct intel_crtc_state *old_crtc_state,
> +				struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>  	enum port port = dp_to_dig_port(intel_dp)->port;
> @@ -2515,14 +2519,18 @@ static void ilk_post_disable_dp(struct intel_encoder *encoder)
>  		ironlake_edp_pll_off(intel_dp);
>  }
>  
> -static void vlv_post_disable_dp(struct intel_encoder *encoder)
> +static void vlv_post_disable_dp(struct intel_encoder *encoder,
> +				struct intel_crtc_state *old_crtc_state,
> +				struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>  
>  	intel_dp_link_down(intel_dp);
>  }
>  
> -static void chv_post_disable_dp(struct intel_encoder *encoder)
> +static void chv_post_disable_dp(struct intel_encoder *encoder,
> +				struct intel_crtc_state *old_crtc_state,
> +				struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>  	struct drm_device *dev = encoder->base.dev;
> @@ -2696,7 +2704,9 @@ 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_encoder *encoder,
> +			  struct intel_crtc_state *pipe_config,
> +			  struct drm_connector_state *conn_state)
>  {
>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>  
> @@ -2704,7 +2714,9 @@ static void g4x_enable_dp(struct intel_encoder *encoder)
>  	intel_edp_backlight_on(intel_dp);
>  }
>  
> -static void vlv_enable_dp(struct intel_encoder *encoder)
> +static void vlv_enable_dp(struct intel_encoder *encoder,
> +			  struct intel_crtc_state *pipe_config,
> +			  struct drm_connector_state *conn_state)
>  {
>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>  
> @@ -2712,7 +2724,9 @@ static void vlv_enable_dp(struct intel_encoder *encoder)
>  	intel_psr_enable(intel_dp);
>  }
>  
> -static void g4x_pre_enable_dp(struct intel_encoder *encoder)
> +static void g4x_pre_enable_dp(struct intel_encoder *encoder,
> +			      struct intel_crtc_state *pipe_config,
> +			      struct drm_connector_state *conn_state)
>  {
>  	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
>  	enum port port = dp_to_dig_port(intel_dp)->port;
> @@ -2827,21 +2841,27 @@ static void vlv_init_panel_power_sequencer(struct intel_dp *intel_dp)
>  	intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
>  }
>  
> -static void vlv_pre_enable_dp(struct intel_encoder *encoder)
> +static void vlv_pre_enable_dp(struct intel_encoder *encoder,
> +			      struct intel_crtc_state *pipe_config,
> +			      struct drm_connector_state *conn_state)
>  {
>  	vlv_phy_pre_encoder_enable(encoder);
>  
>  	intel_enable_dp(encoder);
>  }
>  
> -static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder)
> +static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder,
> +				  struct intel_crtc_state *pipe_config,
> +				  struct drm_connector_state *conn_state)
>  {
>  	intel_dp_prepare(encoder);
>  
>  	vlv_phy_pre_pll_enable(encoder);
>  }
>  
> -static void chv_pre_enable_dp(struct intel_encoder *encoder)
> +static void chv_pre_enable_dp(struct intel_encoder *encoder,
> +			      struct intel_crtc_state *pipe_config,
> +			      struct drm_connector_state *conn_state)
>  {
>  	chv_phy_pre_encoder_enable(encoder);
>  
> @@ -2851,14 +2871,18 @@ static void chv_pre_enable_dp(struct intel_encoder *encoder)
>  	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_encoder *encoder,
> +				  struct intel_crtc_state *pipe_config,
> +				  struct drm_connector_state *conn_state)
>  {
>  	intel_dp_prepare(encoder);
>  
>  	chv_phy_pre_pll_enable(encoder);
>  }
>  
> -static void chv_dp_post_pll_disable(struct intel_encoder *encoder)
> +static void chv_dp_post_pll_disable(struct intel_encoder *encoder,
> +				    struct intel_crtc_state *pipe_config,
> +				    struct drm_connector_state *conn_state)
>  {
>  	chv_phy_post_pll_disable(encoder);
>  }
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 629337dbca3d..3ec290caef17 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -92,7 +92,9 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
>  
>  }
>  
> -static void intel_mst_disable_dp(struct intel_encoder *encoder)
> +static void intel_mst_disable_dp(struct intel_encoder *encoder,
> +				 struct intel_crtc_state *old_crtc_state,
> +				 struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
>  	struct intel_digital_port *intel_dig_port = intel_mst->primary;
> @@ -109,7 +111,9 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder)
>  	}
>  }
>  
> -static void intel_mst_post_disable_dp(struct intel_encoder *encoder)
> +static void intel_mst_post_disable_dp(struct intel_encoder *encoder,
> +				      struct intel_crtc_state *old_crtc_state,
> +				      struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
>  	struct intel_digital_port *intel_dig_port = intel_mst->primary;
> @@ -128,12 +132,16 @@ static void intel_mst_post_disable_dp(struct intel_encoder *encoder)
>  
>  	intel_mst->connector = NULL;
>  	if (intel_dp->active_mst_links == 0) {
> -		intel_dig_port->base.post_disable(&intel_dig_port->base);
> +		intel_dig_port->base.post_disable(&intel_dig_port->base,
> +						  old_crtc_state, NULL);
> +
>  		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
>  	}
>  }
>  
> -static void intel_mst_pre_enable_dp(struct intel_encoder *encoder)
> +static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
> +				    struct intel_crtc_state *pipe_config,
> +				    struct drm_connector_state *conn_state)
>  {
>  	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
>  	struct intel_digital_port *intel_dig_port = intel_mst->primary;
> @@ -200,7 +208,9 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder)
>  	ret = drm_dp_update_payload_part1(&intel_dp->mst_mgr);
>  }
>  
> -static void intel_mst_enable_dp(struct intel_encoder *encoder)
> +static void intel_mst_enable_dp(struct intel_encoder *encoder,
> +				struct intel_crtc_state *pipe_config,
> +				struct drm_connector_state *conn_state)
>  {
>  	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
>  	struct intel_digital_port *intel_dig_port = intel_mst->primary;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 0e53cc1fd5cc..8e0ca11c0e99 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -195,12 +195,24 @@ struct intel_encoder {
>  	void (*hot_plug)(struct intel_encoder *);
>  	bool (*compute_config)(struct intel_encoder *,
>  			       struct intel_crtc_state *);
> -	void (*pre_pll_enable)(struct intel_encoder *);
> -	void (*pre_enable)(struct intel_encoder *);
> -	void (*enable)(struct intel_encoder *);
> -	void (*disable)(struct intel_encoder *);
> -	void (*post_disable)(struct intel_encoder *);
> -	void (*post_pll_disable)(struct intel_encoder *);
> +	void (*pre_pll_enable)(struct intel_encoder *,
> +			       struct intel_crtc_state *,
> +			       struct drm_connector_state *);
> +	void (*pre_enable)(struct intel_encoder *,
> +			   struct intel_crtc_state *,
> +			   struct drm_connector_state *);
> +	void (*enable)(struct intel_encoder *,
> +		       struct intel_crtc_state *,
> +		       struct drm_connector_state *);
> +	void (*disable)(struct intel_encoder *,
> +			struct intel_crtc_state *,
> +			struct drm_connector_state *);
> +	void (*post_disable)(struct intel_encoder *,
> +			     struct intel_crtc_state *,
> +			     struct drm_connector_state *);
> +	void (*post_pll_disable)(struct intel_encoder *,
> +				 struct intel_crtc_state *,
> +				 struct drm_connector_state *);
>  	/* Read out the current hw state of this connector, returning true if
>  	 * the encoder is active. If the encoder is enabled it also set the pipe
>  	 * it is connected to in the pipe parameter. */
> @@ -1122,7 +1134,9 @@ bool intel_ddi_pll_select(struct intel_crtc *crtc,
>  void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
>  void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
>  bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
> -void intel_ddi_fdi_disable(struct drm_crtc *crtc);
> +void intel_ddi_fdi_disable(struct intel_encoder *,
> +			   struct intel_crtc_state *,
> +			   struct drm_connector_state *);
>  void intel_ddi_get_config(struct intel_encoder *encoder,
>  			  struct intel_crtc_state *pipe_config);
>  struct intel_encoder *
> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
> index de8e9fb51595..107b70c19333 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.c
> +++ b/drivers/gpu/drm/i915/intel_dsi.c
> @@ -535,7 +535,9 @@ static void intel_dsi_enable(struct intel_encoder *encoder)
>  
>  static void intel_dsi_prepare(struct intel_encoder *intel_encoder);
>  
> -static void intel_dsi_pre_enable(struct intel_encoder *encoder)
> +static void intel_dsi_pre_enable(struct intel_encoder *encoder,
> +				 struct intel_crtc_state *pipe_config,
> +				 struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -582,7 +584,9 @@ static void intel_dsi_pre_enable(struct intel_encoder *encoder)
>  	intel_dsi_enable(encoder);
>  }
>  
> -static void intel_dsi_enable_nop(struct intel_encoder *encoder)
> +static void intel_dsi_enable_nop(struct intel_encoder *encoder,
> +				 struct intel_crtc_state *pipe_config,
> +				 struct drm_connector_state *conn_state)
>  {
>  	DRM_DEBUG_KMS("\n");
>  
> @@ -592,7 +596,9 @@ static void intel_dsi_enable_nop(struct intel_encoder *encoder)
>  	 */
>  }
>  
> -static void intel_dsi_pre_disable(struct intel_encoder *encoder)
> +static void intel_dsi_pre_disable(struct intel_encoder *encoder,
> +				  struct intel_crtc_state *old_crtc_state,
> +				  struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
>  	enum port port;
> @@ -694,7 +700,9 @@ static void intel_dsi_clear_device_ready(struct intel_encoder *encoder)
>  	intel_disable_dsi_pll(encoder);
>  }
>  
> -static void intel_dsi_post_disable(struct intel_encoder *encoder)
> +static void intel_dsi_post_disable(struct intel_encoder *encoder,
> +				   struct intel_crtc_state *pipe_config,
> +				   struct drm_connector_state *conn_state)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>  	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
> index 47bdf9dad0d3..52dde9b71ca5 100644
> --- a/drivers/gpu/drm/i915/intel_dvo.c
> +++ b/drivers/gpu/drm/i915/intel_dvo.c
> @@ -174,7 +174,9 @@ static void intel_dvo_get_config(struct intel_encoder *encoder,
>  	pipe_config->base.adjusted_mode.crtc_clock = pipe_config->port_clock;
>  }
>  
> -static void intel_disable_dvo(struct intel_encoder *encoder)
> +static void intel_disable_dvo(struct intel_encoder *encoder,
> +			      struct intel_crtc_state *old_crtc_state,
> +			      struct drm_connector_state *old_conn_state)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>  	struct intel_dvo *intel_dvo = enc_to_dvo(encoder);
> @@ -186,7 +188,9 @@ static void intel_disable_dvo(struct intel_encoder *encoder)
>  	I915_READ(dvo_reg);
>  }
>  
> -static void intel_enable_dvo(struct intel_encoder *encoder)
> +static void intel_enable_dvo(struct intel_encoder *encoder,
> +			     struct intel_crtc_state *pipe_config,
> +			     struct drm_connector_state *conn_state)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>  	struct intel_dvo *intel_dvo = enc_to_dvo(encoder);
> @@ -253,7 +257,9 @@ static bool intel_dvo_compute_config(struct intel_encoder *encoder,
>  	return true;
>  }
>  
> -static void intel_dvo_pre_enable(struct intel_encoder *encoder)
> +static void intel_dvo_pre_enable(struct intel_encoder *encoder,
> +				 struct intel_crtc_state *pipe_config,
> +				 struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
> index 4df9f384910c..560eff9a3694 100644
> --- a/drivers/gpu/drm/i915/intel_hdmi.c
> +++ b/drivers/gpu/drm/i915/intel_hdmi.c
> @@ -985,7 +985,9 @@ static void intel_enable_hdmi_audio(struct intel_encoder *encoder)
>  	intel_audio_codec_enable(encoder);
>  }
>  
> -static void g4x_enable_hdmi(struct intel_encoder *encoder)
> +static void g4x_enable_hdmi(struct intel_encoder *encoder,
> +			    struct intel_crtc_state *pipe_config,
> +			    struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -1006,7 +1008,9 @@ static void g4x_enable_hdmi(struct intel_encoder *encoder)
>  		intel_enable_hdmi_audio(encoder);
>  }
>  
> -static void ibx_enable_hdmi(struct intel_encoder *encoder)
> +static void ibx_enable_hdmi(struct intel_encoder *encoder,
> +			    struct intel_crtc_state *pipe_config,
> +			    struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -1055,7 +1059,9 @@ static void ibx_enable_hdmi(struct intel_encoder *encoder)
>  		intel_enable_hdmi_audio(encoder);
>  }
>  
> -static void cpt_enable_hdmi(struct intel_encoder *encoder)
> +static void cpt_enable_hdmi(struct intel_encoder *encoder,
> +			    struct intel_crtc_state *pipe_config,
> +			    struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -1108,11 +1114,15 @@ static void cpt_enable_hdmi(struct intel_encoder *encoder)
>  		intel_enable_hdmi_audio(encoder);
>  }
>  
> -static void vlv_enable_hdmi(struct intel_encoder *encoder)
> +static void vlv_enable_hdmi(struct intel_encoder *encoder,
> +			    struct intel_crtc_state *pipe_config,
> +			    struct drm_connector_state *conn_state)
>  {
>  }
>  
> -static void intel_disable_hdmi(struct intel_encoder *encoder)
> +static void intel_disable_hdmi(struct intel_encoder *encoder,
> +			       struct intel_crtc_state *old_crtc_state,
> +			       struct drm_connector_state *old_conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -1164,17 +1174,21 @@ 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_encoder *encoder,
> +			     struct intel_crtc_state *old_crtc_state,
> +			     struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
>  
>  	if (crtc->config->has_audio)
>  		intel_audio_codec_disable(encoder);
>  
> -	intel_disable_hdmi(encoder);
> +	intel_disable_hdmi(encoder, old_crtc_state, old_conn_state);
>  }
>  
> -static void pch_disable_hdmi(struct intel_encoder *encoder)
> +static void pch_disable_hdmi(struct intel_encoder *encoder,
> +			     struct intel_crtc_state *old_crtc_state,
> +			     struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
>  
> @@ -1182,9 +1196,11 @@ static void pch_disable_hdmi(struct intel_encoder *encoder)
>  		intel_audio_codec_disable(encoder);
>  }
>  
> -static void pch_post_disable_hdmi(struct intel_encoder *encoder)
> +static void pch_post_disable_hdmi(struct intel_encoder *encoder,
> +				  struct intel_crtc_state *old_crtc_state,
> +				  struct drm_connector_state *old_conn_state)
>  {
> -	intel_disable_hdmi(encoder);
> +	intel_disable_hdmi(encoder, old_crtc_state, old_conn_state);
>  }
>  
>  static int intel_hdmi_source_max_tmds_clock(struct drm_i915_private *dev_priv)
> @@ -1638,7 +1654,9 @@ done:
>  	return 0;
>  }
>  
> -static void intel_hdmi_pre_enable(struct intel_encoder *encoder)
> +static void intel_hdmi_pre_enable(struct intel_encoder *encoder,
> +				  struct intel_crtc_state *pipe_config,
> +				  struct drm_connector_state *conn_state)
>  {
>  	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base);
>  	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
> @@ -1651,7 +1669,9 @@ static void intel_hdmi_pre_enable(struct intel_encoder *encoder)
>  				   adjusted_mode);
>  }
>  
> -static void vlv_hdmi_pre_enable(struct intel_encoder *encoder)
> +static void vlv_hdmi_pre_enable(struct intel_encoder *encoder,
> +				struct intel_crtc_state *pipe_config,
> +				struct drm_connector_state *conn_state)
>  {
>  	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
>  	struct intel_hdmi *intel_hdmi = &dport->hdmi;
> @@ -1671,37 +1691,47 @@ static void vlv_hdmi_pre_enable(struct intel_encoder *encoder)
>  				   intel_crtc->config->has_hdmi_sink,
>  				   adjusted_mode);
>  
> -	g4x_enable_hdmi(encoder);
> +	g4x_enable_hdmi(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_encoder *encoder,
> +				    struct intel_crtc_state *pipe_config,
> +				    struct drm_connector_state *conn_state)
>  {
>  	intel_hdmi_prepare(encoder);
>  
>  	vlv_phy_pre_pll_enable(encoder);
>  }
>  
> -static void chv_hdmi_pre_pll_enable(struct intel_encoder *encoder)
> +static void chv_hdmi_pre_pll_enable(struct intel_encoder *encoder,
> +				    struct intel_crtc_state *pipe_config,
> +				    struct drm_connector_state *conn_state)
>  {
>  	intel_hdmi_prepare(encoder);
>  
>  	chv_phy_pre_pll_enable(encoder);
>  }
>  
> -static void chv_hdmi_post_pll_disable(struct intel_encoder *encoder)
> +static void chv_hdmi_post_pll_disable(struct intel_encoder *encoder,
> +				      struct intel_crtc_state *old_crtc_state,
> +				      struct drm_connector_state *old_conn_state)
>  {
>  	chv_phy_post_pll_disable(encoder);
>  }
>  
> -static void vlv_hdmi_post_disable(struct intel_encoder *encoder)
> +static void vlv_hdmi_post_disable(struct intel_encoder *encoder,
> +				  struct intel_crtc_state *old_crtc_state,
> +				  struct drm_connector_state *old_conn_state)
>  {
>  	/* Reset lanes to avoid HDMI flicker (VLV w/a) */
>  	vlv_phy_reset_lanes(encoder);
>  }
>  
> -static void chv_hdmi_post_disable(struct intel_encoder *encoder)
> +static void chv_hdmi_post_disable(struct intel_encoder *encoder,
> +				  struct intel_crtc_state *old_crtc_state,
> +				  struct drm_connector_state *old_conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -1714,7 +1744,9 @@ static void chv_hdmi_post_disable(struct intel_encoder *encoder)
>  	mutex_unlock(&dev_priv->sb_lock);
>  }
>  
> -static void chv_hdmi_pre_enable(struct intel_encoder *encoder)
> +static void chv_hdmi_pre_enable(struct intel_encoder *encoder,
> +				struct intel_crtc_state *pipe_config,
> +				struct drm_connector_state *conn_state)
>  {
>  	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
>  	struct intel_hdmi *intel_hdmi = &dport->hdmi;
> @@ -1734,7 +1766,7 @@ static void chv_hdmi_pre_enable(struct intel_encoder *encoder)
>  				   intel_crtc->config->has_hdmi_sink,
>  				   adjusted_mode);
>  
> -	g4x_enable_hdmi(encoder);
> +	g4x_enable_hdmi(encoder, pipe_config, conn_state);
>  
>  	vlv_wait_port_ready(dev_priv, dport, 0x0);
>  
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> index 49550470483e..4cae4a8ea491 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -136,7 +136,9 @@ static void intel_lvds_get_config(struct intel_encoder *encoder,
>  	pipe_config->base.adjusted_mode.crtc_clock = pipe_config->port_clock;
>  }
>  
> -static void intel_pre_enable_lvds(struct intel_encoder *encoder)
> +static void intel_pre_enable_lvds(struct intel_encoder *encoder,
> +				  struct intel_crtc_state *pipe_config,
> +				  struct drm_connector_state *conn_state)
>  {
>  	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
>  	struct drm_device *dev = encoder->base.dev;
> @@ -210,7 +212,9 @@ 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_encoder *encoder,
> +			      struct intel_crtc_state *pipe_config,
> +			      struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
> @@ -237,7 +241,9 @@ static void intel_enable_lvds(struct intel_encoder *encoder)
>  	intel_panel_enable_backlight(intel_connector);
>  }
>  
> -static void intel_disable_lvds(struct intel_encoder *encoder)
> +static void intel_disable_lvds(struct intel_encoder *encoder,
> +			       struct intel_crtc_state *old_crtc_state,
> +			       struct drm_connector_state *old_conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
> @@ -260,7 +266,10 @@ static void intel_disable_lvds(struct intel_encoder *encoder)
>  	POSTING_READ(lvds_encoder->reg);
>  }
>  
> -static void gmch_disable_lvds(struct intel_encoder *encoder)
> +static void gmch_disable_lvds(struct intel_encoder *encoder,
> +			      struct intel_crtc_state *old_crtc_state,
> +			      struct drm_connector_state *old_conn_state)
> +
>  {
>  	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
>  	struct intel_connector *intel_connector =
> @@ -268,10 +277,12 @@ static void gmch_disable_lvds(struct intel_encoder *encoder)
>  
>  	intel_panel_disable_backlight(intel_connector);
>  
> -	intel_disable_lvds(encoder);
> +	intel_disable_lvds(encoder, old_crtc_state, old_conn_state);
>  }
>  
> -static void pch_disable_lvds(struct intel_encoder *encoder)
> +static void pch_disable_lvds(struct intel_encoder *encoder,
> +			     struct intel_crtc_state *old_crtc_state,
> +			     struct drm_connector_state *old_conn_state)
>  {
>  	struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
>  	struct intel_connector *intel_connector =
> @@ -280,9 +291,11 @@ static void pch_disable_lvds(struct intel_encoder *encoder)
>  	intel_panel_disable_backlight(intel_connector);
>  }
>  
> -static void pch_post_disable_lvds(struct intel_encoder *encoder)
> +static void pch_post_disable_lvds(struct intel_encoder *encoder,
> +				  struct intel_crtc_state *old_crtc_state,
> +				  struct drm_connector_state *old_conn_state)
>  {
> -	intel_disable_lvds(encoder);
> +	intel_disable_lvds(encoder, old_crtc_state, old_conn_state);
>  }
>  
>  static enum drm_mode_status
> diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
> index e378f35365a2..48f5deb6a4cf 100644
> --- a/drivers/gpu/drm/i915/intel_sdvo.c
> +++ b/drivers/gpu/drm/i915/intel_sdvo.c
> @@ -1192,7 +1192,9 @@ static bool intel_sdvo_compute_config(struct intel_encoder *encoder,
>  	return true;
>  }
>  
> -static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder)
> +static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder,
> +				  struct intel_crtc_state *crtc_state,
> +				  struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = intel_encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -1434,7 +1436,9 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
>  	     pipe_config->pixel_multiplier, encoder_pixel_multiplier);
>  }
>  
> -static void intel_disable_sdvo(struct intel_encoder *encoder)
> +static void intel_disable_sdvo(struct intel_encoder *encoder,
> +			       struct intel_crtc_state *old_crtc_state,
> +			       struct drm_connector_state *conn_state)
>  {
>  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
>  	struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
> @@ -1477,16 +1481,22 @@ 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_encoder *encoder,
> +			     struct intel_crtc_state *old_crtc_state,
> +			     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_encoder *encoder,
> +				  struct intel_crtc_state *old_crtc_state,
> +				  struct drm_connector_state *old_conn_state)
>  {
> -	intel_disable_sdvo(encoder);
> +	intel_disable_sdvo(encoder, old_crtc_state, old_conn_state);
>  }
>  
> -static void intel_enable_sdvo(struct intel_encoder *encoder)
> +static void intel_enable_sdvo(struct intel_encoder *encoder,
> +			      struct intel_crtc_state *pipe_config,
> +			      struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
> index 49136ad5473e..440ce7933573 100644
> --- a/drivers/gpu/drm/i915/intel_tv.c
> +++ b/drivers/gpu/drm/i915/intel_tv.c
> @@ -838,7 +838,9 @@ 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_encoder *encoder,
> +		struct intel_crtc_state *pipe_config,
> +		struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -851,7 +853,9 @@ intel_enable_tv(struct intel_encoder *encoder)
>  }
>  
>  static void
> -intel_disable_tv(struct intel_encoder *encoder)
> +intel_disable_tv(struct intel_encoder *encoder,
> +		 struct intel_crtc_state *old_crtc_state,
> +		 struct drm_connector_state *old_conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> @@ -1010,7 +1014,9 @@ static void set_color_conversion(struct drm_i915_private *dev_priv,
>  		   color_conversion->av);
>  }
>  
> -static void intel_tv_pre_enable(struct intel_encoder *encoder)
> +static void intel_tv_pre_enable(struct intel_encoder *encoder,
> +				struct intel_crtc_state *pipe_config,
> +				struct drm_connector_state *conn_state)
>  {
>  	struct drm_device *dev = encoder->base.dev;
>  	struct drm_i915_private *dev_priv = to_i915(dev);
> -- 
> 2.7.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

  reply	other threads:[~2016-08-18 13:30 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-09 15:03 [PATCH 00/15] drm/i915: Use connector atomic state in encoders Maarten Lankhorst
2016-08-09 15:04 ` [PATCH 01/15] drm/i915: handle DP_MST correctly in bxt_get_dpll Maarten Lankhorst
2016-08-18 13:17   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 02/15] drm/i915: Pass atomic state to crtc enable/disable functions Maarten Lankhorst
2016-08-18 13:19   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 03/15] drm/i915: Remove unused mode_set hook from encoder Maarten Lankhorst
2016-08-18 13:20   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 04/15] drm/i915: Walk over encoders in crtc enable/disable using atomic state Maarten Lankhorst
2016-08-22 14:28   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 05/15] drm/i915: Pass crtc_state and connector_state to encoder functions Maarten Lankhorst
2016-08-18 13:30   ` Daniel Vetter [this message]
2016-08-22  8:06     ` Maarten Lankhorst
2016-08-22 14:32       ` Daniel Vetter
2016-08-23  8:18         ` Maarten Lankhorst
2016-08-23  8:33           ` Daniel Vetter
2016-08-23 11:48         ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 06/15] drm/i915: Make encoder->compute_config take the connector state Maarten Lankhorst
2016-08-18 13:31   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 07/15] drm/i915: Remove unused loop from intel_dp_mst_compute_config Maarten Lankhorst
2016-08-18 13:34   ` Daniel Vetter
2016-08-22 12:43     ` Maarten Lankhorst
2016-08-22 14:33       ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 08/15] drm/i915: Convert intel_crt to use atomic state Maarten Lankhorst
2016-08-18 13:35   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 09/15] drm/i915: Convert intel_dvo " Maarten Lankhorst
2016-08-18 13:36   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 10/15] drm/i915: Convert intel_dsi " Maarten Lankhorst
2016-08-18 13:43   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 11/15] drm/i915: Convert intel_sdvo " Maarten Lankhorst
2016-08-18 13:44   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 12/15] drm/i915: Convert intel_lvds " Maarten Lankhorst
2016-08-18 13:47   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 13/15] drm/i915: Convert intel_dp_mst " Maarten Lankhorst
2016-08-18 13:54   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 14/15] drm/i915: Convert intel_dp " Maarten Lankhorst
2016-08-18 14:01   ` Daniel Vetter
2016-08-09 15:04 ` [PATCH 15/15] drm/i915: Use more atomic state in intel_color.c Maarten Lankhorst
2016-08-18 14:02   ` Daniel Vetter
2016-08-09 15:55 ` ✗ Ro.CI.BAT: failure for drm/i915: Use connector atomic state in encoders Patchwork
2016-08-10  7:53 ` Patchwork
2016-08-18 14:04 ` [PATCH 00/15] " Daniel Vetter
2016-08-22  8:12   ` Maarten Lankhorst
  -- strict thread matches above, loose matches on Subject: below --
2016-07-07 11:55 [PATCH 01/15] drm/i915: handle DP_MST correctly in bxt_get_dpll Maarten Lankhorst
2016-07-07 11:55 ` [PATCH 05/15] drm/i915: Pass crtc_state and connector_state to encoder functions Maarten Lankhorst

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160818133016.GG6232@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=maarten.lankhorst@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.