[Intel-gfx] [PATCH 02-2/18] drm/i915: fix checks inside haswell_crtc_{enable, disable}

Jani Nikula jani.nikula at linux.intel.com
Thu Oct 25 13:07:28 CEST 2012


On Wed, 24 Oct 2012, Paulo Zanoni <przanoni at gmail.com> wrote:
> From: Paulo Zanoni <paulo.r.zanoni at intel.com>
>
> These functions were forked from their Ironlake versions, so now fix
> the gen checks to reflect the fact that they will only run on Haswell.
>
> It is worth noticing that we are not considering IBX/CPT possible on
> Haswell anymore. So far on Haswell enablement we kept trying to still
> consider IBX/CPT as a possibility with a Haswell CPU, but this was
> never tested, I really doubt it will work with the current code and we
> don't really have plans to support it. Future patches will remove the
> IBX/CPT code from other Haswell functions. Notice that we still have a
> WARN on haswell_crtc_mode_set in case we detect non-LPT PCH.
>
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 59 +++++-------------------------------
>  1 file changed, 7 insertions(+), 52 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index e5dc22c..a90da35 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -3283,7 +3283,6 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
>  	struct intel_encoder *encoder;
>  	int pipe = intel_crtc->pipe;
>  	int plane = intel_crtc->plane;
> -	u32 temp;
>  	bool is_pch_port;
>  
>  	WARN_ON(!crtc->enabled);
> @@ -3294,12 +3293,6 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
>  	intel_crtc->active = true;
>  	intel_update_watermarks(dev);
>  
> -	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
> -		temp = I915_READ(PCH_LVDS);
> -		if ((temp & LVDS_PORT_EN) == 0)
> -			I915_WRITE(PCH_LVDS, temp | LVDS_PORT_EN);
> -	}
> -
>  	is_pch_port = intel_crtc_driving_pch(crtc);
>  
>  	if (is_pch_port) {
> @@ -3313,12 +3306,10 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
>  		if (encoder->pre_enable)
>  			encoder->pre_enable(encoder);
>  
> -	if (IS_HASWELL(dev))
> -		intel_ddi_enable_pipe_clock(intel_crtc);
> +	intel_ddi_enable_pipe_clock(intel_crtc);
>  
> -	/* Enable panel fitting for LVDS */
> -	if (dev_priv->pch_pf_size &&
> -	    (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS) || HAS_eDP)) {
> +	/* Enable panel fitting for eDP */
> +	if (dev_priv->pch_pf_size && HAS_eDP) {

You could just make that intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP)
instead of HAS_eDP. But it was there before, and HAS_eDP could (and
should!) be nuked afterwards anyway.

Reviewed-by: Jani Nikula <jani.nikula at intel.com>

>  		/* Force use of hard-coded filter coefficients
>  		 * as some pre-programmed values are broken,
>  		 * e.g. x201.
> @@ -3334,10 +3325,8 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
>  	 */
>  	intel_crtc_load_lut(crtc);
>  
> -	if (IS_HASWELL(dev)) {
> -		intel_ddi_set_pipe_settings(crtc);
> -		intel_ddi_enable_pipe_func(crtc);
> -	}
> +	intel_ddi_set_pipe_settings(crtc);
> +	intel_ddi_enable_pipe_func(crtc);
>  
>  	intel_enable_pipe(dev_priv, pipe, is_pch_port);
>  	intel_enable_plane(dev_priv, plane, pipe);
> @@ -3354,9 +3343,6 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
>  	for_each_encoder_on_crtc(dev, crtc, encoder)
>  		encoder->enable(encoder);
>  
> -	if (HAS_PCH_CPT(dev))
> -		intel_cpt_verify_modeset(dev, intel_crtc->pipe);
> -
>  	/*
>  	 * There seems to be a race in PCH platform hw (at least on some
>  	 * outputs) where an enabled pipe still completes any pageflip right
> @@ -3456,8 +3442,6 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
>  	struct intel_encoder *encoder;
>  	int pipe = intel_crtc->pipe;
>  	int plane = intel_crtc->plane;
> -	u32 reg, temp;
> -
>  
>  	if (!intel_crtc->active)
>  		return;
> @@ -3476,15 +3460,13 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
>  
>  	intel_disable_pipe(dev_priv, pipe);
>  
> -	if (IS_HASWELL(dev))
> -		intel_ddi_disable_pipe_func(dev_priv, pipe);
> +	intel_ddi_disable_pipe_func(dev_priv, pipe);
>  
>  	/* Disable PF */
>  	I915_WRITE(PF_CTL(pipe), 0);
>  	I915_WRITE(PF_WIN_SZ(pipe), 0);
>  
> -	if (IS_HASWELL(dev))
> -		intel_ddi_disable_pipe_clock(intel_crtc);
> +	intel_ddi_disable_pipe_clock(intel_crtc);
>  
>  	for_each_encoder_on_crtc(dev, crtc, encoder)
>  		if (encoder->post_disable)
> @@ -3494,33 +3476,6 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
>  
>  	intel_disable_transcoder(dev_priv, pipe);
>  
> -	if (HAS_PCH_CPT(dev)) {
> -		/* disable TRANS_DP_CTL */
> -		reg = TRANS_DP_CTL(pipe);
> -		temp = I915_READ(reg);
> -		temp &= ~(TRANS_DP_OUTPUT_ENABLE | TRANS_DP_PORT_SEL_MASK);
> -		temp |= TRANS_DP_PORT_SEL_NONE;
> -		I915_WRITE(reg, temp);
> -
> -		/* disable DPLL_SEL */
> -		temp = I915_READ(PCH_DPLL_SEL);
> -		switch (pipe) {
> -		case 0:
> -			temp &= ~(TRANSA_DPLL_ENABLE | TRANSA_DPLLB_SEL);
> -			break;
> -		case 1:
> -			temp &= ~(TRANSB_DPLL_ENABLE | TRANSB_DPLLB_SEL);
> -			break;
> -		case 2:
> -			/* C shares PLL A or B */
> -			temp &= ~(TRANSC_DPLL_ENABLE | TRANSC_DPLLB_SEL);
> -			break;
> -		default:
> -			BUG(); /* wtf */
> -		}
> -		I915_WRITE(PCH_DPLL_SEL, temp);
> -	}
> -
>  	/* disable PCH DPLL */
>  	intel_disable_pch_pll(intel_crtc);
>  
> -- 
> 1.7.11.4
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx



More information about the Intel-gfx mailing list