Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 345534
b: refs/heads/master
c: 465ed66
h: refs/heads/master
v: v3
  • Loading branch information
Prathyush K authored and Inki Dae committed Dec 5, 2012
1 parent 6f83ca6 commit 2ae0d3d
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 53 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: dd265850f10a16e4525ed002f0173a1acd8c8876
refs/heads/master: 465ed6606018b56d55219b6c58a7b98793d8cbcc
20 changes: 0 additions & 20 deletions trunk/drivers/gpu/drm/exynos/exynos_drm_buf.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ static int lowlevel_buffer_allocate(struct drm_device *dev,
unsigned int flags, struct exynos_drm_gem_buf *buf)
{
int ret = 0;
unsigned int npages, i = 0;
struct scatterlist *sgl;
enum dma_attr attr = DMA_ATTR_FORCE_CONTIGUOUS;

DRM_DEBUG_KMS("%s\n", __FILE__);
Expand Down Expand Up @@ -73,31 +71,13 @@ static int lowlevel_buffer_allocate(struct drm_device *dev,
goto err_free_sgt;
}

npages = buf->sgt->nents;

buf->pages = kzalloc(sizeof(struct page) * npages, GFP_KERNEL);
if (!buf->pages) {
DRM_ERROR("failed to allocate pages.\n");
ret = -ENOMEM;
goto err_free_table;
}

sgl = buf->sgt->sgl;
while (i < npages) {
buf->pages[i] = sg_page(sgl);
sgl = sg_next(sgl);
i++;
}

DRM_DEBUG_KMS("vaddr(0x%lx), dma_addr(0x%lx), size(0x%lx)\n",
(unsigned long)buf->kvaddr,
(unsigned long)buf->dma_addr,
buf->size);

return ret;

err_free_table:
sg_free_table(buf->sgt);
err_free_sgt:
kfree(buf->sgt);
buf->sgt = NULL;
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/gpu/drm/exynos/exynos_drm_buf.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ struct exynos_drm_gem_buf *exynos_drm_init_buf(struct drm_device *dev,
void exynos_drm_fini_buf(struct drm_device *dev,
struct exynos_drm_gem_buf *buffer);

/* allocate physical memory region and setup sgt and pages. */
/* allocate physical memory region and setup sgt. */
int exynos_drm_alloc_buf(struct drm_device *dev,
struct exynos_drm_gem_buf *buf,
unsigned int flags);

/* release physical memory region, sgt and pages. */
/* release physical memory region, and sgt. */
void exynos_drm_free_buf(struct drm_device *dev,
unsigned int flags,
struct exynos_drm_gem_buf *buffer);
Expand Down
3 changes: 1 addition & 2 deletions trunk/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,7 @@ static struct sg_table *
goto err_unlock;
}

DRM_DEBUG_PRIME("buffer size = 0x%lx page_size = 0x%lx\n",
buf->size, buf->page_size);
DRM_DEBUG_PRIME("buffer size = 0x%lx\n", buf->size);

err_unlock:
mutex_unlock(&dev->struct_mutex);
Expand Down
37 changes: 13 additions & 24 deletions trunk/drivers/gpu/drm/exynos/exynos_drm_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,34 +99,23 @@ static int exynos_drm_gem_map_buf(struct drm_gem_object *obj,
unsigned long pfn;
int i;

if (exynos_gem_obj->flags & EXYNOS_BO_NONCONTIG) {
if (!buf->sgt)
return -EINTR;

sgl = buf->sgt->sgl;
for_each_sg(buf->sgt->sgl, sgl, buf->sgt->nents, i) {
if (!sgl) {
DRM_ERROR("invalid SG table\n");
return -EINTR;
}
if (page_offset < (sgl->length >> PAGE_SHIFT))
break;
page_offset -= (sgl->length >> PAGE_SHIFT);
}

if (i >= buf->sgt->nents) {
DRM_ERROR("invalid page offset\n");
return -EINVAL;
}
if (!buf->sgt)
return -EINTR;

pfn = __phys_to_pfn(sg_phys(sgl)) + page_offset;
} else {
if (!buf->pages)
return -EINTR;
if (page_offset >= (buf->size >> PAGE_SHIFT)) {
DRM_ERROR("invalid page offset\n");
return -EINVAL;
}

pfn = page_to_pfn(buf->pages[0]) + page_offset;
sgl = buf->sgt->sgl;
for_each_sg(buf->sgt->sgl, sgl, buf->sgt->nents, i) {
if (page_offset < (sgl->length >> PAGE_SHIFT))
break;
page_offset -= (sgl->length >> PAGE_SHIFT);
}

pfn = __phys_to_pfn(sg_phys(sgl)) + page_offset;

return vm_insert_mixed(vma, f_vaddr, pfn);
}

Expand Down
4 changes: 0 additions & 4 deletions trunk/drivers/gpu/drm/exynos/exynos_drm_gem.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@
* device address with IOMMU.
* @write: whether pages will be written to by the caller.
* @sgt: sg table to transfer page data.
* @pages: contain all pages to allocated memory region.
* @page_size: could be 4K, 64K or 1MB.
* @size: size of allocated memory region.
* @pfnmap: indicate whether memory region from userptr is mmaped with
* VM_PFNMAP or not.
Expand All @@ -54,8 +52,6 @@ struct exynos_drm_gem_buf {
struct dma_attrs dma_attrs;
unsigned int write;
struct sg_table *sgt;
struct page **pages;
unsigned long page_size;
unsigned long size;
bool pfnmap;
};
Expand Down

0 comments on commit 2ae0d3d

Please sign in to comment.