diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2012-10-23 16:30:02 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-10-26 04:24:49 -0400 |
commit | fe2b8f9dfb05f78d525bf6668549271af1860ee5 (patch) | |
tree | fb33b759986191619331a0bfeed4a7094dcf94d6 | |
parent | afe2fcf5e0ddca8aada0882fc5c54430101dfb0e (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.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 37 |
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; |