From c2c4dbb6513bd938f5009e7b6293782dea37887d Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 22 Aug 2009 17:25:31 +0100 Subject: Zero VRAM before passing to userspace Signed-off-by: Thomas White --- drivers/mfd/glamo/glamo-buffer.c | 4 ++++ drivers/mfd/glamo/glamo-cmdq.c | 18 ++++++++++++++++++ drivers/mfd/glamo/glamo-cmdq.h | 2 ++ 3 files changed, 24 insertions(+) diff --git a/drivers/mfd/glamo/glamo-buffer.c b/drivers/mfd/glamo/glamo-buffer.c index abf867530aa..6529e5f51ac 100644 --- a/drivers/mfd/glamo/glamo-buffer.c +++ b/drivers/mfd/glamo/glamo-buffer.c @@ -50,6 +50,7 @@ #include #include "glamo-drm-private.h" +#include "glamo-cmdq.h" /* For glamo_cmdq_blank() */ struct drm_gem_object *glamo_gem_object_alloc(struct drm_device *dev, int size, @@ -79,6 +80,9 @@ struct drm_gem_object *glamo_gem_object_alloc(struct drm_device *dev, int size, goto fail; } + /* Arrange for the contents to be set to zero */ + glamo_cmdq_blank(gdrm, obj); + return obj; fail: diff --git a/drivers/mfd/glamo/glamo-cmdq.c b/drivers/mfd/glamo/glamo-cmdq.c index 6f14244af11..a96adc3cbd2 100644 --- a/drivers/mfd/glamo/glamo-cmdq.c +++ b/drivers/mfd/glamo/glamo-cmdq.c @@ -440,3 +440,21 @@ void glamo_cmdq_resume(struct glamodrm_handle *gdrm) { glamo_cmdq_init(gdrm); } + + +/* Initialise an object's contents to zero. + * This is in glamo-cmdq.c in the hope that we can accelerate it later. */ +void glamo_cmdq_blank(struct glamodrm_handle *gdrm, struct drm_gem_object *obj) +{ + char __iomem *cookie; + struct drm_glamo_gem_object *gobj; + int i; + + gobj = obj->driver_private; + + cookie = ioremap(gdrm->vram->start + gobj->block->start, obj->size); + for ( i=0; isize; i+=2 ) { + iowrite16(0, cookie+i); + } + iounmap(cookie); +} diff --git a/drivers/mfd/glamo/glamo-cmdq.h b/drivers/mfd/glamo/glamo-cmdq.h index 8a518288eb4..4c003c61181 100644 --- a/drivers/mfd/glamo/glamo-cmdq.h +++ b/drivers/mfd/glamo/glamo-cmdq.h @@ -35,6 +35,8 @@ extern int glamo_ioctl_cmdbuf(struct drm_device *dev, void *data, struct drm_file *file_priv); extern int glamo_ioctl_gem_wait_rendering(struct drm_device *dev, void *data, struct drm_file *file_priv); +extern void glamo_cmdq_blank(struct glamodrm_handle *gdrm, + struct drm_gem_object *obj); extern int glamo_cmdq_init(struct glamodrm_handle *gdrm); extern int glamo_cmdq_shutdown(struct glamodrm_handle *gdrm); -- cgit v1.2.3