aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_sprite.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-07-08 20:38:42 -0400
committerDave Airlie <airlied@redhat.com>2014-07-08 20:38:42 -0400
commitca5a1b9ba0fb5291b555a23b76dbe5f6c30bfd7a (patch)
tree9a012a2a610ad4e9500c8e4f0aa68ecdc23c4dba /drivers/gpu/drm/i915/intel_sprite.c
parentc7dbc6c9ae5c3baa3be755a228a349374d043b5b (diff)
parent34882298b93e998d5fccde852b860e8fbe6c8f6b (diff)
Merge tag 'drm-intel-next-2014-06-20' of git://anongit.freedesktop.org/drm-intel into drm-next
- Accurate frontbuffer tracking and frontbuffer rendering invalidate, flush and flip events. This is prep work for proper PSR support and should also be useful for DRRS&fbc. - Runtime suspend hardware on system suspend to support the new SOix sleep states, from Jesse. - PSR updates for broadwell (Rodrigo) - Universal plane support for cursors (Matt Roper), including core drm patches. - Prefault gtt mappings (Chris) - baytrail write-enable pte bit support (Akash Goel) - mmio based flips (Sourab Gupta) instead of blitter ring flips - interrupt handling race fixes (Oscar Mateo) And old, not yet merged features from the previous round: - rps/turbo support for chv (Deepak) - some other straggling chv patches (Ville) - proper universal plane conversion for the primary plane (Matt Roper) - ppgtt on vlv from Jesse - pile of cleanups, little fixes for insane corner cases and improved debug support all over * tag 'drm-intel-next-2014-06-20' of git://anongit.freedesktop.org/drm-intel: (99 commits) drm/i915: Update DRIVER_DATE to 20140620 drivers/i915: Fix unnoticed failure of init_ring_common() drm/i915: Track frontbuffer invalidation/flushing drm/i915: Use new frontbuffer bits to increase pll clock drm/i915: don't take runtime PM reference around freeze/thaw drm/i915: use runtime irq suspend/resume in freeze/thaw drm/i915: Properly track domain of the fbcon fb drm/i915: Print obj->frontbuffer_bits in debugfs output drm/i915: Introduce accurate frontbuffer tracking drm/i915: Drop schedule_back from psr_exit drm/i915: Ditch intel_edp_psr_update drm/i915: Drop unecessary complexity from psr_inactivate drm/i915: Remove ctx->last_ring drm/i915/chv: Ack interrupts before handling them (CHV) drm/i915/bdw: Ack interrupts before handling them (GEN8) drm/i915/vlv: Ack interrupts before handling them (VLV) drm/i915: Ack interrupts before handling them (GEN5 - GEN7) drm/i915: Don't BUG_ON in i915_gem_obj_offset drm/i915: Grab dev->struct_mutex in i915_gem_pageflip_info drm/i915: Add some L3 registers to the parser whitelist ... Conflicts: drivers/gpu/drm/i915/i915_drv.c
Diffstat (limited to 'drivers/gpu/drm/i915/intel_sprite.c')
-rw-r--r--drivers/gpu/drm/i915/intel_sprite.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 9a17b4e92ef4..985317eb1dc9 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -819,6 +819,7 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
819 struct drm_device *dev = plane->dev; 819 struct drm_device *dev = plane->dev;
820 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 820 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
821 struct intel_plane *intel_plane = to_intel_plane(plane); 821 struct intel_plane *intel_plane = to_intel_plane(plane);
822 enum pipe pipe = intel_crtc->pipe;
822 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); 823 struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
823 struct drm_i915_gem_object *obj = intel_fb->obj; 824 struct drm_i915_gem_object *obj = intel_fb->obj;
824 struct drm_i915_gem_object *old_obj = intel_plane->obj; 825 struct drm_i915_gem_object *old_obj = intel_plane->obj;
@@ -1006,6 +1007,8 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
1006 */ 1007 */
1007 ret = intel_pin_and_fence_fb_obj(dev, obj, NULL); 1008 ret = intel_pin_and_fence_fb_obj(dev, obj, NULL);
1008 1009
1010 i915_gem_track_fb(old_obj, obj,
1011 INTEL_FRONTBUFFER_SPRITE(pipe));
1009 mutex_unlock(&dev->struct_mutex); 1012 mutex_unlock(&dev->struct_mutex);
1010 1013
1011 if (ret) 1014 if (ret)
@@ -1039,6 +1042,8 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
1039 else 1042 else
1040 intel_plane->disable_plane(plane, crtc); 1043 intel_plane->disable_plane(plane, crtc);
1041 1044
1045 intel_frontbuffer_flip(dev, INTEL_FRONTBUFFER_SPRITE(pipe));
1046
1042 if (!primary_was_enabled && primary_enabled) 1047 if (!primary_was_enabled && primary_enabled)
1043 intel_post_enable_primary(crtc); 1048 intel_post_enable_primary(crtc);
1044 } 1049 }
@@ -1068,6 +1073,7 @@ intel_disable_plane(struct drm_plane *plane)
1068 struct drm_device *dev = plane->dev; 1073 struct drm_device *dev = plane->dev;
1069 struct intel_plane *intel_plane = to_intel_plane(plane); 1074 struct intel_plane *intel_plane = to_intel_plane(plane);
1070 struct intel_crtc *intel_crtc; 1075 struct intel_crtc *intel_crtc;
1076 enum pipe pipe;
1071 1077
1072 if (!plane->fb) 1078 if (!plane->fb)
1073 return 0; 1079 return 0;
@@ -1076,6 +1082,7 @@ intel_disable_plane(struct drm_plane *plane)
1076 return -EINVAL; 1082 return -EINVAL;
1077 1083
1078 intel_crtc = to_intel_crtc(plane->crtc); 1084 intel_crtc = to_intel_crtc(plane->crtc);
1085 pipe = intel_crtc->pipe;
1079 1086
1080 if (intel_crtc->active) { 1087 if (intel_crtc->active) {
1081 bool primary_was_enabled = intel_crtc->primary_enabled; 1088 bool primary_was_enabled = intel_crtc->primary_enabled;
@@ -1094,6 +1101,8 @@ intel_disable_plane(struct drm_plane *plane)
1094 1101
1095 mutex_lock(&dev->struct_mutex); 1102 mutex_lock(&dev->struct_mutex);
1096 intel_unpin_fb_obj(intel_plane->obj); 1103 intel_unpin_fb_obj(intel_plane->obj);
1104 i915_gem_track_fb(intel_plane->obj, NULL,
1105 INTEL_FRONTBUFFER_SPRITE(pipe));
1097 mutex_unlock(&dev->struct_mutex); 1106 mutex_unlock(&dev->struct_mutex);
1098 1107
1099 intel_plane->obj = NULL; 1108 intel_plane->obj = NULL;