aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2008-02-29 02:33:23 -0500
committerArnd Bergmann <arnd@arndb.de>2008-03-03 02:03:15 -0500
commit0d7386ebffd8506b28c37a7d5541132a576f64e2 (patch)
tree11787b0cc75354af5fe44187cb36840f8dfac18c /arch/powerpc
parentf9660e8a6c16e17935777cdee5194842904c2d72 (diff)
[POWERPC] Use it_offset not pte_offset in cell IOMMU code
The cell IOMMU tce build and free routines use pte_offset to convert the index passed from the generic IOMMU code into a page table offset. This takes into account the SPIDER_DMA_OFFSET which sets the top bit of every DMA address. However it doesn't cater for the IOMMU window starting at a non-zero address, as the base of the window is not incorporated into pte_offset at all. As it turns out tbl->it_offset already contains the value we need, it takes into account the base of the window and also pte_offset. So use it instead! Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/platforms/cell/iommu.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c
index bbe838996470..4e75919bf6b9 100644
--- a/arch/powerpc/platforms/cell/iommu.c
+++ b/arch/powerpc/platforms/cell/iommu.c
@@ -200,7 +200,7 @@ static void tce_build_cell(struct iommu_table *tbl, long index, long npages,
200 (window->ioid & IOPTE_IOID_Mask); 200 (window->ioid & IOPTE_IOID_Mask);
201#endif 201#endif
202 202
203 io_pte = (unsigned long *)tbl->it_base + (index - window->pte_offset); 203 io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset);
204 204
205 for (i = 0; i < npages; i++, uaddr += IOMMU_PAGE_SIZE) 205 for (i = 0; i < npages; i++, uaddr += IOMMU_PAGE_SIZE)
206 io_pte[i] = base_pte | (__pa(uaddr) & IOPTE_RPN_Mask); 206 io_pte[i] = base_pte | (__pa(uaddr) & IOPTE_RPN_Mask);
@@ -232,7 +232,7 @@ static void tce_free_cell(struct iommu_table *tbl, long index, long npages)
232 | (window->ioid & IOPTE_IOID_Mask); 232 | (window->ioid & IOPTE_IOID_Mask);
233#endif 233#endif
234 234
235 io_pte = (unsigned long *)tbl->it_base + (index - window->pte_offset); 235 io_pte = (unsigned long *)tbl->it_base + (index - tbl->it_offset);
236 236
237 for (i = 0; i < npages; i++) 237 for (i = 0; i < npages; i++)
238 io_pte[i] = pte; 238 io_pte[i] = pte;