diff options
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_crt.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_crt.c | 47 | 
1 files changed, 25 insertions, 22 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c index 7267ffc7f539..38e9c61c2344 100644 --- a/drivers/gpu/drm/i915/display/intel_crt.c +++ b/drivers/gpu/drm/i915/display/intel_crt.c @@ -44,6 +44,7 @@  #include "intel_de.h"  #include "intel_display_types.h"  #include "intel_fdi.h" +#include "intel_fdi_regs.h"  #include "intel_fifo_underrun.h"  #include "intel_gmbus.h"  #include "intel_hotplug.h" @@ -260,7 +261,7 @@ static void hsw_post_disable_crt(struct intel_atomic_state *state,  	ilk_pfit_disable(old_crtc_state); -	intel_ddi_disable_pipe_clock(old_crtc_state); +	intel_ddi_disable_transcoder_clock(old_crtc_state);  	pch_post_disable_crt(state, encoder, old_crtc_state, old_conn_state); @@ -300,7 +301,7 @@ static void hsw_pre_enable_crt(struct intel_atomic_state *state,  	hsw_fdi_link_train(encoder, crtc_state); -	intel_ddi_enable_pipe_clock(encoder, crtc_state); +	intel_ddi_enable_transcoder_clock(encoder, crtc_state);  }  static void hsw_enable_crt(struct intel_atomic_state *state, @@ -678,10 +679,11 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)  }  static enum drm_connector_status -intel_crt_load_detect(struct intel_crt *crt, u32 pipe) +intel_crt_load_detect(struct intel_crt *crt, enum pipe pipe)  {  	struct drm_device *dev = crt->base.base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev); +	enum transcoder cpu_transcoder = (enum transcoder)pipe;  	u32 save_bclrpat;  	u32 save_vtotal;  	u32 vtotal, vactive; @@ -693,25 +695,25 @@ intel_crt_load_detect(struct intel_crt *crt, u32 pipe)  	drm_dbg_kms(&dev_priv->drm, "starting load-detect on CRT\n"); -	save_bclrpat = intel_de_read(dev_priv, BCLRPAT(pipe)); -	save_vtotal = intel_de_read(dev_priv, VTOTAL(pipe)); -	vblank = intel_de_read(dev_priv, VBLANK(pipe)); +	save_bclrpat = intel_de_read(dev_priv, BCLRPAT(cpu_transcoder)); +	save_vtotal = intel_de_read(dev_priv, TRANS_VTOTAL(cpu_transcoder)); +	vblank = intel_de_read(dev_priv, TRANS_VBLANK(cpu_transcoder)); -	vtotal = ((save_vtotal >> 16) & 0xfff) + 1; -	vactive = (save_vtotal & 0x7ff) + 1; +	vtotal = REG_FIELD_GET(VTOTAL_MASK, save_vtotal) + 1; +	vactive = REG_FIELD_GET(VACTIVE_MASK, save_vtotal) + 1; -	vblank_start = (vblank & 0xfff) + 1; -	vblank_end = ((vblank >> 16) & 0xfff) + 1; +	vblank_start = REG_FIELD_GET(VBLANK_START_MASK, vblank) + 1; +	vblank_end = REG_FIELD_GET(VBLANK_END_MASK, vblank) + 1;  	/* Set the border color to purple. */ -	intel_de_write(dev_priv, BCLRPAT(pipe), 0x500050); +	intel_de_write(dev_priv, BCLRPAT(cpu_transcoder), 0x500050);  	if (DISPLAY_VER(dev_priv) != 2) { -		u32 pipeconf = intel_de_read(dev_priv, PIPECONF(pipe)); +		u32 transconf = intel_de_read(dev_priv, TRANSCONF(cpu_transcoder)); -		intel_de_write(dev_priv, PIPECONF(pipe), -			       pipeconf | PIPECONF_FORCE_BORDER); -		intel_de_posting_read(dev_priv, PIPECONF(pipe)); +		intel_de_write(dev_priv, TRANSCONF(cpu_transcoder), +			       transconf | TRANSCONF_FORCE_BORDER); +		intel_de_posting_read(dev_priv, TRANSCONF(cpu_transcoder));  		/* Wait for next Vblank to substitue  		 * border color for Color info */  		intel_crtc_wait_for_next_vblank(intel_crtc_for_pipe(dev_priv, pipe)); @@ -720,7 +722,7 @@ intel_crt_load_detect(struct intel_crt *crt, u32 pipe)  			connector_status_connected :  			connector_status_disconnected; -		intel_de_write(dev_priv, PIPECONF(pipe), pipeconf); +		intel_de_write(dev_priv, TRANSCONF(cpu_transcoder), transconf);  	} else {  		bool restore_vblank = false;  		int count, detect; @@ -730,12 +732,13 @@ intel_crt_load_detect(struct intel_crt *crt, u32 pipe)  		* Yes, this will flicker  		*/  		if (vblank_start <= vactive && vblank_end >= vtotal) { -			u32 vsync = intel_de_read(dev_priv, VSYNC(pipe)); -			u32 vsync_start = (vsync & 0xffff) + 1; +			u32 vsync = intel_de_read(dev_priv, TRANS_VSYNC(cpu_transcoder)); +			u32 vsync_start = REG_FIELD_GET(VSYNC_START_MASK, vsync) + 1;  			vblank_start = vsync_start; -			intel_de_write(dev_priv, VBLANK(pipe), -				       (vblank_start - 1) | ((vblank_end - 1) << 16)); +			intel_de_write(dev_priv, TRANS_VBLANK(cpu_transcoder), +				       VBLANK_START(vblank_start - 1) | +				       VBLANK_END(vblank_end - 1));  			restore_vblank = true;  		}  		/* sample in the vertical border, selecting the larger one */ @@ -766,7 +769,7 @@ intel_crt_load_detect(struct intel_crt *crt, u32 pipe)  		/* restore vblank if necessary */  		if (restore_vblank) -			intel_de_write(dev_priv, VBLANK(pipe), vblank); +			intel_de_write(dev_priv, TRANS_VBLANK(cpu_transcoder), vblank);  		/*  		 * If more than 3/4 of the scanline detected a monitor,  		 * then it is assumed to be present. This works even on i830, @@ -779,7 +782,7 @@ intel_crt_load_detect(struct intel_crt *crt, u32 pipe)  	}  	/* Restore previous settings */ -	intel_de_write(dev_priv, BCLRPAT(pipe), save_bclrpat); +	intel_de_write(dev_priv, BCLRPAT(cpu_transcoder), save_bclrpat);  	return status;  }  | 
