Lines Matching +full:sg +full:- +full:micro

2  * Copyright 2008 Advanced Micro Devices, Inc.
65 * amdgpu_gart_dummy_page_init - init dummy page used by the driver
72 * Returns 0 on sucess, -ENOMEM on failure.
78 if (adev->dummy_page_addr) in amdgpu_gart_dummy_page_init()
80 adev->dummy_page_addr = dma_map_page(&adev->pdev->dev, dummy_page, 0, in amdgpu_gart_dummy_page_init()
82 if (dma_mapping_error(&adev->pdev->dev, adev->dummy_page_addr)) { in amdgpu_gart_dummy_page_init()
83 dev_err(&adev->pdev->dev, "Failed to DMA MAP the dummy page\n"); in amdgpu_gart_dummy_page_init()
84 adev->dummy_page_addr = 0; in amdgpu_gart_dummy_page_init()
85 return -ENOMEM; in amdgpu_gart_dummy_page_init()
91 * amdgpu_gart_dummy_page_fini - free dummy page used by the driver
99 if (!adev->dummy_page_addr) in amdgpu_gart_dummy_page_fini()
101 dma_unmap_page(&adev->pdev->dev, adev->dummy_page_addr, PAGE_SIZE, in amdgpu_gart_dummy_page_fini()
103 adev->dummy_page_addr = 0; in amdgpu_gart_dummy_page_fini()
107 * amdgpu_gart_table_ram_alloc - allocate system ram for gart page table
117 unsigned int order = get_order(adev->gart.table_size); in amdgpu_gart_table_ram_alloc()
120 struct sg_table *sg = NULL; in amdgpu_gart_table_ram_alloc() local
126 if (adev->gart.bo != NULL) in amdgpu_gart_table_ram_alloc()
131 return -ENOMEM; in amdgpu_gart_table_ram_alloc()
137 dma_addr = dma_map_page(&adev->pdev->dev, p, 0, adev->gart.table_size, in amdgpu_gart_table_ram_alloc()
139 if (dma_mapping_error(&adev->pdev->dev, dma_addr)) { in amdgpu_gart_table_ram_alloc()
140 dev_err(&adev->pdev->dev, "Failed to DMA MAP the GART BO page\n"); in amdgpu_gart_table_ram_alloc()
143 return -EFAULT; in amdgpu_gart_table_ram_alloc()
146 dev_info(adev->dev, "%s dma_addr:%pad\n", __func__, &dma_addr); in amdgpu_gart_table_ram_alloc()
147 /* Create SG table */ in amdgpu_gart_table_ram_alloc()
148 sg = kmalloc(sizeof(*sg), GFP_KERNEL); in amdgpu_gart_table_ram_alloc()
149 if (!sg) { in amdgpu_gart_table_ram_alloc()
150 ret = -ENOMEM; in amdgpu_gart_table_ram_alloc()
153 ret = sg_alloc_table(sg, 1, GFP_KERNEL); in amdgpu_gart_table_ram_alloc()
157 sg_dma_address(sg->sgl) = dma_addr; in amdgpu_gart_table_ram_alloc()
158 sg->sgl->length = adev->gart.table_size; in amdgpu_gart_table_ram_alloc()
160 sg->sgl->dma_length = adev->gart.table_size; in amdgpu_gart_table_ram_alloc()
162 /* Create SG BO */ in amdgpu_gart_table_ram_alloc()
164 bp.size = adev->gart.table_size; in amdgpu_gart_table_ram_alloc()
175 bo->tbo.sg = sg; in amdgpu_gart_table_ram_alloc()
176 bo->tbo.ttm->sg = sg; in amdgpu_gart_table_ram_alloc()
177 bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT; in amdgpu_gart_table_ram_alloc()
178 bo->preferred_domains = AMDGPU_GEM_DOMAIN_GTT; in amdgpu_gart_table_ram_alloc()
182 dev_err(adev->dev, "(%d) failed to reserve bo for GART system bo\n", ret); in amdgpu_gart_table_ram_alloc()
191 adev->gart.bo = bo; in amdgpu_gart_table_ram_alloc()
192 adev->gart.ptr = page_to_virt(p); in amdgpu_gart_table_ram_alloc()
194 ret = amdgpu_ttm_alloc_gart(&adev->gart.bo->tbo); in amdgpu_gart_table_ram_alloc()
205 if (sg) { in amdgpu_gart_table_ram_alloc()
206 sg_free_table(sg); in amdgpu_gart_table_ram_alloc()
207 kfree(sg); in amdgpu_gart_table_ram_alloc()
214 * amdgpu_gart_table_ram_free - free gart page table system ram
223 unsigned int order = get_order(adev->gart.table_size); in amdgpu_gart_table_ram_free()
224 struct sg_table *sg = adev->gart.bo->tbo.sg; in amdgpu_gart_table_ram_free() local
228 ret = amdgpu_bo_reserve(adev->gart.bo, false); in amdgpu_gart_table_ram_free()
230 amdgpu_bo_unpin(adev->gart.bo); in amdgpu_gart_table_ram_free()
231 amdgpu_bo_unreserve(adev->gart.bo); in amdgpu_gart_table_ram_free()
233 amdgpu_bo_unref(&adev->gart.bo); in amdgpu_gart_table_ram_free()
234 sg_free_table(sg); in amdgpu_gart_table_ram_free()
235 kfree(sg); in amdgpu_gart_table_ram_free()
236 p = virt_to_page(adev->gart.ptr); in amdgpu_gart_table_ram_free()
239 adev->gart.ptr = NULL; in amdgpu_gart_table_ram_free()
243 * amdgpu_gart_table_vram_alloc - allocate vram for gart page table
254 if (adev->gart.bo != NULL) in amdgpu_gart_table_vram_alloc()
257 return amdgpu_bo_create_kernel(adev, adev->gart.table_size, PAGE_SIZE, in amdgpu_gart_table_vram_alloc()
258 AMDGPU_GEM_DOMAIN_VRAM, &adev->gart.bo, in amdgpu_gart_table_vram_alloc()
259 NULL, (void *)&adev->gart.ptr); in amdgpu_gart_table_vram_alloc()
263 * amdgpu_gart_table_vram_free - free gart page table vram
273 amdgpu_bo_free_kernel(&adev->gart.bo, NULL, (void *)&adev->gart.ptr); in amdgpu_gart_table_vram_free()
280 * amdgpu_gart_unbind - unbind pages from the gart page table
288 * Returns 0 for success, -EINVAL for failure.
301 if (!adev->gart.ptr) in amdgpu_gart_unbind()
310 page_base = adev->dummy_page_addr; in amdgpu_gart_unbind()
311 if (!adev->gart.ptr) in amdgpu_gart_unbind()
315 amdgpu_gmc_set_pte_pde(adev, adev->gart.ptr, in amdgpu_gart_unbind()
322 for_each_set_bit(i, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS) in amdgpu_gart_unbind()
329 * amdgpu_gart_map - map dma_addresses into GART entries
339 * Returns 0 for success, -EINVAL for failure.
365 * amdgpu_gart_bind - bind pages into the gart page table
375 * Returns 0 for success, -EINVAL for failure.
381 if (!adev->gart.ptr) in amdgpu_gart_bind()
384 amdgpu_gart_map(adev, offset, pages, dma_addr, flags, adev->gart.ptr); in amdgpu_gart_bind()
388 * amdgpu_gart_invalidate_tlb - invalidate gart TLB
399 if (!adev->gart.ptr) in amdgpu_gart_invalidate_tlb()
404 for_each_set_bit(i, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS) in amdgpu_gart_invalidate_tlb()
409 * amdgpu_gart_init - init the driver info for managing the gart
420 if (adev->dummy_page_addr) in amdgpu_gart_init()
426 return -EINVAL; in amdgpu_gart_init()
432 adev->gart.num_cpu_pages = adev->gmc.gart_size / PAGE_SIZE; in amdgpu_gart_init()
433 adev->gart.num_gpu_pages = adev->gmc.gart_size / AMDGPU_GPU_PAGE_SIZE; in amdgpu_gart_init()
435 adev->gart.num_cpu_pages, adev->gart.num_gpu_pages); in amdgpu_gart_init()