diff options
Diffstat (limited to 'recipes/linux/linux-openmoko-2.6.34/0006-Fix-dynamic-command-queue-allocation.patch')
-rw-r--r-- | recipes/linux/linux-openmoko-2.6.34/0006-Fix-dynamic-command-queue-allocation.patch | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/recipes/linux/linux-openmoko-2.6.34/0006-Fix-dynamic-command-queue-allocation.patch b/recipes/linux/linux-openmoko-2.6.34/0006-Fix-dynamic-command-queue-allocation.patch new file mode 100644 index 0000000000..ea570723d4 --- /dev/null +++ b/recipes/linux/linux-openmoko-2.6.34/0006-Fix-dynamic-command-queue-allocation.patch @@ -0,0 +1,131 @@ +From 752dfe99a5e2b361f740f2f986de93f5682b1a8d Mon Sep 17 00:00:00 2001 +From: Thomas White <taw@bitwiz.org.uk> +Date: Thu, 6 May 2010 05:40:15 -0700 +Subject: [PATCH 06/13] Fix dynamic command queue allocation + +(Not tested...) + +Signed-off-by: Thomas White <taw@bitwiz.org.uk> +--- + drivers/mfd/glamo/glamo-cmdq.c | 10 +++++++--- + drivers/mfd/glamo/glamo-cmdq.h | 2 +- + drivers/mfd/glamo/glamo-drm-drv.c | 17 +++++++---------- + 3 files changed, 15 insertions(+), 14 deletions(-) + +diff --git a/drivers/mfd/glamo/glamo-cmdq.c b/drivers/mfd/glamo/glamo-cmdq.c +index 442963c..28c5268 100644 +--- a/drivers/mfd/glamo/glamo-cmdq.c ++++ b/drivers/mfd/glamo/glamo-cmdq.c +@@ -57,6 +57,7 @@ + #include "glamo-core.h" + #include "glamo-drm-private.h" + #include "glamo-regs.h" ++#include "glamo-buffer.h" + + + #define GLAMO_CMDQ_SIZE (128 * 1024) /* 128k ring buffer */ +@@ -495,10 +496,11 @@ int glamo_cmdq_setup(struct glamodrm_handle *gdrm) + } + + +-int glamo_cmdq_init(struct glamodrm_handle *gdrm) ++int glamo_cmdq_init(struct drm_device *dev) + { + struct drm_gem_object *obj; + struct drm_glamo_gem_object *gobj; ++ struct glamodrm_handle *gdrm = dev->dev_private; + int ret = 0; + + obj = glamo_gem_object_alloc(dev, GLAMO_CMDQ_SIZE, 4); +@@ -507,9 +509,10 @@ int glamo_cmdq_init(struct glamodrm_handle *gdrm) + ret = -ENOMEM; + goto out; + } +- gobj = fbo->driver_private; ++ gobj = obj->driver_private; + gdrm->cmdq_offs = GLAMO_OFFSET_FB + gobj->block->start; +- gdrm->cmdq_base = ioremap(gdrm->vram->start + offs, GLAMO_CMDQ_SIZE); ++ gdrm->cmdq_base = ioremap(gdrm->vram->start + gdrm->cmdq_offs, ++ GLAMO_CMDQ_SIZE); + + /* Set up registers */ + glamo_cmdq_setup(gdrm); +@@ -521,6 +524,7 @@ out: + + int glamo_cmdq_shutdown(struct glamodrm_handle *gdrm) + { ++ iounmap(gdrm->cmdq_base); + return 0; + } + +diff --git a/drivers/mfd/glamo/glamo-cmdq.h b/drivers/mfd/glamo/glamo-cmdq.h +index 510d195..6d7f184 100644 +--- a/drivers/mfd/glamo/glamo-cmdq.h ++++ b/drivers/mfd/glamo/glamo-cmdq.h +@@ -38,7 +38,7 @@ extern int glamo_ioctl_cmdburst(struct drm_device *dev, void *data, + 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_init(struct drm_device *de); + extern int glamo_cmdq_shutdown(struct glamodrm_handle *gdrm); + extern void glamo_cmdq_suspend(struct glamodrm_handle *gdrm); + extern void glamo_cmdq_resume(struct glamodrm_handle *gdrm); +diff --git a/drivers/mfd/glamo/glamo-drm-drv.c b/drivers/mfd/glamo/glamo-drm-drv.c +index 774eaff..ee648c1 100644 +--- a/drivers/mfd/glamo/glamo-drm-drv.c ++++ b/drivers/mfd/glamo/glamo-drm-drv.c +@@ -128,7 +128,7 @@ static int glamodrm_load(struct drm_device *dev, unsigned long flags) + gdrm = dev->dev_private; + + glamo_buffer_init(gdrm); +- glamo_cmdq_init(gdrm); ++ glamo_cmdq_init(dev); + glamo_fence_init(gdrm); + glamo_display_init(dev); + +@@ -237,14 +237,14 @@ static int glamodrm_probe(struct platform_device *pdev) + if ( !gdrm->vram ) { + dev_err(&pdev->dev, "Unable to find VRAM.\n"); + rc = -ENOENT; +- goto out_unmap_cmdq; ++ goto out_unmap_regs; + } + gdrm->vram = request_mem_region(gdrm->vram->start, + resource_size(gdrm->vram), pdev->name); + if ( !gdrm->vram ) { + dev_err(&pdev->dev, "failed to request VRAM region\n"); + rc = -ENOENT; +- goto out_unmap_cmdq; ++ goto out_unmap_regs; + } + + /* Find the LCD controller */ +@@ -316,10 +316,6 @@ out_release_lcd: + resource_size(gdrm->lcd_regs)); + out_release_vram: + release_mem_region(gdrm->vram->start, resource_size(gdrm->vram)); +-out_unmap_cmdq: +- iounmap(gdrm->cmdq_base); +-out_release_cmdq: +- release_mem_region(gdrm->cmdq->start, resource_size(gdrm->cmdq)); + out_unmap_regs: + iounmap(gdrm->reg_base); + out_release_regs: +@@ -349,9 +345,10 @@ static int glamodrm_remove(struct platform_device *pdev) + /* Release VRAM */ + release_mem_region(gdrm->vram->start, resource_size(gdrm->vram)); + +- /* Release command queue */ +- iounmap(gdrm->cmdq_base); +- release_mem_region(gdrm->cmdq->start, resource_size(gdrm->cmdq)); ++ /* Release LCD registers */ ++ iounmap(gdrm->lcd_base); ++ release_mem_region(gdrm->lcd_regs->start, ++ resource_size(gdrm->lcd_regs)); + + /* Release 2D engine */ + iounmap(gdrm->twod_base); +-- +1.7.1 + |