summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchel Humpherys <mitchelh@codeaurora.org>2015-05-18 11:56:42 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:12:43 -0700
commit22a99e7c292b9dd06c629cbd4911eb5d49cc0c10 (patch)
treedf2607f96fe328c7cb951b9be563e2f5cf9b1c5d
parent2d127e84a3256cdc7548dfe9e5b2b6220e25f828 (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.h1
-rw-r--r--arch/arm64/mm/dma-mapping.c14
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)