diff options
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_gtt.c | 28 |
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 */ |
1145 | void i915_gem_restore_gtt_mappings(struct drm_device *dev); | 1145 | void i915_gem_restore_gtt_mappings(struct drm_device *dev); |
1146 | int i915_gem_gtt_bind_object(struct drm_gem_object *obj); | ||
1147 | void i915_gem_gtt_unbind_object(struct drm_gem_object *obj); | ||
1146 | 1148 | ||
1147 | /* i915_gem_evict.c */ | 1149 | /* i915_gem_evict.c */ |
1148 | int i915_gem_evict_something(struct drm_device *dev, int min_size, | 1150 | int 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 | |||
51 | int 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 | |||
71 | void 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 | } | ||