iommu/exynos: Block SYSMMU while invalidating FLPD cache
authorMarek Szyprowski <m.szyprowski@samsung.com>
Mon, 20 Mar 2017 09:17:56 +0000 (10:17 +0100)
committerJoerg Roedel <jroedel@suse.de>
Wed, 22 Mar 2017 14:50:32 +0000 (15:50 +0100)
Documentation specifies that SYSMMU should be in blocked state while
performing TLB/FLPD cache invalidation, so add needed calls to
sysmmu_block/unblock.

Fixes: 66a7ed84b345d ("iommu/exynos: Apply workaround of caching fault page table entries")
CC: stable@vger.kernel.org # v4.10+
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/exynos-iommu.c

index a7e0821c9967e490258921238e6640723e79375d..32d43f1994e4093712b88c1a7f680c3c3fa35df5 100644 (file)
@@ -512,7 +512,10 @@ static void sysmmu_tlb_invalidate_flpdcache(struct sysmmu_drvdata *data,
        spin_lock_irqsave(&data->lock, flags);
        if (data->active && data->version >= MAKE_MMU_VER(3, 3)) {
                clk_enable(data->clk_master);
-               __sysmmu_tlb_invalidate_entry(data, iova, 1);
+               if (sysmmu_block(data)) {
+                       __sysmmu_tlb_invalidate_entry(data, iova, 1);
+                       sysmmu_unblock(data);
+               }
                clk_disable(data->clk_master);
        }
        spin_unlock_irqrestore(&data->lock, flags);