diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common')
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/nvgpu_mem.c | 6 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/mm/nvgpu_mem.c | 12 |
2 files changed, 15 insertions, 3 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c b/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c index 8cf3011e..0be41a44 100644 --- a/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c +++ b/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c | |||
@@ -268,7 +268,7 @@ u64 nvgpu_mem_get_addr_sgl(struct gk20a *g, struct scatterlist *sgl) | |||
268 | if (sg_dma_address(sgl) == DMA_ERROR_CODE) | 268 | if (sg_dma_address(sgl) == DMA_ERROR_CODE) |
269 | return 0; | 269 | return 0; |
270 | 270 | ||
271 | return gk20a_mm_smmu_vaddr_translate(g, sg_dma_address(sgl)); | 271 | return nvgpu_mem_iommu_translate(g, sg_dma_address(sgl)); |
272 | } | 272 | } |
273 | 273 | ||
274 | /* | 274 | /* |
@@ -452,8 +452,8 @@ static u64 nvgpu_mem_linux_sgl_gpu_addr(struct gk20a *g, void *sgl, | |||
452 | if (sg_dma_address((struct scatterlist *)sgl) == DMA_ERROR_CODE) | 452 | if (sg_dma_address((struct scatterlist *)sgl) == DMA_ERROR_CODE) |
453 | return 0; | 453 | return 0; |
454 | 454 | ||
455 | return gk20a_mm_smmu_vaddr_translate(g, | 455 | return nvgpu_mem_iommu_translate(g, |
456 | sg_dma_address((struct scatterlist *)sgl)); | 456 | sg_dma_address((struct scatterlist *)sgl)); |
457 | } | 457 | } |
458 | 458 | ||
459 | static void nvgpu_mem_linux_sgl_free(struct gk20a *g, struct nvgpu_sgt *sgt) | 459 | static void nvgpu_mem_linux_sgl_free(struct gk20a *g, struct nvgpu_sgt *sgt) |
diff --git a/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c b/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c index 52d20883..faee482d 100644 --- a/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c +++ b/drivers/gpu/nvgpu/common/mm/nvgpu_mem.c | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | #include <nvgpu/kmem.h> | 23 | #include <nvgpu/kmem.h> |
24 | #include <nvgpu/nvgpu_mem.h> | 24 | #include <nvgpu/nvgpu_mem.h> |
25 | #include <nvgpu/dma.h> | ||
25 | 26 | ||
26 | #include "gk20a/gk20a.h" | 27 | #include "gk20a/gk20a.h" |
27 | 28 | ||
@@ -56,3 +57,14 @@ void nvgpu_sgt_free(struct nvgpu_sgt *sgt, struct gk20a *g) | |||
56 | if (sgt && sgt->ops->sgt_free) | 57 | if (sgt && sgt->ops->sgt_free) |
57 | sgt->ops->sgt_free(g, sgt); | 58 | sgt->ops->sgt_free(g, sgt); |
58 | } | 59 | } |
60 | |||
61 | u64 nvgpu_mem_iommu_translate(struct gk20a *g, u64 phys) | ||
62 | { | ||
63 | /* ensure it is not vidmem allocation */ | ||
64 | WARN_ON(is_vidmem_page_alloc(phys)); | ||
65 | |||
66 | if (nvgpu_iommuable(g) && g->ops.mm.get_iommu_bit) | ||
67 | return phys | 1ULL << g->ops.mm.get_iommu_bit(g); | ||
68 | |||
69 | return phys; | ||
70 | } | ||