diff options
Diffstat (limited to 'arch/powerpc/sysdev/dart_iommu.c')
| -rw-r--r-- | arch/powerpc/sysdev/dart_iommu.c | 7 |
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 | ||
| 140 | static void dart_flush(struct iommu_table *tbl) | 140 | static 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 { |
