diff options
author | Mitchel Humpherys <mitchelh@codeaurora.org> | 2015-05-18 11:56:42 -0700 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-22 11:12:43 -0700 |
commit | 22a99e7c292b9dd06c629cbd4911eb5d49cc0c10 (patch) | |
tree | df2607f96fe328c7cb951b9be563e2f5cf9b1c5d | |
parent | 2d127e84a3256cdc7548dfe9e5b2b6220e25f828 (diff) |
Revert "arm64: dma-mapping: avoid calling iommu_iova_to_phys"
This reverts commit 0d02975d9ffd55f1c0fe5db08f45a9ee1d22f354 since it's
causing problems for some reason. This should really be debugged but
for now just revert it.
Change-Id: I31f382c1945cd1cd84dbbd3dfb715009b8442fe9
Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
-rw-r--r-- | arch/arm64/include/asm/dma-iommu.h | 1 | ||||
-rw-r--r-- | arch/arm64/mm/dma-mapping.c | 14 |
2 files changed, 7 insertions, 8 deletions
diff --git a/arch/arm64/include/asm/dma-iommu.h b/arch/arm64/include/asm/dma-iommu.h index 1886afb02ff7..db51643163f2 100644 --- a/arch/arm64/include/asm/dma-iommu.h +++ b/arch/arm64/include/asm/dma-iommu.h @@ -17,7 +17,6 @@ struct dma_iommu_mapping { size_t bits; unsigned int order; dma_addr_t base; - phys_addr_t phys; spinlock_t lock; struct kref kref; diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index 0b5727065a81..5701dd481d2c 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -1819,7 +1819,6 @@ static dma_addr_t arm_coherent_iommu_map_page(struct device *dev, struct dma_iommu_mapping *mapping = dev->archdata.mapping; dma_addr_t dma_addr; int ret, prot, len = PAGE_ALIGN(size + offset); - phys_addr_t phys = page_to_phys(page); dma_addr = __alloc_iova(mapping, len); if (dma_addr == DMA_ERROR_CODE) @@ -1827,13 +1826,11 @@ static dma_addr_t arm_coherent_iommu_map_page(struct device *dev, prot = __dma_direction_to_prot(dir); - ret = iommu_map(mapping->domain, dma_addr, phys, len, + ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot); if (ret < 0) goto fail; - mapping->phys = phys; - return dma_addr + offset; fail: __free_iova(mapping, dma_addr, len); @@ -1900,7 +1897,8 @@ static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle, { struct dma_iommu_mapping *mapping = dev->archdata.mapping; dma_addr_t iova = handle & PAGE_MASK; - struct page *page = phys_to_page(mapping->phys); + struct page *page = phys_to_page(iommu_iova_to_phys( + mapping->domain, iova)); int offset = handle & ~PAGE_MASK; int len = PAGE_ALIGN(size + offset); @@ -1919,7 +1917,8 @@ static void arm_iommu_sync_single_for_cpu(struct device *dev, { struct dma_iommu_mapping *mapping = dev->archdata.mapping; dma_addr_t iova = handle & PAGE_MASK; - struct page *page = phys_to_page(mapping->phys); + struct page *page = phys_to_page(iommu_iova_to_phys( + mapping->domain, iova)); unsigned int offset = handle & ~PAGE_MASK; if (!iova) @@ -1933,7 +1932,8 @@ static void arm_iommu_sync_single_for_device(struct device *dev, { struct dma_iommu_mapping *mapping = dev->archdata.mapping; dma_addr_t iova = handle & PAGE_MASK; - struct page *page = phys_to_page(mapping->phys); + struct page *page = phys_to_page(iommu_iova_to_phys( + mapping->domain, iova)); unsigned int offset = handle & ~PAGE_MASK; if (!iova) |