aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_dmabuf.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
index 1687b72def52..613bf8a5d9b2 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
@@ -25,6 +25,7 @@
25 25
26#include "drmP.h" 26#include "drmP.h"
27#include "drm.h" 27#include "drm.h"
28#include "exynos_drm.h"
28#include "exynos_drm_drv.h" 29#include "exynos_drm_drv.h"
29#include "exynos_drm_gem.h" 30#include "exynos_drm_gem.h"
30 31
@@ -190,7 +191,7 @@ struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev,
190 struct exynos_drm_gem_obj *exynos_gem_obj; 191 struct exynos_drm_gem_obj *exynos_gem_obj;
191 struct exynos_drm_gem_buf *buffer; 192 struct exynos_drm_gem_buf *buffer;
192 struct page *page; 193 struct page *page;
193 int ret, i = 0; 194 int ret;
194 195
195 DRM_DEBUG_PRIME("%s\n", __FILE__); 196 DRM_DEBUG_PRIME("%s\n", __FILE__);
196 197
@@ -240,13 +241,25 @@ struct drm_gem_object *exynos_dmabuf_prime_import(struct drm_device *drm_dev,
240 } 241 }
241 242
242 sgl = sgt->sgl; 243 sgl = sgt->sgl;
243 buffer->dma_addr = sg_dma_address(sgl);
244 244
245 while (i < sgt->nents) { 245 if (sgt->nents == 1) {
246 buffer->pages[i] = sg_page(sgl); 246 buffer->dma_addr = sg_dma_address(sgt->sgl);
247 buffer->size += sg_dma_len(sgl); 247 buffer->size = sg_dma_len(sgt->sgl);
248 sgl = sg_next(sgl); 248
249 i++; 249 /* always physically continuous memory if sgt->nents is 1. */
250 exynos_gem_obj->flags |= EXYNOS_BO_CONTIG;
251 } else {
252 unsigned int i = 0;
253
254 buffer->dma_addr = sg_dma_address(sgl);
255 while (i < sgt->nents) {
256 buffer->pages[i] = sg_page(sgl);
257 buffer->size += sg_dma_len(sgl);
258 sgl = sg_next(sgl);
259 i++;
260 }
261
262 exynos_gem_obj->flags |= EXYNOS_BO_NONCONTIG;
250 } 263 }
251 264
252 exynos_gem_obj->buffer = buffer; 265 exynos_gem_obj->buffer = buffer;