diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-05-03 05:49:47 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-05-06 05:25:34 -0400 |
commit | 275f01b2694a52d13c32358d17d594ec9aba55e3 (patch) | |
tree | e01c12a345af4df9b0101d49961ae087be2d37b1 /drivers/gpu | |
parent | ab9412ba06484cdfd82bdb748689024efe2221fe (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.h | 70 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_ums.c | 48 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 42 |
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 | ||
2998 | static 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 | } |