aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/linux/linux-openmoko-2.6.34/0005-Fix-dynamic-command-queue-allocation.patch
blob: 0351f50ec101f5ce607f06f4f617a4e5403b135c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
From 2114f9008abe39b8ed914f650d50775e39f53cca 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 5/8] Fix dynamic command queue allocation

(Not tested...)

Signed-off-by: Thomas White <taw@bitwiz.org.uk>
---
 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