aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/gma500
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2012-07-24 11:47:34 -0400
committerDave Airlie <airlied@redhat.com>2012-08-23 19:30:02 -0400
commit4d46259f00c6dd04d53e74cdfa8f8b6ec35c0140 (patch)
tree491a71f72c97cae18a9b0eb5b87424550370514d /drivers/gpu/drm/gma500
parent9a9f5786fcccda3cc61eaa8f537690327eff6853 (diff)
drm: gma500: Kill the GEM glue layer
The private gem_create_mmap_offset() function is now implemented in the DRM core as drm_gem_create_mmap_offset(). Use it and kill the private copy. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/gma500')
-rw-r--r--drivers/gpu/drm/gma500/Makefile2
-rw-r--r--drivers/gpu/drm/gma500/gem.c9
-rw-r--r--drivers/gpu/drm/gma500/gem_glue.c90
-rw-r--r--drivers/gpu/drm/gma500/gem_glue.h2
-rw-r--r--drivers/gpu/drm/gma500/psb_drv.h1
5 files changed, 8 insertions, 96 deletions
diff --git a/drivers/gpu/drm/gma500/Makefile b/drivers/gpu/drm/gma500/Makefile
index 56a0f2ac82c4..7a2d40a5c1e1 100644
--- a/drivers/gpu/drm/gma500/Makefile
+++ b/drivers/gpu/drm/gma500/Makefile
@@ -3,7 +3,7 @@
3# 3#
4ccflags-y += -I$(srctree)/include/drm 4ccflags-y += -I$(srctree)/include/drm
5 5
6gma500_gfx-y += gem_glue.o \ 6gma500_gfx-y += \
7 accel_2d.o \ 7 accel_2d.o \
8 backlight.o \ 8 backlight.o \
9 framebuffer.o \ 9 framebuffer.o \
diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
index fc7d144bc2d3..df20546a2a34 100644
--- a/drivers/gpu/drm/gma500/gem.c
+++ b/drivers/gpu/drm/gma500/gem.c
@@ -36,7 +36,12 @@ int psb_gem_init_object(struct drm_gem_object *obj)
36void psb_gem_free_object(struct drm_gem_object *obj) 36void psb_gem_free_object(struct drm_gem_object *obj)
37{ 37{
38 struct gtt_range *gtt = container_of(obj, struct gtt_range, gem); 38 struct gtt_range *gtt = container_of(obj, struct gtt_range, gem);
39 drm_gem_object_release_wrap(obj); 39
40 /* Remove the list map if one is present */
41 if (obj->map_list.map)
42 drm_gem_free_mmap_offset(obj);
43 drm_gem_object_release(obj);
44
40 /* This must occur last as it frees up the memory of the GEM object */ 45 /* This must occur last as it frees up the memory of the GEM object */
41 psb_gtt_free_range(obj->dev, gtt); 46 psb_gtt_free_range(obj->dev, gtt);
42} 47}
@@ -77,7 +82,7 @@ int psb_gem_dumb_map_gtt(struct drm_file *file, struct drm_device *dev,
77 82
78 /* Make it mmapable */ 83 /* Make it mmapable */
79 if (!obj->map_list.map) { 84 if (!obj->map_list.map) {
80 ret = gem_create_mmap_offset(obj); 85 ret = drm_gem_create_mmap_offset(obj);
81 if (ret) 86 if (ret)
82 goto out; 87 goto out;
83 } 88 }
diff --git a/drivers/gpu/drm/gma500/gem_glue.c b/drivers/gpu/drm/gma500/gem_glue.c
deleted file mode 100644
index 3c17634f6061..000000000000
--- a/drivers/gpu/drm/gma500/gem_glue.c
+++ /dev/null
@@ -1,90 +0,0 @@
1/**************************************************************************
2 * Copyright (c) 2011, Intel Corporation.
3 * All Rights Reserved.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 **************************************************************************/
19
20#include <drm/drmP.h>
21#include <drm/drm.h>
22#include "gem_glue.h"
23
24void drm_gem_object_release_wrap(struct drm_gem_object *obj)
25{
26 /* Remove the list map if one is present */
27 if (obj->map_list.map) {
28 struct drm_gem_mm *mm = obj->dev->mm_private;
29 struct drm_map_list *list = &obj->map_list;
30 drm_ht_remove_item(&mm->offset_hash, &list->hash);
31 drm_mm_put_block(list->file_offset_node);
32 kfree(list->map);
33 list->map = NULL;
34 }
35 drm_gem_object_release(obj);
36}
37
38/**
39 * gem_create_mmap_offset - invent an mmap offset
40 * @obj: our object
41 *
42 * Standard implementation of offset generation for mmap as is
43 * duplicated in several drivers. This belongs in GEM.
44 */
45int gem_create_mmap_offset(struct drm_gem_object *obj)
46{
47 struct drm_device *dev = obj->dev;
48 struct drm_gem_mm *mm = dev->mm_private;
49 struct drm_map_list *list;
50 struct drm_local_map *map;
51 int ret;
52
53 list = &obj->map_list;
54 list->map = kzalloc(sizeof(struct drm_map_list), GFP_KERNEL);
55 if (list->map == NULL)
56 return -ENOMEM;
57 map = list->map;
58 map->type = _DRM_GEM;
59 map->size = obj->size;
60 map->handle = obj;
61
62 list->file_offset_node = drm_mm_search_free(&mm->offset_manager,
63 obj->size / PAGE_SIZE, 0, 0);
64 if (!list->file_offset_node) {
65 dev_err(dev->dev, "failed to allocate offset for bo %d\n",
66 obj->name);
67 ret = -ENOSPC;
68 goto free_it;
69 }
70 list->file_offset_node = drm_mm_get_block(list->file_offset_node,
71 obj->size / PAGE_SIZE, 0);
72 if (!list->file_offset_node) {
73 ret = -ENOMEM;
74 goto free_it;
75 }
76 list->hash.key = list->file_offset_node->start;
77 ret = drm_ht_insert_item(&mm->offset_hash, &list->hash);
78 if (ret) {
79 dev_err(dev->dev, "failed to add to map hash\n");
80 goto free_mm;
81 }
82 return 0;
83
84free_mm:
85 drm_mm_put_block(list->file_offset_node);
86free_it:
87 kfree(list->map);
88 list->map = NULL;
89 return ret;
90}
diff --git a/drivers/gpu/drm/gma500/gem_glue.h b/drivers/gpu/drm/gma500/gem_glue.h
deleted file mode 100644
index ce5ce30f74db..000000000000
--- a/drivers/gpu/drm/gma500/gem_glue.h
+++ /dev/null
@@ -1,2 +0,0 @@
1extern void drm_gem_object_release_wrap(struct drm_gem_object *obj);
2extern int gem_create_mmap_offset(struct drm_gem_object *obj);
diff --git a/drivers/gpu/drm/gma500/psb_drv.h b/drivers/gpu/drm/gma500/psb_drv.h
index 4ab6ae7e92b4..223ff5b1b5c4 100644
--- a/drivers/gpu/drm/gma500/psb_drv.h
+++ b/drivers/gpu/drm/gma500/psb_drv.h
@@ -24,7 +24,6 @@
24 24
25#include <drm/drmP.h> 25#include <drm/drmP.h>
26#include "drm_global.h" 26#include "drm_global.h"
27#include "gem_glue.h"
28#include "gma_drm.h" 27#include "gma_drm.h"
29#include "psb_reg.h" 28#include "psb_reg.h"
30#include "psb_intel_drv.h" 29#include "psb_intel_drv.h"