aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/exynos/exynos_drm_buf.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/exynos/exynos_drm_buf.c')
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_buf.c60
1 files changed, 32 insertions, 28 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_buf.c b/drivers/gpu/drm/exynos/exynos_drm_buf.c
index 303189c78cf1..2bb07bca511a 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_buf.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_buf.c
@@ -27,80 +27,84 @@
27#include "drm.h" 27#include "drm.h"
28 28
29#include "exynos_drm_drv.h" 29#include "exynos_drm_drv.h"
30#include "exynos_drm_gem.h"
30#include "exynos_drm_buf.h" 31#include "exynos_drm_buf.h"
31 32
32static int lowlevel_buffer_allocate(struct drm_device *dev, 33static int lowlevel_buffer_allocate(struct drm_device *dev,
33 struct exynos_drm_buf_entry *entry) 34 struct exynos_drm_gem_buf *buffer)
34{ 35{
35 DRM_DEBUG_KMS("%s\n", __FILE__); 36 DRM_DEBUG_KMS("%s\n", __FILE__);
36 37
37 entry->vaddr = dma_alloc_writecombine(dev->dev, entry->size, 38 buffer->kvaddr = dma_alloc_writecombine(dev->dev, buffer->size,
38 (dma_addr_t *)&entry->paddr, GFP_KERNEL); 39 &buffer->dma_addr, GFP_KERNEL);
39 if (!entry->paddr) { 40 if (!buffer->kvaddr) {
40 DRM_ERROR("failed to allocate buffer.\n"); 41 DRM_ERROR("failed to allocate buffer.\n");
41 return -ENOMEM; 42 return -ENOMEM;
42 } 43 }
43 44
44 DRM_DEBUG_KMS("allocated : vaddr(0x%x), paddr(0x%x), size(0x%x)\n", 45 DRM_DEBUG_KMS("vaddr(0x%lx), dma_addr(0x%lx), size(0x%lx)\n",
45 (unsigned int)entry->vaddr, entry->paddr, entry->size); 46 (unsigned long)buffer->kvaddr,
47 (unsigned long)buffer->dma_addr,
48 buffer->size);
46 49
47 return 0; 50 return 0;
48} 51}
49 52
50static void lowlevel_buffer_deallocate(struct drm_device *dev, 53static void lowlevel_buffer_deallocate(struct drm_device *dev,
51 struct exynos_drm_buf_entry *entry) 54 struct exynos_drm_gem_buf *buffer)
52{ 55{
53 DRM_DEBUG_KMS("%s.\n", __FILE__); 56 DRM_DEBUG_KMS("%s.\n", __FILE__);
54 57
55 if (entry->paddr && entry->vaddr && entry->size) 58 if (buffer->dma_addr && buffer->size)
56 dma_free_writecombine(dev->dev, entry->size, entry->vaddr, 59 dma_free_writecombine(dev->dev, buffer->size, buffer->kvaddr,
57 entry->paddr); 60 (dma_addr_t)buffer->dma_addr);
58 else 61 else
59 DRM_DEBUG_KMS("entry data is null.\n"); 62 DRM_DEBUG_KMS("buffer data are invalid.\n");
60} 63}
61 64
62struct exynos_drm_buf_entry *exynos_drm_buf_create(struct drm_device *dev, 65struct exynos_drm_gem_buf *exynos_drm_buf_create(struct drm_device *dev,
63 unsigned int size) 66 unsigned int size)
64{ 67{
65 struct exynos_drm_buf_entry *entry; 68 struct exynos_drm_gem_buf *buffer;
66 69
67 DRM_DEBUG_KMS("%s.\n", __FILE__); 70 DRM_DEBUG_KMS("%s.\n", __FILE__);
71 DRM_DEBUG_KMS("desired size = 0x%x\n", size);
68 72
69 entry = kzalloc(sizeof(*entry), GFP_KERNEL); 73 buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
70 if (!entry) { 74 if (!buffer) {
71 DRM_ERROR("failed to allocate exynos_drm_buf_entry.\n"); 75 DRM_ERROR("failed to allocate exynos_drm_gem_buf.\n");
72 return ERR_PTR(-ENOMEM); 76 return ERR_PTR(-ENOMEM);
73 } 77 }
74 78
75 entry->size = size; 79 buffer->size = size;
76 80
77 /* 81 /*
78 * allocate memory region with size and set the memory information 82 * allocate memory region with size and set the memory information
79 * to vaddr and paddr of a entry object. 83 * to vaddr and dma_addr of a buffer object.
80 */ 84 */
81 if (lowlevel_buffer_allocate(dev, entry) < 0) { 85 if (lowlevel_buffer_allocate(dev, buffer) < 0) {
82 kfree(entry); 86 kfree(buffer);
83 entry = NULL; 87 buffer = NULL;
84 return ERR_PTR(-ENOMEM); 88 return ERR_PTR(-ENOMEM);
85 } 89 }
86 90
87 return entry; 91 return buffer;
88} 92}
89 93
90void exynos_drm_buf_destroy(struct drm_device *dev, 94void exynos_drm_buf_destroy(struct drm_device *dev,
91 struct exynos_drm_buf_entry *entry) 95 struct exynos_drm_gem_buf *buffer)
92{ 96{
93 DRM_DEBUG_KMS("%s.\n", __FILE__); 97 DRM_DEBUG_KMS("%s.\n", __FILE__);
94 98
95 if (!entry) { 99 if (!buffer) {
96 DRM_DEBUG_KMS("entry is null.\n"); 100 DRM_DEBUG_KMS("buffer is null.\n");
97 return; 101 return;
98 } 102 }
99 103
100 lowlevel_buffer_deallocate(dev, entry); 104 lowlevel_buffer_deallocate(dev, buffer);
101 105
102 kfree(entry); 106 kfree(buffer);
103 entry = NULL; 107 buffer = NULL;
104} 108}
105 109
106MODULE_AUTHOR("Inki Dae <inki.dae@samsung.com>"); 110MODULE_AUTHOR("Inki Dae <inki.dae@samsung.com>");