diff options
author | Tvrtko Ursulin <tvrtko.ursulin@intel.com> | 2014-10-30 12:39:38 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-11-07 12:41:51 -0500 |
commit | 850c4cdc6c223d02748f20c8ee1b677fb42da1aa (patch) | |
tree | b5c1eb2e503891201ffa81495fc5bd6ffaeafca6 /drivers/gpu/drm | |
parent | 1df06b75f0235c6c4f836e5c03fb499ba70a54bd (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.c | 23 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_fbdev.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_sprite.c | 2 |
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 | ||
2196 | int | 2196 | int |
2197 | intel_pin_and_fence_fb_obj(struct drm_device *dev, | 2197 | intel_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); |
897 | void intel_release_load_detect_pipe(struct drm_connector *connector, | 897 | void intel_release_load_detect_pipe(struct drm_connector *connector, |
898 | struct intel_load_detect_pipe *old); | 898 | struct intel_load_detect_pipe *old); |
899 | int intel_pin_and_fence_fb_obj(struct drm_device *dev, | 899 | int 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); |
902 | void intel_unpin_fb_obj(struct drm_i915_gem_object *obj); | 902 | void intel_unpin_fb_obj(struct drm_i915_gem_object *obj); |
903 | struct drm_framebuffer * | 903 | struct 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 | ||
139 | out_unpin: | 139 | out_fb: |
140 | i915_gem_object_ggtt_unpin(obj); | 140 | drm_framebuffer_remove(fb); |
141 | out_unref: | 141 | out_unref: |
142 | drm_gem_object_unreference(&obj->base); | 142 | drm_gem_object_unreference(&obj->base); |
143 | out: | 143 | out: |
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)); |