aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorRob Herring <robh@kernel.org>2019-06-10 10:58:06 -0600
committerRob Herring <robh@kernel.org>2019-06-14 09:15:14 -0600
commita0e93c41eb75ab05bd07d4bd8027f30d484b3966 (patch)
treebfa33ffbee624ce407edd8b00f7d4f9de14ee0cc
parentdrm: debugfs: make drm_debugfs_create_files() never fail (diff)
downloadwireguard-linux-a0e93c41eb75ab05bd07d4bd8027f30d484b3966.tar.xz
wireguard-linux-a0e93c41eb75ab05bd07d4bd8027f30d484b3966.zip
drm/panfrost: Align GEM objects GPU VA to 2MB
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
-rw-r--r--drivers/gpu/drm/panfrost/panfrost_gem.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panfrost/panfrost_gem.c
index a5528a360ef4..886875ae31d3 100644
--- a/drivers/gpu/drm/panfrost/panfrost_gem.c
+++ b/drivers/gpu/drm/panfrost/panfrost_gem.c
@@ -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;