aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2013-05-03 05:49:47 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-05-06 05:25:34 -0400
commit275f01b2694a52d13c32358d17d594ec9aba55e3 (patch)
treee01c12a345af4df9b0101d49961ae087be2d37b1 /drivers/gpu
parentab9412ba06484cdfd82bdb748689024efe2221fe (diff)
drm/i915: PCH_ prefix for transcoder timings
While at it, also extract a common helper to copy the timings from the cpu transcoder to the pch transcoder. That way it's really explicit how the lpt transcoder is hardcoded. v2: - Re-align #defines properly (Paulo). - Use cpu_transcoder when copying pipe timings (Paulo). - s/intel_pch_transcoder_enable/intel_pch_transcoder_set_timings/ since we already have a pch transcoder enable function, and this is clearer, too. - Fixup 80 char line overflow in intel_display.c. I've opted to ignore this in i915_reg.h and i915_ums.c since meh. Cc: Paulo Zanoni <przanoni@gmail.com> Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h70
-rw-r--r--drivers/gpu/drm/i915/i915_ums.c48
-rw-r--r--drivers/gpu/drm/i915/intel_display.c42
3 files changed, 85 insertions, 75 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index fd5601998982..e888fcca6ee6 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -3929,25 +3929,25 @@
3929 3929
3930/* transcoder */ 3930/* transcoder */
3931 3931
3932#define _TRANS_HTOTAL_A 0xe0000 3932#define _PCH_TRANS_HTOTAL_A 0xe0000
3933#define TRANS_HTOTAL_SHIFT 16 3933#define TRANS_HTOTAL_SHIFT 16
3934#define TRANS_HACTIVE_SHIFT 0 3934#define TRANS_HACTIVE_SHIFT 0
3935#define _TRANS_HBLANK_A 0xe0004 3935#define _PCH_TRANS_HBLANK_A 0xe0004
3936#define TRANS_HBLANK_END_SHIFT 16 3936#define TRANS_HBLANK_END_SHIFT 16
3937#define TRANS_HBLANK_START_SHIFT 0 3937#define TRANS_HBLANK_START_SHIFT 0
3938#define _TRANS_HSYNC_A 0xe0008 3938#define _PCH_TRANS_HSYNC_A 0xe0008
3939#define TRANS_HSYNC_END_SHIFT 16 3939#define TRANS_HSYNC_END_SHIFT 16
3940#define TRANS_HSYNC_START_SHIFT 0 3940#define TRANS_HSYNC_START_SHIFT 0
3941#define _TRANS_VTOTAL_A 0xe000c 3941#define _PCH_TRANS_VTOTAL_A 0xe000c
3942#define TRANS_VTOTAL_SHIFT 16 3942#define TRANS_VTOTAL_SHIFT 16
3943#define TRANS_VACTIVE_SHIFT 0 3943#define TRANS_VACTIVE_SHIFT 0
3944#define _TRANS_VBLANK_A 0xe0010 3944#define _PCH_TRANS_VBLANK_A 0xe0010
3945#define TRANS_VBLANK_END_SHIFT 16 3945#define TRANS_VBLANK_END_SHIFT 16
3946#define TRANS_VBLANK_START_SHIFT 0 3946#define TRANS_VBLANK_START_SHIFT 0
3947#define _TRANS_VSYNC_A 0xe0014 3947#define _PCH_TRANS_VSYNC_A 0xe0014
3948#define TRANS_VSYNC_END_SHIFT 16 3948#define TRANS_VSYNC_END_SHIFT 16
3949#define TRANS_VSYNC_START_SHIFT 0 3949#define TRANS_VSYNC_START_SHIFT 0
3950#define _TRANS_VSYNCSHIFT_A 0xe0028 3950#define _PCH_TRANS_VSYNCSHIFT_A 0xe0028
3951 3951
3952#define _TRANSA_DATA_M1 0xe0030 3952#define _TRANSA_DATA_M1 0xe0030
3953#define _TRANSA_DATA_N1 0xe0034 3953#define _TRANSA_DATA_N1 0xe0034
@@ -4025,22 +4025,22 @@
4025#define HSW_TVIDEO_DIP_VSC_DATA(trans) \ 4025#define HSW_TVIDEO_DIP_VSC_DATA(trans) \
4026 _TRANSCODER(trans, HSW_VIDEO_DIP_VSC_DATA_A, HSW_VIDEO_DIP_VSC_DATA_B) 4026 _TRANSCODER(trans, HSW_VIDEO_DIP_VSC_DATA_A, HSW_VIDEO_DIP_VSC_DATA_B)
4027 4027
4028#define _TRANS_HTOTAL_B 0xe1000 4028#define _PCH_TRANS_HTOTAL_B 0xe1000
4029#define _TRANS_HBLANK_B 0xe1004 4029#define _PCH_TRANS_HBLANK_B 0xe1004
4030#define _TRANS_HSYNC_B 0xe1008 4030#define _PCH_TRANS_HSYNC_B 0xe1008
4031#define _TRANS_VTOTAL_B 0xe100c 4031#define _PCH_TRANS_VTOTAL_B 0xe100c
4032#define _TRANS_VBLANK_B 0xe1010 4032#define _PCH_TRANS_VBLANK_B 0xe1010
4033#define _TRANS_VSYNC_B 0xe1014 4033#define _PCH_TRANS_VSYNC_B 0xe1014
4034#define _TRANS_VSYNCSHIFT_B 0xe1028 4034#define _PCH_TRANS_VSYNCSHIFT_B 0xe1028
4035 4035
4036#define TRANS_HTOTAL(pipe) _PIPE(pipe, _TRANS_HTOTAL_A, _TRANS_HTOTAL_B) 4036#define PCH_TRANS_HTOTAL(pipe) _PIPE(pipe, _PCH_TRANS_HTOTAL_A, _PCH_TRANS_HTOTAL_B)
4037#define TRANS_HBLANK(pipe) _PIPE(pipe, _TRANS_HBLANK_A, _TRANS_HBLANK_B) 4037#define PCH_TRANS_HBLANK(pipe) _PIPE(pipe, _PCH_TRANS_HBLANK_A, _PCH_TRANS_HBLANK_B)
4038#define TRANS_HSYNC(pipe) _PIPE(pipe, _TRANS_HSYNC_A, _TRANS_HSYNC_B) 4038#define PCH_TRANS_HSYNC(pipe) _PIPE(pipe, _PCH_TRANS_HSYNC_A, _PCH_TRANS_HSYNC_B)
4039#define TRANS_VTOTAL(pipe) _PIPE(pipe, _TRANS_VTOTAL_A, _TRANS_VTOTAL_B) 4039#define PCH_TRANS_VTOTAL(pipe) _PIPE(pipe, _PCH_TRANS_VTOTAL_A, _PCH_TRANS_VTOTAL_B)
4040#define TRANS_VBLANK(pipe) _PIPE(pipe, _TRANS_VBLANK_A, _TRANS_VBLANK_B) 4040#define PCH_TRANS_VBLANK(pipe) _PIPE(pipe, _PCH_TRANS_VBLANK_A, _PCH_TRANS_VBLANK_B)
4041#define TRANS_VSYNC(pipe) _PIPE(pipe, _TRANS_VSYNC_A, _TRANS_VSYNC_B) 4041#define PCH_TRANS_VSYNC(pipe) _PIPE(pipe, _PCH_TRANS_VSYNC_A, _PCH_TRANS_VSYNC_B)
4042#define TRANS_VSYNCSHIFT(pipe) _PIPE(pipe, _TRANS_VSYNCSHIFT_A, \ 4042#define PCH_TRANS_VSYNCSHIFT(pipe) _PIPE(pipe, _PCH_TRANS_VSYNCSHIFT_A, \
4043 _TRANS_VSYNCSHIFT_B) 4043 _PCH_TRANS_VSYNCSHIFT_B)
4044 4044
4045#define _TRANSB_DATA_M1 0xe1030 4045#define _TRANSB_DATA_M1 0xe1030
4046#define _TRANSB_DATA_N1 0xe1034 4046#define _TRANSB_DATA_N1 0xe1034
diff --git a/drivers/gpu/drm/i915/i915_ums.c b/drivers/gpu/drm/i915/i915_ums.c
index 75960dd81b5a..4168d2b6b4f1 100644
--- a/drivers/gpu/drm/i915/i915_ums.c
+++ b/drivers/gpu/drm/i915/i915_ums.c
@@ -149,12 +149,12 @@ void i915_save_display_reg(struct drm_device *dev)
149 dev_priv->regfile.savePFA_WIN_POS = I915_READ(_PFA_WIN_POS); 149 dev_priv->regfile.savePFA_WIN_POS = I915_READ(_PFA_WIN_POS);
150 150
151 dev_priv->regfile.saveTRANSACONF = I915_READ(_PCH_TRANSACONF); 151 dev_priv->regfile.saveTRANSACONF = I915_READ(_PCH_TRANSACONF);
152 dev_priv->regfile.saveTRANS_HTOTAL_A = I915_READ(_TRANS_HTOTAL_A); 152 dev_priv->regfile.saveTRANS_HTOTAL_A = I915_READ(_PCH_TRANS_HTOTAL_A);
153 dev_priv->regfile.saveTRANS_HBLANK_A = I915_READ(_TRANS_HBLANK_A); 153 dev_priv->regfile.saveTRANS_HBLANK_A = I915_READ(_PCH_TRANS_HBLANK_A);
154 dev_priv->regfile.saveTRANS_HSYNC_A = I915_READ(_TRANS_HSYNC_A); 154 dev_priv->regfile.saveTRANS_HSYNC_A = I915_READ(_PCH_TRANS_HSYNC_A);
155 dev_priv->regfile.saveTRANS_VTOTAL_A = I915_READ(_TRANS_VTOTAL_A); 155 dev_priv->regfile.saveTRANS_VTOTAL_A = I915_READ(_PCH_TRANS_VTOTAL_A);
156 dev_priv->regfile.saveTRANS_VBLANK_A = I915_READ(_TRANS_VBLANK_A); 156 dev_priv->regfile.saveTRANS_VBLANK_A = I915_READ(_PCH_TRANS_VBLANK_A);
157 dev_priv->regfile.saveTRANS_VSYNC_A = I915_READ(_TRANS_VSYNC_A); 157 dev_priv->regfile.saveTRANS_VSYNC_A = I915_READ(_PCH_TRANS_VSYNC_A);
158 } 158 }
159 159
160 dev_priv->regfile.saveDSPACNTR = I915_READ(_DSPACNTR); 160 dev_priv->regfile.saveDSPACNTR = I915_READ(_DSPACNTR);
@@ -206,12 +206,12 @@ void i915_save_display_reg(struct drm_device *dev)
206 dev_priv->regfile.savePFB_WIN_POS = I915_READ(_PFB_WIN_POS); 206 dev_priv->regfile.savePFB_WIN_POS = I915_READ(_PFB_WIN_POS);
207 207
208 dev_priv->regfile.saveTRANSBCONF = I915_READ(_PCH_TRANSBCONF); 208 dev_priv->regfile.saveTRANSBCONF = I915_READ(_PCH_TRANSBCONF);
209 dev_priv->regfile.saveTRANS_HTOTAL_B = I915_READ(_TRANS_HTOTAL_B); 209 dev_priv->regfile.saveTRANS_HTOTAL_B = I915_READ(_PCH_TRANS_HTOTAL_B);
210 dev_priv->regfile.saveTRANS_HBLANK_B = I915_READ(_TRANS_HBLANK_B); 210 dev_priv->regfile.saveTRANS_HBLANK_B = I915_READ(_PCH_TRANS_HBLANK_B);
211 dev_priv->regfile.saveTRANS_HSYNC_B = I915_READ(_TRANS_HSYNC_B); 211 dev_priv->regfile.saveTRANS_HSYNC_B = I915_READ(_PCH_TRANS_HSYNC_B);
212 dev_priv->regfile.saveTRANS_VTOTAL_B = I915_READ(_TRANS_VTOTAL_B); 212 dev_priv->regfile.saveTRANS_VTOTAL_B = I915_READ(_PCH_TRANS_VTOTAL_B);
213 dev_priv->regfile.saveTRANS_VBLANK_B = I915_READ(_TRANS_VBLANK_B); 213 dev_priv->regfile.saveTRANS_VBLANK_B = I915_READ(_PCH_TRANS_VBLANK_B);
214 dev_priv->regfile.saveTRANS_VSYNC_B = I915_READ(_TRANS_VSYNC_B); 214 dev_priv->regfile.saveTRANS_VSYNC_B = I915_READ(_PCH_TRANS_VSYNC_B);
215 } 215 }
216 216
217 dev_priv->regfile.saveDSPBCNTR = I915_READ(_DSPBCNTR); 217 dev_priv->regfile.saveDSPBCNTR = I915_READ(_DSPBCNTR);
@@ -380,12 +380,12 @@ void i915_restore_display_reg(struct drm_device *dev)
380 I915_WRITE(_PFA_WIN_POS, dev_priv->regfile.savePFA_WIN_POS); 380 I915_WRITE(_PFA_WIN_POS, dev_priv->regfile.savePFA_WIN_POS);
381 381
382 I915_WRITE(_PCH_TRANSACONF, dev_priv->regfile.saveTRANSACONF); 382 I915_WRITE(_PCH_TRANSACONF, dev_priv->regfile.saveTRANSACONF);
383 I915_WRITE(_TRANS_HTOTAL_A, dev_priv->regfile.saveTRANS_HTOTAL_A); 383 I915_WRITE(_PCH_TRANS_HTOTAL_A, dev_priv->regfile.saveTRANS_HTOTAL_A);
384 I915_WRITE(_TRANS_HBLANK_A, dev_priv->regfile.saveTRANS_HBLANK_A); 384 I915_WRITE(_PCH_TRANS_HBLANK_A, dev_priv->regfile.saveTRANS_HBLANK_A);
385 I915_WRITE(_TRANS_HSYNC_A, dev_priv->regfile.saveTRANS_HSYNC_A); 385 I915_WRITE(_PCH_TRANS_HSYNC_A, dev_priv->regfile.saveTRANS_HSYNC_A);
386 I915_WRITE(_TRANS_VTOTAL_A, dev_priv->regfile.saveTRANS_VTOTAL_A); 386 I915_WRITE(_PCH_TRANS_VTOTAL_A, dev_priv->regfile.saveTRANS_VTOTAL_A);
387 I915_WRITE(_TRANS_VBLANK_A, dev_priv->regfile.saveTRANS_VBLANK_A); 387 I915_WRITE(_PCH_TRANS_VBLANK_A, dev_priv->regfile.saveTRANS_VBLANK_A);
388 I915_WRITE(_TRANS_VSYNC_A, dev_priv->regfile.saveTRANS_VSYNC_A); 388 I915_WRITE(_PCH_TRANS_VSYNC_A, dev_priv->regfile.saveTRANS_VSYNC_A);
389 } 389 }
390 390
391 /* Restore plane info */ 391 /* Restore plane info */
@@ -449,12 +449,12 @@ void i915_restore_display_reg(struct drm_device *dev)
449 I915_WRITE(_PFB_WIN_POS, dev_priv->regfile.savePFB_WIN_POS); 449 I915_WRITE(_PFB_WIN_POS, dev_priv->regfile.savePFB_WIN_POS);
450 450
451 I915_WRITE(_PCH_TRANSBCONF, dev_priv->regfile.saveTRANSBCONF); 451 I915_WRITE(_PCH_TRANSBCONF, dev_priv->regfile.saveTRANSBCONF);
452 I915_WRITE(_TRANS_HTOTAL_B, dev_priv->regfile.saveTRANS_HTOTAL_B); 452 I915_WRITE(_PCH_TRANS_HTOTAL_B, dev_priv->regfile.saveTRANS_HTOTAL_B);
453 I915_WRITE(_TRANS_HBLANK_B, dev_priv->regfile.saveTRANS_HBLANK_B); 453 I915_WRITE(_PCH_TRANS_HBLANK_B, dev_priv->regfile.saveTRANS_HBLANK_B);
454 I915_WRITE(_TRANS_HSYNC_B, dev_priv->regfile.saveTRANS_HSYNC_B); 454 I915_WRITE(_PCH_TRANS_HSYNC_B, dev_priv->regfile.saveTRANS_HSYNC_B);
455 I915_WRITE(_TRANS_VTOTAL_B, dev_priv->regfile.saveTRANS_VTOTAL_B); 455 I915_WRITE(_PCH_TRANS_VTOTAL_B, dev_priv->regfile.saveTRANS_VTOTAL_B);
456 I915_WRITE(_TRANS_VBLANK_B, dev_priv->regfile.saveTRANS_VBLANK_B); 456 I915_WRITE(_PCH_TRANS_VBLANK_B, dev_priv->regfile.saveTRANS_VBLANK_B);
457 I915_WRITE(_TRANS_VSYNC_B, dev_priv->regfile.saveTRANS_VSYNC_B); 457 I915_WRITE(_PCH_TRANS_VSYNC_B, dev_priv->regfile.saveTRANS_VSYNC_B);
458 } 458 }
459 459
460 /* Restore plane info */ 460 /* Restore plane info */
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d2dfe90213af..9f755fd5cd1c 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2995,6 +2995,30 @@ static void lpt_program_iclkip(struct drm_crtc *crtc)
2995 mutex_unlock(&dev_priv->dpio_lock); 2995 mutex_unlock(&dev_priv->dpio_lock);
2996} 2996}
2997 2997
2998static void ironlake_pch_transcoder_set_timings(struct intel_crtc *crtc,
2999 enum pipe pch_transcoder)
3000{
3001 struct drm_device *dev = crtc->base.dev;
3002 struct drm_i915_private *dev_priv = dev->dev_private;
3003 enum transcoder cpu_transcoder = crtc->config.cpu_transcoder;
3004
3005 I915_WRITE(PCH_TRANS_HTOTAL(pch_transcoder),
3006 I915_READ(HTOTAL(cpu_transcoder)));
3007 I915_WRITE(PCH_TRANS_HBLANK(pch_transcoder),
3008 I915_READ(HBLANK(cpu_transcoder)));
3009 I915_WRITE(PCH_TRANS_HSYNC(pch_transcoder),
3010 I915_READ(HSYNC(cpu_transcoder)));
3011
3012 I915_WRITE(PCH_TRANS_VTOTAL(pch_transcoder),
3013 I915_READ(VTOTAL(cpu_transcoder)));
3014 I915_WRITE(PCH_TRANS_VBLANK(pch_transcoder),
3015 I915_READ(VBLANK(cpu_transcoder)));
3016 I915_WRITE(PCH_TRANS_VSYNC(pch_transcoder),
3017 I915_READ(VSYNC(cpu_transcoder)));
3018 I915_WRITE(PCH_TRANS_VSYNCSHIFT(pch_transcoder),
3019 I915_READ(VSYNCSHIFT(cpu_transcoder)));
3020}
3021
2998/* 3022/*
2999 * Enable PCH resources required for PCH ports: 3023 * Enable PCH resources required for PCH ports:
3000 * - PCH PLLs 3024 * - PCH PLLs
@@ -3058,14 +3082,7 @@ static void ironlake_pch_enable(struct drm_crtc *crtc)
3058 3082
3059 /* set transcoder timing, panel must allow it */ 3083 /* set transcoder timing, panel must allow it */
3060 assert_panel_unlocked(dev_priv, pipe); 3084 assert_panel_unlocked(dev_priv, pipe);
3061 I915_WRITE(TRANS_HTOTAL(pipe), I915_READ(HTOTAL(pipe))); 3085 ironlake_pch_transcoder_set_timings(intel_crtc, pipe);
3062 I915_WRITE(TRANS_HBLANK(pipe), I915_READ(HBLANK(pipe)));
3063 I915_WRITE(TRANS_HSYNC(pipe), I915_READ(HSYNC(pipe)));
3064
3065 I915_WRITE(TRANS_VTOTAL(pipe), I915_READ(VTOTAL(pipe)));
3066 I915_WRITE(TRANS_VBLANK(pipe), I915_READ(VBLANK(pipe)));
3067 I915_WRITE(TRANS_VSYNC(pipe), I915_READ(VSYNC(pipe)));
3068 I915_WRITE(TRANS_VSYNCSHIFT(pipe), I915_READ(VSYNCSHIFT(pipe)));
3069 3086
3070 intel_fdi_normal_train(crtc); 3087 intel_fdi_normal_train(crtc);
3071 3088
@@ -3120,14 +3137,7 @@ static void lpt_pch_enable(struct drm_crtc *crtc)
3120 lpt_program_iclkip(crtc); 3137 lpt_program_iclkip(crtc);
3121 3138
3122 /* Set transcoder timing. */ 3139 /* Set transcoder timing. */
3123 I915_WRITE(_TRANS_HTOTAL_A, I915_READ(HTOTAL(cpu_transcoder))); 3140 ironlake_pch_transcoder_set_timings(intel_crtc, PIPE_A);
3124 I915_WRITE(_TRANS_HBLANK_A, I915_READ(HBLANK(cpu_transcoder)));
3125 I915_WRITE(_TRANS_HSYNC_A, I915_READ(HSYNC(cpu_transcoder)));
3126
3127 I915_WRITE(_TRANS_VTOTAL_A, I915_READ(VTOTAL(cpu_transcoder)));
3128 I915_WRITE(_TRANS_VBLANK_A, I915_READ(VBLANK(cpu_transcoder)));
3129 I915_WRITE(_TRANS_VSYNC_A, I915_READ(VSYNC(cpu_transcoder)));
3130 I915_WRITE(_TRANS_VSYNCSHIFT_A, I915_READ(VSYNCSHIFT(cpu_transcoder)));
3131 3141
3132 lpt_enable_pch_transcoder(dev_priv, cpu_transcoder); 3142 lpt_enable_pch_transcoder(dev_priv, cpu_transcoder);
3133} 3143}