diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 03a5dabb..9fdbf2b7 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -1664,14 +1664,16 @@ u64 gk20a_mm_smmu_vaddr_translate(struct gk20a *g, dma_addr_t iova) | |||
1664 | 1664 | ||
1665 | u64 gk20a_mm_iova_addr(struct gk20a *g, struct scatterlist *sgl) | 1665 | u64 gk20a_mm_iova_addr(struct gk20a *g, struct scatterlist *sgl) |
1666 | { | 1666 | { |
1667 | u64 result = sg_phys(sgl); | 1667 | if (!device_is_iommuable(dev_from_gk20a(g))) |
1668 | #ifdef CONFIG_TEGRA_IOMMU_SMMU | 1668 | return sg_phys(sgl); |
1669 | |||
1670 | if (sg_dma_address(sgl) == 0) | ||
1671 | return sg_phys(sgl); | ||
1672 | |||
1669 | if (sg_dma_address(sgl) == DMA_ERROR_CODE) | 1673 | if (sg_dma_address(sgl) == DMA_ERROR_CODE) |
1670 | result = 0; | 1674 | return 0; |
1671 | else if (sg_dma_address(sgl)) | 1675 | |
1672 | result = gk20a_mm_smmu_vaddr_translate(g, sg_dma_address(sgl)); | 1676 | return gk20a_mm_smmu_vaddr_translate(g, sg_dma_address(sgl)); |
1673 | #endif | ||
1674 | return result; | ||
1675 | } | 1677 | } |
1676 | 1678 | ||
1677 | static int update_gmmu_ptes_locked(struct vm_gk20a *vm, | 1679 | static int update_gmmu_ptes_locked(struct vm_gk20a *vm, |