aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2013-06-07 03:47:01 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-06-07 04:37:48 -0400
commitde1aa629aac8377bdfc55674bb8e30b5f15f418d (patch)
tree241af500146460fda42980b4c8b3807f75ccfa18
parent3e7ca9858d51a8df2bb18b82a529df5e5f9abc51 (diff)
drm/i915: Disable primary plane trickle feed for g4x
The docs say that the trickle feed disable bit is present (for primary planes only, not video sprites) on CTG, and that it must be set for ELK. Just set it for all g4x chipsets. v2: Do it in init_clock_gating too Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_display.c3
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c9
2 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 8d9e7c0e9e4b..3f025ee299dd 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1958,6 +1958,9 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
1958 dspcntr &= ~DISPPLANE_TILED; 1958 dspcntr &= ~DISPPLANE_TILED;
1959 } 1959 }
1960 1960
1961 if (IS_G4X(dev))
1962 dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
1963
1961 I915_WRITE(reg, dspcntr); 1964 I915_WRITE(reg, dspcntr);
1962 1965
1963 linear_offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8); 1966 linear_offset = y * fb->pitches[0] + x * (fb->bits_per_pixel / 8);
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index a417d7b196c2..47f3c48cd3c2 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -4908,6 +4908,7 @@ static void g4x_init_clock_gating(struct drm_device *dev)
4908{ 4908{
4909 struct drm_i915_private *dev_priv = dev->dev_private; 4909 struct drm_i915_private *dev_priv = dev->dev_private;
4910 uint32_t dspclk_gate; 4910 uint32_t dspclk_gate;
4911 int pipe;
4911 4912
4912 I915_WRITE(RENCLK_GATE_D1, 0); 4913 I915_WRITE(RENCLK_GATE_D1, 0);
4913 I915_WRITE(RENCLK_GATE_D2, VF_UNIT_CLOCK_GATE_DISABLE | 4914 I915_WRITE(RENCLK_GATE_D2, VF_UNIT_CLOCK_GATE_DISABLE |
@@ -4924,6 +4925,14 @@ static void g4x_init_clock_gating(struct drm_device *dev)
4924 /* WaDisableRenderCachePipelinedFlush */ 4925 /* WaDisableRenderCachePipelinedFlush */
4925 I915_WRITE(CACHE_MODE_0, 4926 I915_WRITE(CACHE_MODE_0,
4926 _MASKED_BIT_ENABLE(CM0_PIPELINED_RENDER_FLUSH_DISABLE)); 4927 _MASKED_BIT_ENABLE(CM0_PIPELINED_RENDER_FLUSH_DISABLE));
4928
4929 for_each_pipe(pipe) {
4930 I915_WRITE(DSPCNTR(pipe),
4931 I915_READ(DSPCNTR(pipe)) |
4932 DISPPLANE_TRICKLE_FEED_DISABLE);
4933 intel_flush_display_plane(dev_priv, pipe);
4934 }
4935
4927} 4936}
4928 4937
4929static void crestline_init_clock_gating(struct drm_device *dev) 4938static void crestline_init_clock_gating(struct drm_device *dev)