From 2114f9008abe39b8ed914f650d50775e39f53cca Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 6 May 2010 05:40:15 -0700 Subject: [PATCH 5/8] Fix dynamic command queue allocation (Not tested...) Signed-off-by: Thomas White --- drivers/gpu/drm/glamo/glamo-cmdq.c | 9 ++++++--- drivers/gpu/drm/glamo/glamo-cmdq.h | 2 +- drivers/gpu/drm/glamo/glamo-drm-drv.c | 17 +++++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/glamo/glamo-cmdq.c b/drivers/gpu/drm/glamo/glamo-cmdq.c index 3ce970e..4b0d55f 100644 --- a/drivers/gpu/drm/glamo/glamo-cmdq.c +++ b/drivers/gpu/drm/glamo/glamo-cmdq.c @@ -497,10 +497,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); @@ -509,9 +510,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); @@ -523,6 +525,7 @@ out: int glamo_cmdq_shutdown(struct glamodrm_handle *gdrm) { + iounmap(gdrm->cmdq_base); return 0; } diff --git a/drivers/gpu/drm/glamo/glamo-cmdq.h b/drivers/gpu/drm/glamo/glamo-cmdq.h index 510d195..6d7f184 100644 --- a/drivers/gpu/drm/glamo/glamo-cmdq.h +++ b/drivers/gpu/drm/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/gpu/drm/glamo/glamo-drm-drv.c b/drivers/gpu/drm/glamo/glamo-drm-drv.c index 224c857..9f74983 100644 --- a/drivers/gpu/drm/glamo/glamo-drm-drv.c +++ b/drivers/gpu/drm/glamo/glamo-drm-drv.c @@ -129,7 +129,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); @@ -238,14 +238,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 */ @@ -317,10 +317,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: @@ -350,9 +346,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