aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/sysdev/dart_iommu.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/sysdev/dart_iommu.c')
-rw-r--r--arch/powerpc/sysdev/dart_iommu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/powerpc/sysdev/dart_iommu.c b/arch/powerpc/sysdev/dart_iommu.c
index e32fadde1f77..03b4477dd7f0 100644
--- a/arch/powerpc/sysdev/dart_iommu.c
+++ b/arch/powerpc/sysdev/dart_iommu.c
@@ -139,6 +139,7 @@ wait_more:
139 139
140static void dart_flush(struct iommu_table *tbl) 140static void dart_flush(struct iommu_table *tbl)
141{ 141{
142 mb();
142 if (dart_dirty) { 143 if (dart_dirty) {
143 dart_tlb_invalidate_all(); 144 dart_tlb_invalidate_all();
144 dart_dirty = 0; 145 dart_dirty = 0;
@@ -172,9 +173,13 @@ static void dart_build(struct iommu_table *tbl, long index,
172 uaddr += DART_PAGE_SIZE; 173 uaddr += DART_PAGE_SIZE;
173 } 174 }
174 175
176 /* make sure all updates have reached memory */
177 mb();
178 in_be32((unsigned __iomem *)dp);
179 mb();
180
175 if (dart_is_u4) { 181 if (dart_is_u4) {
176 rpn = index; 182 rpn = index;
177 mb(); /* make sure all updates have reached memory */
178 while (npages--) 183 while (npages--)
179 dart_tlb_invalidate_one(rpn++); 184 dart_tlb_invalidate_one(rpn++);
180 } else { 185 } else {