drm/i915: don't use the first stolen page on Broadwell
[deliverable/linux.git] / drivers / gpu / drm / i915 / i915_gem_stolen.c
index 15207796e1b364487a0ce26d79d06b9a4fbf9dc5..69eebc678f015ae4e30bf1f372fb48d94d29ecb2 100644 (file)
@@ -51,6 +51,11 @@ int i915_gem_stolen_insert_node_in_range(struct drm_i915_private *dev_priv,
        if (!drm_mm_initialized(&dev_priv->mm.stolen))
                return -ENODEV;
 
+       /* See the comment at the drm_mm_init() call for more about this check.
+        * WaSkipStolenMemoryFirstPage:bdw,chv (incomplete) */
+       if (INTEL_INFO(dev_priv)->gen == 8 && start < 4096)
+               start = 4096;
+
        mutex_lock(&dev_priv->mm.stolen_lock);
        ret = drm_mm_insert_node_in_range(&dev_priv->mm.stolen, node, size,
                                          alignment, start, end,
@@ -393,7 +398,17 @@ int i915_gem_init_stolen(struct drm_device *dev)
        dev_priv->gtt.stolen_usable_size = dev_priv->gtt.stolen_size -
                                           reserved_total;
 
-       /* Basic memrange allocator for stolen space */
+       /*
+        * Basic memrange allocator for stolen space.
+        *
+        * TODO: Notice that some platforms require us to not use the first page
+        * of the stolen memory but their BIOSes may still put the framebuffer
+        * on the first page. So we don't reserve this page for now because of
+        * that. Our current solution is to just prevent new nodes from being
+        * inserted on the first page - see the check we have at
+        * i915_gem_stolen_insert_node_in_range(). We may want to fix the fbcon
+        * problem later.
+        */
        drm_mm_init(&dev_priv->mm.stolen, 0, dev_priv->gtt.stolen_usable_size);
 
        return 0;
This page took 0.050915 seconds and 5 git commands to generate.