Commit 7d7b7adf authored by Alan Cox's avatar Alan Cox Committed by Greg Kroah-Hartman
Browse files

gma500: allow the creation of 'stolen' memory objects



For things like cursors and many kinds of framebuffer set up we are actually
best using the stolen memory when possible.

Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 7dfe43c5
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -251,6 +251,21 @@ fail:
	}
}

static int psb_gem_create_stolen(struct drm_file *file, struct drm_device *dev,
						int size, u32 *handle)
{
	struct gtt_range *gtt = psb_gtt_alloc_range(dev, size, "gem", 1);
	if (gtt == NULL)
		return -ENOMEM;
	if (drm_gem_private_object_init(dev, &gtt->gem, size) != 0)
		goto free_gtt;
	if (drm_gem_handle_create(file, &gtt->gem, handle) == 0)
		return 0;
free_gtt:
	psb_gtt_free_range(dev, gtt);
	return -ENOMEM;
}

/*
 *	GEM interfaces for our specific client
 */
@@ -258,6 +273,15 @@ int psb_gem_create_ioctl(struct drm_device *dev, void *data,
					struct drm_file *file)
{
	struct drm_psb_gem_create *args = data;
	int ret;
	if (args->flags & PSB_GEM_CREATE_STOLEN) {
		ret = psb_gem_create_stolen(file, dev, args->size,
							&args->handle);
		if (ret == 0)
			return 0;
		/* Fall throguh */
		args->flags &= ~PSB_GEM_CREATE_STOLEN;
	}
	return psb_gem_create(file, dev, args->size, &args->handle);
}

+2 −1
Original line number Diff line number Diff line
@@ -189,7 +189,8 @@ struct psb_drm_dpu_rect {
struct drm_psb_gem_create {
	__u64 size;
	__u32 handle;
	__u32 pad;
	__u32 flags;
#define PSB_GEM_CREATE_STOLEN		1	/* Stolen memory can be used */
};

#define PSB_2D_OP_BUFLEN		16