Commit a0e93c41 authored by Rob Herring's avatar Rob Herring
Browse files

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: default avatarRob Herring <robh@kernel.org>
Reviewed-by: default avatarTomeu Vizoso <tomeu.vizoso@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190610165806.24854-1-robh@kernel.org
parent 987d65d0
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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;