aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h2
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c14
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c28
3 files changed, 33 insertions, 11 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index b6b5d08c995..b3bfab93e14 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1143,6 +1143,8 @@ void i915_gem_release(struct drm_device * dev, struct drm_file *file_priv);
1143 1143
1144/* i915_gem_gtt.c */ 1144/* i915_gem_gtt.c */
1145void i915_gem_restore_gtt_mappings(struct drm_device *dev); 1145void i915_gem_restore_gtt_mappings(struct drm_device *dev);
1146int i915_gem_gtt_bind_object(struct drm_gem_object *obj);
1147void i915_gem_gtt_unbind_object(struct drm_gem_object *obj);
1146 1148
1147/* i915_gem_evict.c */ 1149/* i915_gem_evict.c */
1148int i915_gem_evict_something(struct drm_device *dev, int min_size, 1150int i915_gem_evict_something(struct drm_device *dev, int min_size,
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 07e1b25f4a8..3cac366b305 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2288,8 +2288,7 @@ i915_gem_object_unbind(struct drm_gem_object *obj)
2288 if (obj_priv->fence_reg != I915_FENCE_REG_NONE) 2288 if (obj_priv->fence_reg != I915_FENCE_REG_NONE)
2289 i915_gem_clear_fence_reg(obj); 2289 i915_gem_clear_fence_reg(obj);
2290 2290
2291 drm_unbind_agp(obj_priv->agp_mem); 2291 i915_gem_gtt_unbind_object(obj);
2292 drm_free_agp(obj_priv->agp_mem, obj->size / PAGE_SIZE);
2293 2292
2294 i915_gem_object_put_pages_gtt(obj); 2293 i915_gem_object_put_pages_gtt(obj);
2295 2294
@@ -2808,15 +2807,8 @@ i915_gem_object_bind_to_gtt(struct drm_gem_object *obj,
2808 return ret; 2807 return ret;
2809 } 2808 }
2810 2809
2811 /* Create an AGP memory structure pointing at our pages, and bind it 2810 ret = i915_gem_gtt_bind_object(obj);
2812 * into the GTT. 2811 if (ret) {
2813 */
2814 obj_priv->agp_mem = drm_agp_bind_pages(dev,
2815 obj_priv->pages,
2816 obj->size >> PAGE_SHIFT,
2817 obj_priv->gtt_space->start,
2818 obj_priv->agp_type);
2819 if (obj_priv->agp_mem == NULL) {
2820 i915_gem_object_put_pages_gtt(obj); 2812 i915_gem_object_put_pages_gtt(obj);
2821 drm_mm_put_block(obj_priv->gtt_space); 2813 drm_mm_put_block(obj_priv->gtt_space);
2822 obj_priv->gtt_space = NULL; 2814 obj_priv->gtt_space = NULL;
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 5f21d0a962c..f78c15f9e7f 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -47,3 +47,31 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
47 /* Be paranoid and flush the chipset cache. */ 47 /* Be paranoid and flush the chipset cache. */
48 intel_gtt_chipset_flush(); 48 intel_gtt_chipset_flush();
49} 49}
50
51int i915_gem_gtt_bind_object(struct drm_gem_object *obj)
52{
53 struct drm_device *dev = obj->dev;
54 struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
55
56 /* Create an AGP memory structure pointing at our pages, and bind it
57 * into the GTT.
58 */
59 obj_priv->agp_mem = drm_agp_bind_pages(dev,
60 obj_priv->pages,
61 obj->size >> PAGE_SHIFT,
62 obj_priv->gtt_space->start,
63 obj_priv->agp_type);
64
65 if (obj_priv->agp_mem)
66 return 0;
67 else
68 return -ENOMEM;
69}
70
71void i915_gem_gtt_unbind_object(struct drm_gem_object *obj)
72{
73 struct drm_i915_gem_object *obj_priv = to_intel_bo(obj);
74
75 drm_unbind_agp(obj_priv->agp_mem);
76 drm_free_agp(obj_priv->agp_mem, obj->size / PAGE_SIZE);
77}