aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2012-10-23 16:30:02 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-10-26 04:24:49 -0400
commitfe2b8f9dfb05f78d525bf6668549271af1860ee5 (patch)
treefb33b759986191619331a0bfeed4a7094dcf94d6
parentafe2fcf5e0ddca8aada0882fc5c54430101dfb0e (diff)
drm/i915: convert pipe timing definitions to transcoder
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c8
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h14
-rw-r--r--drivers/gpu/drm/i915/intel_display.c37
3 files changed, 31 insertions, 28 deletions
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 6036d214994c..b92e6bfbb97c 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -185,6 +185,8 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
185 int vbl_start, vbl_end, htotal, vtotal; 185 int vbl_start, vbl_end, htotal, vtotal;
186 bool in_vbl = true; 186 bool in_vbl = true;
187 int ret = 0; 187 int ret = 0;
188 enum transcoder cpu_transcoder = intel_pipe_to_cpu_transcoder(dev_priv,
189 pipe);
188 190
189 if (!i915_pipe_enabled(dev, pipe)) { 191 if (!i915_pipe_enabled(dev, pipe)) {
190 DRM_DEBUG_DRIVER("trying to get scanoutpos for disabled " 192 DRM_DEBUG_DRIVER("trying to get scanoutpos for disabled "
@@ -193,7 +195,7 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
193 } 195 }
194 196
195 /* Get vtotal. */ 197 /* Get vtotal. */
196 vtotal = 1 + ((I915_READ(VTOTAL(pipe)) >> 16) & 0x1fff); 198 vtotal = 1 + ((I915_READ(VTOTAL(cpu_transcoder)) >> 16) & 0x1fff);
197 199
198 if (INTEL_INFO(dev)->gen >= 4) { 200 if (INTEL_INFO(dev)->gen >= 4) {
199 /* No obvious pixelcount register. Only query vertical 201 /* No obvious pixelcount register. Only query vertical
@@ -213,13 +215,13 @@ static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
213 */ 215 */
214 position = (I915_READ(PIPEFRAMEPIXEL(pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT; 216 position = (I915_READ(PIPEFRAMEPIXEL(pipe)) & PIPE_PIXEL_MASK) >> PIPE_PIXEL_SHIFT;
215 217
216 htotal = 1 + ((I915_READ(HTOTAL(pipe)) >> 16) & 0x1fff); 218 htotal = 1 + ((I915_READ(HTOTAL(cpu_transcoder)) >> 16) & 0x1fff);
217 *vpos = position / htotal; 219 *vpos = position / htotal;
218 *hpos = position - (*vpos * htotal); 220 *hpos = position - (*vpos * htotal);
219 } 221 }
220 222
221 /* Query vblank area. */ 223 /* Query vblank area. */
222 vbl = I915_READ(VBLANK(pipe)); 224 vbl = I915_READ(VBLANK(cpu_transcoder));
223 225
224 /* Test position against vblank region. */ 226 /* Test position against vblank region. */
225 vbl_start = vbl & 0x1fff; 227 vbl_start = vbl & 0x1fff;
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index b33f05d53ad7..be22aebe84f2 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -1568,14 +1568,14 @@
1568#define _VSYNCSHIFT_B 0x61028 1568#define _VSYNCSHIFT_B 0x61028
1569 1569
1570 1570
1571#define HTOTAL(pipe) _PIPE(pipe, _HTOTAL_A, _HTOTAL_B) 1571#define HTOTAL(trans) _TRANSCODER(trans, _HTOTAL_A, _HTOTAL_B)
1572#define HBLANK(pipe) _PIPE(pipe, _HBLANK_A, _HBLANK_B) 1572#define HBLANK(trans) _TRANSCODER(trans, _HBLANK_A, _HBLANK_B)
1573#define HSYNC(pipe) _PIPE(pipe, _HSYNC_A, _HSYNC_B) 1573#define HSYNC(trans) _TRANSCODER(trans, _HSYNC_A, _HSYNC_B)
1574#define VTOTAL(pipe) _PIPE(pipe, _VTOTAL_A, _VTOTAL_B) 1574#define VTOTAL(trans) _TRANSCODER(trans, _VTOTAL_A, _VTOTAL_B)
1575#define VBLANK(pipe) _PIPE(pipe, _VBLANK_A, _VBLANK_B) 1575#define VBLANK(trans) _TRANSCODER(trans, _VBLANK_A, _VBLANK_B)
1576#define VSYNC(pipe) _PIPE(pipe, _VSYNC_A, _VSYNC_B) 1576#define VSYNC(trans) _TRANSCODER(trans, _VSYNC_A, _VSYNC_B)
1577#define BCLRPAT(pipe) _PIPE(pipe, _BCLRPAT_A, _BCLRPAT_B) 1577#define BCLRPAT(pipe) _PIPE(pipe, _BCLRPAT_A, _BCLRPAT_B)
1578#define VSYNCSHIFT(pipe) _PIPE(pipe, _VSYNCSHIFT_A, _VSYNCSHIFT_B) 1578#define VSYNCSHIFT(trans) _TRANSCODER(trans, _VSYNCSHIFT_A, _VSYNCSHIFT_B)
1579 1579
1580/* VGA port control */ 1580/* VGA port control */
1581#define ADPA 0x61100 1581#define ADPA 0x61100
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d4ae5232fefa..0f3187c516c5 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4488,6 +4488,7 @@ static void intel_set_pipe_timings(struct intel_crtc *intel_crtc,
4488 struct drm_device *dev = intel_crtc->base.dev; 4488 struct drm_device *dev = intel_crtc->base.dev;
4489 struct drm_i915_private *dev_priv = dev->dev_private; 4489 struct drm_i915_private *dev_priv = dev->dev_private;
4490 enum pipe pipe = intel_crtc->pipe; 4490 enum pipe pipe = intel_crtc->pipe;
4491 enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
4491 uint32_t vsyncshift; 4492 uint32_t vsyncshift;
4492 4493
4493 if (!IS_GEN2(dev) && adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) { 4494 if (!IS_GEN2(dev) && adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
@@ -4501,25 +4502,25 @@ static void intel_set_pipe_timings(struct intel_crtc *intel_crtc,
4501 } 4502 }
4502 4503
4503 if (INTEL_INFO(dev)->gen > 3) 4504 if (INTEL_INFO(dev)->gen > 3)
4504 I915_WRITE(VSYNCSHIFT(pipe), vsyncshift); 4505 I915_WRITE(VSYNCSHIFT(cpu_transcoder), vsyncshift);
4505 4506
4506 I915_WRITE(HTOTAL(pipe), 4507 I915_WRITE(HTOTAL(cpu_transcoder),
4507 (adjusted_mode->crtc_hdisplay - 1) | 4508 (adjusted_mode->crtc_hdisplay - 1) |
4508 ((adjusted_mode->crtc_htotal - 1) << 16)); 4509 ((adjusted_mode->crtc_htotal - 1) << 16));
4509 I915_WRITE(HBLANK(pipe), 4510 I915_WRITE(HBLANK(cpu_transcoder),
4510 (adjusted_mode->crtc_hblank_start - 1) | 4511 (adjusted_mode->crtc_hblank_start - 1) |
4511 ((adjusted_mode->crtc_hblank_end - 1) << 16)); 4512 ((adjusted_mode->crtc_hblank_end - 1) << 16));
4512 I915_WRITE(HSYNC(pipe), 4513 I915_WRITE(HSYNC(cpu_transcoder),
4513 (adjusted_mode->crtc_hsync_start - 1) | 4514 (adjusted_mode->crtc_hsync_start - 1) |
4514 ((adjusted_mode->crtc_hsync_end - 1) << 16)); 4515 ((adjusted_mode->crtc_hsync_end - 1) << 16));
4515 4516
4516 I915_WRITE(VTOTAL(pipe), 4517 I915_WRITE(VTOTAL(cpu_transcoder),
4517 (adjusted_mode->crtc_vdisplay - 1) | 4518 (adjusted_mode->crtc_vdisplay - 1) |
4518 ((adjusted_mode->crtc_vtotal - 1) << 16)); 4519 ((adjusted_mode->crtc_vtotal - 1) << 16));
4519 I915_WRITE(VBLANK(pipe), 4520 I915_WRITE(VBLANK(cpu_transcoder),
4520 (adjusted_mode->crtc_vblank_start - 1) | 4521 (adjusted_mode->crtc_vblank_start - 1) |
4521 ((adjusted_mode->crtc_vblank_end - 1) << 16)); 4522 ((adjusted_mode->crtc_vblank_end - 1) << 16));
4522 I915_WRITE(VSYNC(pipe), 4523 I915_WRITE(VSYNC(cpu_transcoder),
4523 (adjusted_mode->crtc_vsync_start - 1) | 4524 (adjusted_mode->crtc_vsync_start - 1) |
4524 ((adjusted_mode->crtc_vsync_end - 1) << 16)); 4525 ((adjusted_mode->crtc_vsync_end - 1) << 16));
4525 4526
@@ -6481,12 +6482,12 @@ struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
6481{ 6482{
6482 struct drm_i915_private *dev_priv = dev->dev_private; 6483 struct drm_i915_private *dev_priv = dev->dev_private;
6483 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 6484 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
6484 int pipe = intel_crtc->pipe; 6485 enum transcoder cpu_transcoder = intel_crtc->cpu_transcoder;
6485 struct drm_display_mode *mode; 6486 struct drm_display_mode *mode;
6486 int htot = I915_READ(HTOTAL(pipe)); 6487 int htot = I915_READ(HTOTAL(cpu_transcoder));
6487 int hsync = I915_READ(HSYNC(pipe)); 6488 int hsync = I915_READ(HSYNC(cpu_transcoder));
6488 int vtot = I915_READ(VTOTAL(pipe)); 6489 int vtot = I915_READ(VTOTAL(cpu_transcoder));
6489 int vsync = I915_READ(VSYNC(pipe)); 6490 int vsync = I915_READ(VSYNC(cpu_transcoder));
6490 6491
6491 mode = kzalloc(sizeof(*mode), GFP_KERNEL); 6492 mode = kzalloc(sizeof(*mode), GFP_KERNEL);
6492 if (!mode) 6493 if (!mode)
@@ -8946,12 +8947,12 @@ intel_display_capture_error_state(struct drm_device *dev)
8946 8947
8947 error->pipe[i].conf = I915_READ(PIPECONF(cpu_transcoder)); 8948 error->pipe[i].conf = I915_READ(PIPECONF(cpu_transcoder));
8948 error->pipe[i].source = I915_READ(PIPESRC(i)); 8949 error->pipe[i].source = I915_READ(PIPESRC(i));
8949 error->pipe[i].htotal = I915_READ(HTOTAL(i)); 8950 error->pipe[i].htotal = I915_READ(HTOTAL(cpu_transcoder));
8950 error->pipe[i].hblank = I915_READ(HBLANK(i)); 8951 error->pipe[i].hblank = I915_READ(HBLANK(cpu_transcoder));
8951 error->pipe[i].hsync = I915_READ(HSYNC(i)); 8952 error->pipe[i].hsync = I915_READ(HSYNC(cpu_transcoder));
8952 error->pipe[i].vtotal = I915_READ(VTOTAL(i)); 8953 error->pipe[i].vtotal = I915_READ(VTOTAL(cpu_transcoder));
8953 error->pipe[i].vblank = I915_READ(VBLANK(i)); 8954 error->pipe[i].vblank = I915_READ(VBLANK(cpu_transcoder));
8954 error->pipe[i].vsync = I915_READ(VSYNC(i)); 8955 error->pipe[i].vsync = I915_READ(VSYNC(cpu_transcoder));
8955 } 8956 }
8956 8957
8957 return error; 8958 return error;