diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2013-08-23 18:51:28 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-09-03 13:17:57 -0400 |
commit | 1f5d76dbb636c73912c9ff1c90ff46dd2273f098 (patch) | |
tree | 416dd27dc8244bc2131f021586d7e824e5dee990 | |
parent | 814c5f1f52a4beb3710317022acd6ad34fc0b6b9 (diff) |
drm/i915: enable trickle feed on Haswell
We shouldn't disable the trickle feed bits on Haswell. Our
documentation explicitly says the trickle feed bits of PRI_CTL and
CUR_CTL should not be programmed to 1, and the hardware engineer also
asked us to not program the SPR_CTL field to 1. Leaving the bits as 1
could cause underflows.
Reported-by: Arthur Runyan <arthur.j.runyan@intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-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/i915_reg.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_sprite.c | 7 |
4 files changed, 13 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index dcc58ea157fe..c159e1a6810f 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -3313,6 +3313,7 @@ | |||
3313 | #define MCURSOR_PIPE_A 0x00 | 3313 | #define MCURSOR_PIPE_A 0x00 |
3314 | #define MCURSOR_PIPE_B (1 << 28) | 3314 | #define MCURSOR_PIPE_B (1 << 28) |
3315 | #define MCURSOR_GAMMA_ENABLE (1 << 26) | 3315 | #define MCURSOR_GAMMA_ENABLE (1 << 26) |
3316 | #define CURSOR_TRICKLE_FEED_DISABLE (1 << 14) | ||
3316 | #define _CURABASE (dev_priv->info->display_mmio_offset + 0x70084) | 3317 | #define _CURABASE (dev_priv->info->display_mmio_offset + 0x70084) |
3317 | #define _CURAPOS (dev_priv->info->display_mmio_offset + 0x70088) | 3318 | #define _CURAPOS (dev_priv->info->display_mmio_offset + 0x70088) |
3318 | #define CURSOR_POS_MASK 0x007FF | 3319 | #define CURSOR_POS_MASK 0x007FF |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index a98392f9894e..a1e502b07266 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -2077,8 +2077,10 @@ static int ironlake_update_plane(struct drm_crtc *crtc, | |||
2077 | else | 2077 | else |
2078 | dspcntr &= ~DISPPLANE_TILED; | 2078 | dspcntr &= ~DISPPLANE_TILED; |
2079 | 2079 | ||
2080 | /* must disable */ | 2080 | if (IS_HASWELL(dev)) |
2081 | dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE; | 2081 | dspcntr &= ~DISPPLANE_TRICKLE_FEED_DISABLE; |
2082 | else | ||
2083 | dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE; | ||
2082 | 2084 | ||
2083 | I915_WRITE(reg, dspcntr); | 2085 | I915_WRITE(reg, dspcntr); |
2084 | 2086 | ||
@@ -6762,8 +6764,10 @@ static void ivb_update_cursor(struct drm_crtc *crtc, u32 base) | |||
6762 | cntl &= ~(CURSOR_MODE | MCURSOR_GAMMA_ENABLE); | 6764 | cntl &= ~(CURSOR_MODE | MCURSOR_GAMMA_ENABLE); |
6763 | cntl |= CURSOR_MODE_DISABLE; | 6765 | cntl |= CURSOR_MODE_DISABLE; |
6764 | } | 6766 | } |
6765 | if (IS_HASWELL(dev)) | 6767 | if (IS_HASWELL(dev)) { |
6766 | cntl |= CURSOR_PIPE_CSC_ENABLE; | 6768 | cntl |= CURSOR_PIPE_CSC_ENABLE; |
6769 | cntl &= ~CURSOR_TRICKLE_FEED_DISABLE; | ||
6770 | } | ||
6767 | I915_WRITE(CURCNTR_IVB(pipe), cntl); | 6771 | I915_WRITE(CURCNTR_IVB(pipe), cntl); |
6768 | 6772 | ||
6769 | intel_crtc->cursor_visible = visible; | 6773 | intel_crtc->cursor_visible = visible; |
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 6b1d00389952..0c115cc4899f 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -4960,8 +4960,6 @@ static void haswell_init_clock_gating(struct drm_device *dev) | |||
4960 | I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) | | 4960 | I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) | |
4961 | GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB); | 4961 | GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB); |
4962 | 4962 | ||
4963 | g4x_disable_trickle_feed(dev); | ||
4964 | |||
4965 | /* WaVSRefCountFullforceMissDisable:hsw */ | 4963 | /* WaVSRefCountFullforceMissDisable:hsw */ |
4966 | gen7_setup_fixed_func_scheduler(dev_priv); | 4964 | gen7_setup_fixed_func_scheduler(dev_priv); |
4967 | 4965 | ||
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c index 78b621cdd108..ad6ec4b39005 100644 --- a/drivers/gpu/drm/i915/intel_sprite.c +++ b/drivers/gpu/drm/i915/intel_sprite.c | |||
@@ -260,8 +260,11 @@ ivb_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, | |||
260 | if (obj->tiling_mode != I915_TILING_NONE) | 260 | if (obj->tiling_mode != I915_TILING_NONE) |
261 | sprctl |= SPRITE_TILED; | 261 | sprctl |= SPRITE_TILED; |
262 | 262 | ||
263 | /* must disable */ | 263 | if (IS_HASWELL(dev)) |
264 | sprctl |= SPRITE_TRICKLE_FEED_DISABLE; | 264 | sprctl &= ~SPRITE_TRICKLE_FEED_DISABLE; |
265 | else | ||
266 | sprctl |= SPRITE_TRICKLE_FEED_DISABLE; | ||
267 | |||
265 | sprctl |= SPRITE_ENABLE; | 268 | sprctl |= SPRITE_ENABLE; |
266 | 269 | ||
267 | if (IS_HASWELL(dev)) | 270 | if (IS_HASWELL(dev)) |