]> git.karo-electronics.de Git - linux-beck.git/commitdiff
drm/i915: allow stolen, pre-allocated objects to avoid GTT allocation v2
authorJesse Barnes <jbarnes@virtuousgeek.org>
Wed, 8 May 2013 17:45:14 +0000 (10:45 -0700)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 10 May 2013 19:56:37 +0000 (21:56 +0200)
In some cases, we may not need GTT address space allocated to a stolen
object, so allow passing -1 to the preallocated function to indicate as
much.

v2: remove BUG_ON(gtt_offset & 4095) now that -1 is allowed (Ville)

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem_stolen.c
drivers/gpu/drm/i915/intel_pm.c

index 913994cd0a3a33060931840c11a14a8801217a28..89cbfab9570e942c2bd3712c28bd536eaa81cd69 100644 (file)
@@ -339,7 +339,6 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
 
        /* KISS and expect everything to be page-aligned */
        BUG_ON(stolen_offset & 4095);
-       BUG_ON(gtt_offset & 4095);
        BUG_ON(size & 4095);
 
        if (WARN_ON(size == 0))
@@ -360,6 +359,10 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev,
                return NULL;
        }
 
+       /* Some objects just need physical mem from stolen space */
+       if (gtt_offset == -1)
+               return obj;
+
        /* To simplify the initialisation sequence between KMS and GTT,
         * we allow construction of the stolen object prior to
         * setting up the GTT space. The actual reservation will occur
index 67294f4cd3a576c2e30847ddef2393423f6fae79..6df886e06b6493c8b5e06ff2d96e188197c2eda0 100644 (file)
@@ -2881,7 +2881,7 @@ static void valleyview_setup_pctx(struct drm_device *dev)
                pcbr_offset = (pcbr & (~4095)) - dev_priv->mm.stolen_base;
                pctx = i915_gem_object_create_stolen_for_preallocated(dev_priv->dev,
                                                                      pcbr_offset,
-                                                                     pcbr_offset,
+                                                                     -1,
                                                                      pctx_size);
                goto out;
        }