]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/panfrost: Align GEM objects GPU VA to 2MB
authorRob Herring <robh@kernel.org>
Mon, 10 Jun 2019 16:58:06 +0000 (10:58 -0600)
committerRob Herring <robh@kernel.org>
Fri, 14 Jun 2019 15:15:14 +0000 (09:15 -0600)
In order to increase the chances of using 2MB pages, we need to align the
GPU VA mapping to 2MB. Only do this if the object size is 2MB or more.

Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Steven Price <steven.price@arm.com>
Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Signed-off-by: Rob Herring <robh@kernel.org>
Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190610165806.24854-1-robh@kernel.org
drivers/gpu/drm/panfrost/panfrost_gem.c

index a5528a360ef4f9ccef03dd5ebe6365594d59fd01..886875ae31d3253d4c93be5a41ce4d26cb10923f 100644 (file)
@@ -52,6 +52,7 @@ struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, size_t
        int ret;
        struct panfrost_device *pfdev = dev->dev_private;
        struct panfrost_gem_object *obj;
+       u64 align;
 
        obj = kzalloc(sizeof(*obj), GFP_KERNEL);
        if (!obj)
@@ -59,9 +60,12 @@ struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, size_t
 
        obj->base.base.funcs = &panfrost_gem_funcs;
 
+       size = roundup(size, PAGE_SIZE);
+       align = size >= SZ_2M ? SZ_2M >> PAGE_SHIFT : 0;
+
        spin_lock(&pfdev->mm_lock);
-       ret = drm_mm_insert_node(&pfdev->mm, &obj->node,
-                                roundup(size, PAGE_SIZE) >> PAGE_SHIFT);
+       ret = drm_mm_insert_node_generic(&pfdev->mm, &obj->node,
+                                        size >> PAGE_SHIFT, align, 0, 0);
        spin_unlock(&pfdev->mm_lock);
        if (ret)
                goto free_obj;