aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorTvrtko Ursulin <tvrtko.ursulin@intel.com>2014-10-30 12:39:38 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-11-07 12:41:51 -0500
commit850c4cdc6c223d02748f20c8ee1b677fb42da1aa (patch)
treeb5c1eb2e503891201ffa81495fc5bd6ffaeafca6 /drivers/gpu/drm
parent1df06b75f0235c6c4f836e5c03fb499ba70a54bd (diff)
drm/i915: Make intel_pin_and_fence_fb_obj take plane and framebuffer
It will help future code if this function knows something about of the context of the display setup object is being pinned for. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c23
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h4
-rw-r--r--drivers/gpu/drm/i915/intel_fbdev.c20
-rw-r--r--drivers/gpu/drm/i915/intel_sprite.c2
4 files changed, 25 insertions, 24 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d7951426f347..44060fb020a8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2194,11 +2194,13 @@ static int intel_align_height(struct drm_device *dev, int height, bool tiled)
2194} 2194}
2195 2195
2196int 2196int
2197intel_pin_and_fence_fb_obj(struct drm_device *dev, 2197intel_pin_and_fence_fb_obj(struct drm_plane *plane,
2198 struct drm_i915_gem_object *obj, 2198 struct drm_framebuffer *fb,
2199 struct intel_engine_cs *pipelined) 2199 struct intel_engine_cs *pipelined)
2200{ 2200{
2201 struct drm_device *dev = fb->dev;
2201 struct drm_i915_private *dev_priv = dev->dev_private; 2202 struct drm_i915_private *dev_priv = dev->dev_private;
2203 struct drm_i915_gem_object *obj = intel_fb_obj(fb);
2202 u32 alignment; 2204 u32 alignment;
2203 int ret; 2205 int ret;
2204 2206
@@ -2897,7 +2899,6 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
2897 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 2899 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2898 enum pipe pipe = intel_crtc->pipe; 2900 enum pipe pipe = intel_crtc->pipe;
2899 struct drm_framebuffer *old_fb = crtc->primary->fb; 2901 struct drm_framebuffer *old_fb = crtc->primary->fb;
2900 struct drm_i915_gem_object *obj = intel_fb_obj(fb);
2901 struct drm_i915_gem_object *old_obj = intel_fb_obj(old_fb); 2902 struct drm_i915_gem_object *old_obj = intel_fb_obj(old_fb);
2902 int ret; 2903 int ret;
2903 2904
@@ -2920,9 +2921,9 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
2920 } 2921 }
2921 2922
2922 mutex_lock(&dev->struct_mutex); 2923 mutex_lock(&dev->struct_mutex);
2923 ret = intel_pin_and_fence_fb_obj(dev, obj, NULL); 2924 ret = intel_pin_and_fence_fb_obj(crtc->primary, fb, NULL);
2924 if (ret == 0) 2925 if (ret == 0)
2925 i915_gem_track_fb(old_obj, obj, 2926 i915_gem_track_fb(old_obj, intel_fb_obj(fb),
2926 INTEL_FRONTBUFFER_PRIMARY(pipe)); 2927 INTEL_FRONTBUFFER_PRIMARY(pipe));
2927 mutex_unlock(&dev->struct_mutex); 2928 mutex_unlock(&dev->struct_mutex);
2928 if (ret != 0) { 2929 if (ret != 0) {
@@ -9689,7 +9690,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
9689 ring = &dev_priv->ring[RCS]; 9690 ring = &dev_priv->ring[RCS];
9690 } 9691 }
9691 9692
9692 ret = intel_pin_and_fence_fb_obj(dev, obj, ring); 9693 ret = intel_pin_and_fence_fb_obj(crtc->primary, fb, ring);
9693 if (ret) 9694 if (ret)
9694 goto cleanup_pending; 9695 goto cleanup_pending;
9695 9696
@@ -10857,9 +10858,7 @@ static int __intel_set_mode(struct drm_crtc *crtc,
10857 struct drm_i915_gem_object *obj = intel_fb_obj(fb); 10858 struct drm_i915_gem_object *obj = intel_fb_obj(fb);
10858 10859
10859 mutex_lock(&dev->struct_mutex); 10860 mutex_lock(&dev->struct_mutex);
10860 ret = intel_pin_and_fence_fb_obj(dev, 10861 ret = intel_pin_and_fence_fb_obj(crtc->primary, fb, NULL);
10861 obj,
10862 NULL);
10863 if (ret != 0) { 10862 if (ret != 0) {
10864 DRM_ERROR("pin & fence failed\n"); 10863 DRM_ERROR("pin & fence failed\n");
10865 mutex_unlock(&dev->struct_mutex); 10864 mutex_unlock(&dev->struct_mutex);
@@ -11525,7 +11524,7 @@ intel_prepare_primary_plane(struct drm_plane *plane,
11525 11524
11526 if (old_obj != obj) { 11525 if (old_obj != obj) {
11527 mutex_lock(&dev->struct_mutex); 11526 mutex_lock(&dev->struct_mutex);
11528 ret = intel_pin_and_fence_fb_obj(dev, obj, NULL); 11527 ret = intel_pin_and_fence_fb_obj(plane, fb, NULL);
11529 if (ret == 0) 11528 if (ret == 0)
11530 i915_gem_track_fb(old_obj, obj, 11529 i915_gem_track_fb(old_obj, obj,
11531 INTEL_FRONTBUFFER_PRIMARY(pipe)); 11530 INTEL_FRONTBUFFER_PRIMARY(pipe));
@@ -13293,7 +13292,9 @@ void intel_modeset_gem_init(struct drm_device *dev)
13293 if (obj == NULL) 13292 if (obj == NULL)
13294 continue; 13293 continue;
13295 13294
13296 if (intel_pin_and_fence_fb_obj(dev, obj, NULL)) { 13295 if (intel_pin_and_fence_fb_obj(c->primary,
13296 c->primary->fb,
13297 NULL)) {
13297 DRM_ERROR("failed to pin boot fb on pipe %d\n", 13298 DRM_ERROR("failed to pin boot fb on pipe %d\n",
13298 to_intel_crtc(c)->pipe); 13299 to_intel_crtc(c)->pipe);
13299 drm_framebuffer_unreference(c->primary->fb); 13300 drm_framebuffer_unreference(c->primary->fb);
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index dc53cfe949af..ae75b9950f01 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -896,8 +896,8 @@ bool intel_get_load_detect_pipe(struct drm_connector *connector,
896 struct drm_modeset_acquire_ctx *ctx); 896 struct drm_modeset_acquire_ctx *ctx);
897void intel_release_load_detect_pipe(struct drm_connector *connector, 897void intel_release_load_detect_pipe(struct drm_connector *connector,
898 struct intel_load_detect_pipe *old); 898 struct intel_load_detect_pipe *old);
899int intel_pin_and_fence_fb_obj(struct drm_device *dev, 899int intel_pin_and_fence_fb_obj(struct drm_plane *plane,
900 struct drm_i915_gem_object *obj, 900 struct drm_framebuffer *fb,
901 struct intel_engine_cs *pipelined); 901 struct intel_engine_cs *pipelined);
902void intel_unpin_fb_obj(struct drm_i915_gem_object *obj); 902void intel_unpin_fb_obj(struct drm_i915_gem_object *obj);
903struct drm_framebuffer * 903struct drm_framebuffer *
diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
index 9b584f3fbb99..f2183b554cbc 100644
--- a/drivers/gpu/drm/i915/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/intel_fbdev.c
@@ -119,25 +119,25 @@ static int intelfb_alloc(struct drm_fb_helper *helper,
119 goto out; 119 goto out;
120 } 120 }
121 121
122 /* Flush everything out, we'll be doing GTT only from now on */
123 ret = intel_pin_and_fence_fb_obj(dev, obj, NULL);
124 if (ret) {
125 DRM_ERROR("failed to pin obj: %d\n", ret);
126 goto out_unref;
127 }
128
129 fb = __intel_framebuffer_create(dev, &mode_cmd, obj); 122 fb = __intel_framebuffer_create(dev, &mode_cmd, obj);
130 if (IS_ERR(fb)) { 123 if (IS_ERR(fb)) {
131 ret = PTR_ERR(fb); 124 ret = PTR_ERR(fb);
132 goto out_unpin; 125 goto out_unref;
126 }
127
128 /* Flush everything out, we'll be doing GTT only from now on */
129 ret = intel_pin_and_fence_fb_obj(NULL, fb, NULL);
130 if (ret) {
131 DRM_ERROR("failed to pin obj: %d\n", ret);
132 goto out_fb;
133 } 133 }
134 134
135 ifbdev->fb = to_intel_framebuffer(fb); 135 ifbdev->fb = to_intel_framebuffer(fb);
136 136
137 return 0; 137 return 0;
138 138
139out_unpin: 139out_fb:
140 i915_gem_object_ggtt_unpin(obj); 140 drm_framebuffer_remove(fb);
141out_unref: 141out_unref:
142 drm_gem_object_unreference(&obj->base); 142 drm_gem_object_unreference(&obj->base);
143out: 143out:
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index bf1eb158e624..8c70c54e048d 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -1256,7 +1256,7 @@ intel_prepare_sprite_plane(struct drm_plane *plane,
1256 * the sprite planes only require 128KiB alignment and 32 PTE 1256 * the sprite planes only require 128KiB alignment and 32 PTE
1257 * padding. 1257 * padding.
1258 */ 1258 */
1259 ret = intel_pin_and_fence_fb_obj(dev, obj, NULL); 1259 ret = intel_pin_and_fence_fb_obj(plane, fb, NULL);
1260 if (ret == 0) 1260 if (ret == 0)
1261 i915_gem_track_fb(old_obj, obj, 1261 i915_gem_track_fb(old_obj, obj,
1262 INTEL_FRONTBUFFER_SPRITE(pipe)); 1262 INTEL_FRONTBUFFER_SPRITE(pipe));