... and splatter some header comments above the now nicely-extracted
platform support code.

No functional change in here, just code movement.

Signed-off-by: Daniel Vetter <daniel.vet...@ffwll.ch>
---
 drivers/gpu/drm/i915/i915_gem_gtt.c | 243 ++++++++++++++++++------------------
 1 file changed, 124 insertions(+), 119 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 095d902..be374b9 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -67,10 +67,10 @@ static void generic_ggtt_unbind_vma(struct i915_vma *vma)
                             vma->obj->base.size >> PAGE_SHIFT);
 }
 
+/* Gen6+ ppgtt code */
 #define GEN6_PPGTT_PD_ENTRIES 512
 #define I915_PPGTT_PT_ENTRIES (PAGE_SIZE / sizeof(gen6_gtt_pte_t))
 
-/* PPGTT stuff */
 #define GEN6_GTT_ADDR_ENCODE(addr)     ((addr) | (((addr) >> 28) & 0xff0))
 #define HSW_GTT_ADDR_ENCODE(addr)      ((addr) | (((addr) >> 28) & 0x7f0))
 
@@ -431,6 +431,7 @@ err_pt_alloc:
        return ret;
 }
 
+/* PPGTT Setup code. */
 static int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
@@ -459,6 +460,7 @@ static int i915_gem_init_aliasing_ppgtt(struct drm_device 
*dev)
        return ret;
 }
 
+/* Gen6+ global GTT code. */
 static void gen6_ggtt_insert_entries(struct i915_address_space *vm,
                                     struct sg_table *st,
                                     unsigned int first_entry,
@@ -576,124 +578,6 @@ static void gen6_ggtt_unbind_vma(struct i915_vma *vma)
        }
 }
 
-static void i915_gtt_color_adjust(struct drm_mm_node *node,
-                                 unsigned long color,
-                                 unsigned long *start,
-                                 unsigned long *end)
-{
-       if (node->color != color)
-               *start += 4096;
-
-       if (!list_empty(&node->node_list)) {
-               node = list_entry(node->node_list.next,
-                                 struct drm_mm_node,
-                                 node_list);
-               if (node->allocated && node->color != color)
-                       *end -= 4096;
-       }
-}
-void i915_gem_setup_global_gtt(struct drm_device *dev,
-                              unsigned long start,
-                              unsigned long mappable_end,
-                              unsigned long end)
-{
-       /* Let GEM Manage all of the aperture.
-        *
-        * However, leave one page at the end still bound to the scratch page.
-        * There are a number of places where the hardware apparently prefetches
-        * past the end of the object, and we've seen multiple hangs with the
-        * GPU head pointer stuck in a batchbuffer bound at the last page of the
-        * aperture.  One page should be enough to keep any prefetching inside
-        * of the aperture.
-        */
-       struct drm_i915_private *dev_priv = dev->dev_private;
-       struct i915_address_space *ggtt_vm = &dev_priv->gtt.base;
-       struct drm_mm_node *entry;
-       struct drm_i915_gem_object *obj;
-       unsigned long hole_start, hole_end;
-
-       BUG_ON(mappable_end > end);
-
-       /* Subtract the guard page ... */
-       drm_mm_init(&ggtt_vm->mm, start, end - start - PAGE_SIZE);
-       if (!HAS_LLC(dev))
-               dev_priv->gtt.base.mm.color_adjust = i915_gtt_color_adjust;
-
-       /* Mark any preallocated objects as occupied */
-       list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
-               struct i915_vma *vma = i915_gem_obj_to_vma(obj, ggtt_vm);
-               int ret;
-               DRM_DEBUG_KMS("reserving preallocated space: %lx + %zx\n",
-                             i915_gem_obj_ggtt_offset(obj), obj->base.size);
-
-               WARN_ON(i915_gem_obj_ggtt_bound(obj));
-               ret = drm_mm_reserve_node(&ggtt_vm->mm, &vma->node);
-               if (ret)
-                       DRM_DEBUG_KMS("Reservation failed\n");
-               obj->has_global_gtt_mapping = 1;
-               list_add(&vma->vma_link, &obj->vma_list);
-       }
-
-       dev_priv->gtt.base.start = start;
-       dev_priv->gtt.base.total = end - start;
-
-       /* Clear any non-preallocated blocks */
-       drm_mm_for_each_hole(entry, &ggtt_vm->mm, hole_start, hole_end) {
-               const unsigned long count = (hole_end - hole_start) / PAGE_SIZE;
-               DRM_DEBUG_KMS("clearing unused GTT space: [%lx, %lx]\n",
-                             hole_start, hole_end);
-               ggtt_vm->clear_range(ggtt_vm, hole_start / PAGE_SIZE, count);
-       }
-
-       /* And finally clear the reserved guard page */
-       ggtt_vm->clear_range(ggtt_vm, end / PAGE_SIZE - 1, 1);
-}
-
-static bool
-intel_enable_ppgtt(struct drm_device *dev)
-{
-       if (i915_enable_ppgtt >= 0)
-               return i915_enable_ppgtt;
-
-#ifdef CONFIG_INTEL_IOMMU
-       /* Disable ppgtt on SNB if VT-d is on. */
-       if (INTEL_INFO(dev)->gen == 6 && intel_iommu_gfx_mapped)
-               return false;
-#endif
-
-       return true;
-}
-
-void i915_gem_init_global_gtt(struct drm_device *dev)
-{
-       struct drm_i915_private *dev_priv = dev->dev_private;
-       unsigned long gtt_size, mappable_size;
-
-       gtt_size = dev_priv->gtt.base.total;
-       mappable_size = dev_priv->gtt.mappable_end;
-
-       if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
-               int ret;
-
-               if (INTEL_INFO(dev)->gen <= 7) {
-                       /* PPGTT pdes are stolen from global gtt ptes, so 
shrink the
-                        * aperture accordingly when using aliasing ppgtt. */
-                       gtt_size -= GEN6_PPGTT_PD_ENTRIES * PAGE_SIZE;
-               }
-
-               i915_gem_setup_global_gtt(dev, 0, mappable_size, gtt_size);
-
-               ret = i915_gem_init_aliasing_ppgtt(dev);
-               if (!ret)
-                       return;
-
-               DRM_ERROR("Aliased PPGTT setup failed %d\n", ret);
-               drm_mm_takedown(&dev_priv->gtt.base.mm);
-               gtt_size += GEN6_PPGTT_PD_ENTRIES * PAGE_SIZE;
-       }
-       i915_gem_setup_global_gtt(dev, 0, mappable_size, gtt_size);
-}
-
 static int setup_scratch_page(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
@@ -884,6 +768,127 @@ static void i915_gmch_remove(struct i915_address_space 
*vm)
        intel_gmch_remove();
 }
 
+/* Global GTT setup functions */
+static void i915_gtt_color_adjust(struct drm_mm_node *node,
+                                 unsigned long color,
+                                 unsigned long *start,
+                                 unsigned long *end)
+{
+       if (node->color != color)
+               *start += 4096;
+
+       if (!list_empty(&node->node_list)) {
+               node = list_entry(node->node_list.next,
+                                 struct drm_mm_node,
+                                 node_list);
+               if (node->allocated && node->color != color)
+                       *end -= 4096;
+       }
+}
+
+/* Also called in UMS mode through the gem_init ioctl. */
+void i915_gem_setup_global_gtt(struct drm_device *dev,
+                              unsigned long start,
+                              unsigned long mappable_end,
+                              unsigned long end)
+{
+       /* Let GEM Manage all of the aperture.
+        *
+        * However, leave one page at the end still bound to the scratch page.
+        * There are a number of places where the hardware apparently prefetches
+        * past the end of the object, and we've seen multiple hangs with the
+        * GPU head pointer stuck in a batchbuffer bound at the last page of the
+        * aperture.  One page should be enough to keep any prefetching inside
+        * of the aperture.
+        */
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       struct i915_address_space *ggtt_vm = &dev_priv->gtt.base;
+       struct drm_mm_node *entry;
+       struct drm_i915_gem_object *obj;
+       unsigned long hole_start, hole_end;
+
+       BUG_ON(mappable_end > end);
+
+       /* Subtract the guard page ... */
+       drm_mm_init(&ggtt_vm->mm, start, end - start - PAGE_SIZE);
+       if (!HAS_LLC(dev))
+               dev_priv->gtt.base.mm.color_adjust = i915_gtt_color_adjust;
+
+       /* Mark any preallocated objects as occupied */
+       list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
+               struct i915_vma *vma = i915_gem_obj_to_vma(obj, ggtt_vm);
+               int ret;
+               DRM_DEBUG_KMS("reserving preallocated space: %lx + %zx\n",
+                             i915_gem_obj_ggtt_offset(obj), obj->base.size);
+
+               WARN_ON(i915_gem_obj_ggtt_bound(obj));
+               ret = drm_mm_reserve_node(&ggtt_vm->mm, &vma->node);
+               if (ret)
+                       DRM_DEBUG_KMS("Reservation failed\n");
+               obj->has_global_gtt_mapping = 1;
+               list_add(&vma->vma_link, &obj->vma_list);
+       }
+
+       dev_priv->gtt.base.start = start;
+       dev_priv->gtt.base.total = end - start;
+
+       /* Clear any non-preallocated blocks */
+       drm_mm_for_each_hole(entry, &ggtt_vm->mm, hole_start, hole_end) {
+               const unsigned long count = (hole_end - hole_start) / PAGE_SIZE;
+               DRM_DEBUG_KMS("clearing unused GTT space: [%lx, %lx]\n",
+                             hole_start, hole_end);
+               ggtt_vm->clear_range(ggtt_vm, hole_start / PAGE_SIZE, count);
+       }
+
+       /* And finally clear the reserved guard page */
+       ggtt_vm->clear_range(ggtt_vm, end / PAGE_SIZE - 1, 1);
+}
+
+static bool
+intel_enable_ppgtt(struct drm_device *dev)
+{
+       if (i915_enable_ppgtt >= 0)
+               return i915_enable_ppgtt;
+
+#ifdef CONFIG_INTEL_IOMMU
+       /* Disable ppgtt on SNB if VT-d is on. */
+       if (INTEL_INFO(dev)->gen == 6 && intel_iommu_gfx_mapped)
+               return false;
+#endif
+
+       return true;
+}
+
+void i915_gem_init_global_gtt(struct drm_device *dev)
+{
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       unsigned long gtt_size, mappable_size;
+
+       gtt_size = dev_priv->gtt.base.total;
+       mappable_size = dev_priv->gtt.mappable_end;
+
+       if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
+               int ret;
+
+               if (INTEL_INFO(dev)->gen <= 7) {
+                       /* PPGTT pdes are stolen from global gtt ptes, so 
shrink the
+                        * aperture accordingly when using aliasing ppgtt. */
+                       gtt_size -= GEN6_PPGTT_PD_ENTRIES * PAGE_SIZE;
+               }
+
+               i915_gem_setup_global_gtt(dev, 0, mappable_size, gtt_size);
+
+               ret = i915_gem_init_aliasing_ppgtt(dev);
+               if (!ret)
+                       return;
+
+               DRM_ERROR("Aliased PPGTT setup failed %d\n", ret);
+               drm_mm_takedown(&dev_priv->gtt.base.mm);
+               gtt_size += GEN6_PPGTT_PD_ENTRIES * PAGE_SIZE;
+       }
+       i915_gem_setup_global_gtt(dev, 0, mappable_size, gtt_size);
+}
+
 int i915_gem_gtt_init(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
-- 
1.8.1.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to