drm: remove optional dummy function from drivers using TTM
[linux-2.6-microblaze.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_ttm.c
index 9cbecd5..9c0f12f 100644 (file)
@@ -91,7 +91,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
        case TTM_PL_TT:
                /* GTT memory  */
                man->func = &amdgpu_gtt_mgr_func;
-               man->gpu_offset = adev->gmc.gart_start;
                man->available_caching = TTM_PL_MASK_CACHING;
                man->default_caching = TTM_PL_FLAG_CACHED;
                man->flags = TTM_MEMTYPE_FLAG_MAPPABLE | TTM_MEMTYPE_FLAG_CMA;
@@ -99,7 +98,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
        case TTM_PL_VRAM:
                /* "On-card" video ram */
                man->func = &amdgpu_vram_mgr_func;
-               man->gpu_offset = adev->gmc.vram_start;
                man->flags = TTM_MEMTYPE_FLAG_FIXED |
                             TTM_MEMTYPE_FLAG_MAPPABLE;
                man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
@@ -110,7 +108,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
        case AMDGPU_PL_OA:
                /* On-chip GDS memory*/
                man->func = &ttm_bo_manager_func;
-               man->gpu_offset = 0;
                man->flags = TTM_MEMTYPE_FLAG_FIXED | TTM_MEMTYPE_FLAG_CMA;
                man->available_caching = TTM_PL_FLAG_UNCACHED;
                man->default_caching = TTM_PL_FLAG_UNCACHED;
@@ -258,7 +255,8 @@ static uint64_t amdgpu_mm_node_addr(struct ttm_buffer_object *bo,
 
        if (mm_node->start != AMDGPU_BO_INVALID_OFFSET) {
                addr = mm_node->start << PAGE_SHIFT;
-               addr += bo->bdev->man[mem->mem_type].gpu_offset;
+               addr += amdgpu_ttm_domain_start(amdgpu_ttm_adev(bo->bdev),
+                                               mem->mem_type);
        }
        return addr;
 }
@@ -431,12 +429,22 @@ int amdgpu_ttm_copy_mem_to_mem(struct amdgpu_device *adev,
        }
 
        src_offset = src->offset;
-       src_mm = amdgpu_find_mm_node(src->mem, &src_offset);
-       src_node_size = (src_mm->size << PAGE_SHIFT) - src_offset;
+       if (src->mem->mm_node) {
+               src_mm = amdgpu_find_mm_node(src->mem, &src_offset);
+               src_node_size = (src_mm->size << PAGE_SHIFT) - src_offset;
+       } else {
+               src_mm = NULL;
+               src_node_size = ULLONG_MAX;
+       }
 
        dst_offset = dst->offset;
-       dst_mm = amdgpu_find_mm_node(dst->mem, &dst_offset);
-       dst_node_size = (dst_mm->size << PAGE_SHIFT) - dst_offset;
+       if (dst->mem->mm_node) {
+               dst_mm = amdgpu_find_mm_node(dst->mem, &dst_offset);
+               dst_node_size = (dst_mm->size << PAGE_SHIFT) - dst_offset;
+       } else {
+               dst_mm = NULL;
+               dst_node_size = ULLONG_MAX;
+       }
 
        mutex_lock(&adev->mman.gtt_window_lock);
 
@@ -828,10 +836,6 @@ static int amdgpu_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_
        return 0;
 }
 
-static void amdgpu_ttm_io_mem_free(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
-{
-}
-
 static unsigned long amdgpu_ttm_io_mem_pfn(struct ttm_buffer_object *bo,
                                           unsigned long page_offset)
 {
@@ -843,6 +847,27 @@ static unsigned long amdgpu_ttm_io_mem_pfn(struct ttm_buffer_object *bo,
                (offset >> PAGE_SHIFT);
 }
 
+/**
+ * amdgpu_ttm_domain_start - Returns GPU start address
+ * @adev: amdgpu device object
+ * @type: type of the memory
+ *
+ * Returns:
+ * GPU start address of a memory domain
+ */
+
+uint64_t amdgpu_ttm_domain_start(struct amdgpu_device *adev, uint32_t type)
+{
+       switch (type) {
+       case TTM_PL_TT:
+               return adev->gmc.gart_start;
+       case TTM_PL_VRAM:
+               return adev->gmc.vram_start;
+       }
+
+       return 0;
+}
+
 /*
  * TTM backend functions.
  */
@@ -910,7 +935,7 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages)
                goto out_free_ranges;
        }
 
-       down_read(&mm->mmap_sem);
+       mmap_read_lock(mm);
        vma = find_vma(mm, start);
        if (unlikely(!vma || start < vma->vm_start)) {
                r = -EFAULT;
@@ -921,15 +946,15 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages)
                r = -EPERM;
                goto out_unlock;
        }
-       up_read(&mm->mmap_sem);
+       mmap_read_unlock(mm);
        timeout = jiffies + msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT);
 
 retry:
        range->notifier_seq = mmu_interval_read_begin(&bo->notifier);
 
-       down_read(&mm->mmap_sem);
+       mmap_read_lock(mm);
        r = hmm_range_fault(range);
-       up_read(&mm->mmap_sem);
+       mmap_read_unlock(mm);
        if (unlikely(r)) {
                /*
                 * FIXME: This timeout should encompass the retry from
@@ -954,7 +979,7 @@ retry:
        return 0;
 
 out_unlock:
-       up_read(&mm->mmap_sem);
+       mmap_read_unlock(mm);
 out_free_pfns:
        kvfree(range->hmm_pfns);
 out_free_ranges:
@@ -1024,7 +1049,6 @@ static int amdgpu_ttm_tt_pin_userptr(struct ttm_tt *ttm)
 {
        struct amdgpu_device *adev = amdgpu_ttm_adev(ttm->bdev);
        struct amdgpu_ttm_tt *gtt = (void *)ttm;
-       unsigned nents;
        int r;
 
        int write = !(gtt->userflags & AMDGPU_GEM_USERPTR_READONLY);
@@ -1039,9 +1063,8 @@ static int amdgpu_ttm_tt_pin_userptr(struct ttm_tt *ttm)
                goto release_sg;
 
        /* Map SG to device */
-       r = -ENOMEM;
-       nents = dma_map_sg(adev->dev, ttm->sg->sgl, ttm->sg->nents, direction);
-       if (nents == 0)
+       r = dma_map_sgtable(adev->dev, ttm->sg, direction, 0);
+       if (r)
                goto release_sg;
 
        /* convert SG to linear array of pages and dma addresses */
@@ -1072,8 +1095,7 @@ static void amdgpu_ttm_tt_unpin_userptr(struct ttm_tt *ttm)
                return;
 
        /* unmap the pages mapped to the device */
-       dma_unmap_sg(adev->dev, ttm->sg->sgl, ttm->sg->nents, direction);
-
+       dma_unmap_sgtable(adev->dev, ttm->sg, direction, 0);
        sg_free_table(ttm->sg);
 
 #if IS_ENABLED(CONFIG_DRM_AMDGPU_USERPTR)
@@ -1239,9 +1261,6 @@ int amdgpu_ttm_alloc_gart(struct ttm_buffer_object *bo)
                bo->mem = tmp;
        }
 
-       bo->offset = (bo->mem.start << PAGE_SHIFT) +
-               bo->bdev->man[bo->mem.mem_type].gpu_offset;
-
        return 0;
 }
 
@@ -1731,7 +1750,6 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
        .release_notify = &amdgpu_bo_release_notify,
        .fault_reserve_notify = &amdgpu_bo_fault_reserve_notify,
        .io_mem_reserve = &amdgpu_ttm_io_mem_reserve,
-       .io_mem_free = &amdgpu_ttm_io_mem_free,
        .io_mem_pfn = amdgpu_ttm_io_mem_pfn,
        .access_memory = &amdgpu_ttm_access_memory,
        .del_from_lru_notify = &amdgpu_vm_del_from_lru_notify