From 126c735d3015f515bde9f26d10b4e34d6e194e36 Mon Sep 17 00:00:00 2001 From: Alex Waterman Date: Mon, 10 Apr 2017 13:51:43 -0700 Subject: gpu: nvgpu: Move and rename gk20a_sgtable* Move and rename the functions that build sgtables for nvgpu_mems into the Linux specific DMA code. One place outside of the Linux code do include the Linux DMA header. That will be fixed in a subsequent patch. JIRA NVGPU-12 JIRA NVGPU-30 Change-Id: Ie43c752b8f998f122af70f7c7eb727af0b0d98df Signed-off-by: Alex Waterman Reviewed-on: http://git-master/r/1464078 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 73 ++------------------------------------ 1 file changed, 3 insertions(+), 70 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 69e00c5e..79aa44a5 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -38,6 +38,8 @@ #include #include +#include + #include "gk20a.h" #include "mm_gk20a.h" #include "fence_gk20a.h" @@ -2621,7 +2623,7 @@ static void gk20a_vidmem_clear_mem_worker(struct work_struct *work) gk20a_gmmu_clear_vidmem_mem(g, mem); nvgpu_free(mem->allocator, (u64)get_vidmem_page_alloc(mem->priv.sgt->sgl)); - gk20a_free_sgtable(g, &mem->priv.sgt); + nvgpu_free_sgtable(g, &mem->priv.sgt); WARN_ON(atomic64_sub_return(mem->size, &g->mm.vidmem.bytes_pending) < 0); @@ -2668,75 +2670,6 @@ void gk20a_gmmu_unmap(struct vm_gk20a *vm, nvgpu_mutex_release(&vm->update_gmmu_lock); } -/* get sg_table from already allocated buffer */ -int gk20a_get_sgtable(struct device *d, struct sg_table **sgt, - void *cpuva, u64 iova, - size_t size) -{ - struct gk20a *g = get_gk20a(d); - - int err = 0; - *sgt = nvgpu_kzalloc(g, sizeof(struct sg_table)); - if (!(*sgt)) { - nvgpu_err(g, "failed to allocate memory\n"); - err = -ENOMEM; - goto fail; - } - err = dma_get_sgtable(d, *sgt, - cpuva, iova, - size); - if (err) { - nvgpu_err(g, "failed to create sg table\n"); - goto fail; - } - sg_dma_address((*sgt)->sgl) = iova; - - return 0; - fail: - if (*sgt) { - nvgpu_kfree(g, *sgt); - *sgt = NULL; - } - return err; -} - -int gk20a_get_sgtable_from_pages(struct device *d, struct sg_table **sgt, - struct page **pages, u64 iova, - size_t size) -{ - int err = 0; - struct gk20a *g = get_gk20a(d); - - *sgt = nvgpu_kzalloc(g, sizeof(struct sg_table)); - if (!(*sgt)) { - nvgpu_err(g, "failed to allocate memory\n"); - err = -ENOMEM; - goto fail; - } - err = sg_alloc_table_from_pages(*sgt, pages, - DIV_ROUND_UP(size, PAGE_SIZE), 0, size, GFP_KERNEL); - if (err) { - nvgpu_err(g, "failed to allocate sg_table\n"); - goto fail; - } - sg_dma_address((*sgt)->sgl) = iova; - - return 0; - fail: - if (*sgt) { - nvgpu_kfree(get_gk20a(d), *sgt); - *sgt = NULL; - } - return err; -} - -void gk20a_free_sgtable(struct gk20a *g, struct sg_table **sgt) -{ - sg_free_table(*sgt); - nvgpu_kfree(g, *sgt); - *sgt = NULL; -} - u64 gk20a_mm_smmu_vaddr_translate(struct gk20a *g, dma_addr_t iova) { /* ensure it is not vidmem allocation */ -- cgit v1.2.2