aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-03-26 08:38:15 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-03-28 13:33:12 -0400
commit64f962e3e38bf6f40bbd2462f8380dee0369e1bf (patch)
treeb5cb309e30913f7b274741f6f1736d0f2b0f451b /drivers/gpu
parent7bb836dd137be9083dd2c7245c1d6ca0c2a77711 (diff)
drm/i915: Recompute WM when the cursor size changes
If the cursor width is changed, we may need to recompute our WM to prevent untold flickering. We hope that the registers are flushed on the same vblank to prevent underruns... Cc: Damien Lespiau <damien.lespiau@intel.com> Cc: Sagar Kamble <sagar.a.kamble@intel.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index b433b891f8a2..3a5fb1072a5c 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -7745,6 +7745,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
7745 struct drm_i915_private *dev_priv = dev->dev_private; 7745 struct drm_i915_private *dev_priv = dev->dev_private;
7746 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 7746 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
7747 struct drm_i915_gem_object *obj; 7747 struct drm_i915_gem_object *obj;
7748 unsigned old_width;
7748 uint32_t addr; 7749 uint32_t addr;
7749 int ret; 7750 int ret;
7750 7751
@@ -7835,13 +7836,18 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
7835 7836
7836 mutex_unlock(&dev->struct_mutex); 7837 mutex_unlock(&dev->struct_mutex);
7837 7838
7839 old_width = intel_crtc->cursor_width;
7840
7838 intel_crtc->cursor_addr = addr; 7841 intel_crtc->cursor_addr = addr;
7839 intel_crtc->cursor_bo = obj; 7842 intel_crtc->cursor_bo = obj;
7840 intel_crtc->cursor_width = width; 7843 intel_crtc->cursor_width = width;
7841 intel_crtc->cursor_height = height; 7844 intel_crtc->cursor_height = height;
7842 7845
7843 if (intel_crtc->active) 7846 if (intel_crtc->active) {
7847 if (old_width != width)
7848 intel_update_watermarks(crtc);
7844 intel_crtc_update_cursor(crtc, intel_crtc->cursor_bo != NULL); 7849 intel_crtc_update_cursor(crtc, intel_crtc->cursor_bo != NULL);
7850 }
7845 7851
7846 return 0; 7852 return 0;
7847fail_unpin: 7853fail_unpin: