diff mbox series

iommu/omap: Fix cache flushes on L2 table entries

Message ID 20180806150036.14644-1-ralf.goebel@imago-technologies.com (mailing list archive)
State New, archived
Headers show
Series iommu/omap: Fix cache flushes on L2 table entries | expand

Commit Message

Ralf Goebel Aug. 6, 2018, 3 p.m. UTC
The base address used for DMA operations on the second-level table
did incorrectly include the offset for the table entry. The offset
was then added again which lead to incorrect behavior.

Operations on the L1 table are not affected.

The calculation of the base address is changed to point to the
beginning of the L2 table.

Fixes: bfee0cf0ee1d ("iommu/omap: Use DMA-API for performing cache flushes")
Acked-by: Suman Anna <s-anna@ti.com>
Signed-off-by: Ralf Goebel <ralf.goebel@imago-technologies.com>
---

Changes in v2: Rephrase patch summary and description

 drivers/iommu/omap-iommu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Joerg Roedel Aug. 8, 2018, 9:08 a.m. UTC | #1
On Mon, Aug 06, 2018 at 05:00:36PM +0200, Ralf Goebel wrote:
> The base address used for DMA operations on the second-level table
> did incorrectly include the offset for the table entry. The offset
> was then added again which lead to incorrect behavior.
> 
> Operations on the L1 table are not affected.
> 
> The calculation of the base address is changed to point to the
> beginning of the L2 table.
> 
> Fixes: bfee0cf0ee1d ("iommu/omap: Use DMA-API for performing cache flushes")
> Acked-by: Suman Anna <s-anna@ti.com>
> Signed-off-by: Ralf Goebel <ralf.goebel@imago-technologies.com>

Applied for v4.19, thanks.

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox series

Patch

diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
index af4a8e7fcd27..3b05117118c3 100644
--- a/drivers/iommu/omap-iommu.c
+++ b/drivers/iommu/omap-iommu.c
@@ -550,7 +550,7 @@  static u32 *iopte_alloc(struct omap_iommu *obj, u32 *iopgd,
 
 pte_ready:
 	iopte = iopte_offset(iopgd, da);
-	*pt_dma = virt_to_phys(iopte);
+	*pt_dma = iopgd_page_paddr(iopgd);
 	dev_vdbg(obj->dev,
 		 "%s: da:%08x pgd:%p *pgd:%08x pte:%p *pte:%08x\n",
 		 __func__, da, iopgd, *iopgd, iopte, *iopte);
@@ -738,7 +738,7 @@  static size_t iopgtable_clear_entry_core(struct omap_iommu *obj, u32 da)
 		}
 		bytes *= nent;
 		memset(iopte, 0, nent * sizeof(*iopte));
-		pt_dma = virt_to_phys(iopte);
+		pt_dma = iopgd_page_paddr(iopgd);
 		flush_iopte_range(obj->dev, pt_dma, pt_offset, nent);
 
 		/*