diff options
author | Michal Ostrowski <mostrows@watson.ibm.com> | 2005-12-01 21:09:13 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-12-01 22:51:22 -0500 |
commit | cc8b5c96a7ac7d695c2887427b1003bd33ec9c97 (patch) | |
tree | a8a745d54dae93438b6479cf807e07a51f8b210e /arch/powerpc | |
parent | deda498710e190c7922c2634ed630ee64ce86c05 (diff) |
[PATCH] powerpc/pseries: Fix TCE building with 64k pagesize
Must adjust tcenum and npages by TCE_PAGE_FACTOR to convert between
64KB pages and TCE (4K) pages. (This is done in other places, except
for this one location.)
Signed-off-by: Michal Ostrowski <mostrows at watson ibm com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/platforms/pseries/iommu.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index c78f2b290a73..fa1edbdcf88c 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c | |||
@@ -109,6 +109,9 @@ static void tce_build_pSeriesLP(struct iommu_table *tbl, long tcenum, | |||
109 | u64 rc; | 109 | u64 rc; |
110 | union tce_entry tce; | 110 | union tce_entry tce; |
111 | 111 | ||
112 | tcenum <<= TCE_PAGE_FACTOR; | ||
113 | npages <<= TCE_PAGE_FACTOR; | ||
114 | |||
112 | tce.te_word = 0; | 115 | tce.te_word = 0; |
113 | tce.te_rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; | 116 | tce.te_rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; |
114 | tce.te_rdwr = 1; | 117 | tce.te_rdwr = 1; |
@@ -143,9 +146,6 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum, | |||
143 | union tce_entry tce, *tcep; | 146 | union tce_entry tce, *tcep; |
144 | long l, limit; | 147 | long l, limit; |
145 | 148 | ||
146 | tcenum <<= TCE_PAGE_FACTOR; | ||
147 | npages <<= TCE_PAGE_FACTOR; | ||
148 | |||
149 | if (npages == 1) | 149 | if (npages == 1) |
150 | return tce_build_pSeriesLP(tbl, tcenum, npages, uaddr, | 150 | return tce_build_pSeriesLP(tbl, tcenum, npages, uaddr, |
151 | direction); | 151 | direction); |
@@ -164,6 +164,9 @@ static void tce_buildmulti_pSeriesLP(struct iommu_table *tbl, long tcenum, | |||
164 | __get_cpu_var(tce_page) = tcep; | 164 | __get_cpu_var(tce_page) = tcep; |
165 | } | 165 | } |
166 | 166 | ||
167 | tcenum <<= TCE_PAGE_FACTOR; | ||
168 | npages <<= TCE_PAGE_FACTOR; | ||
169 | |||
167 | tce.te_word = 0; | 170 | tce.te_word = 0; |
168 | tce.te_rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; | 171 | tce.te_rpn = (virt_to_abs(uaddr)) >> TCE_SHIFT; |
169 | tce.te_rdwr = 1; | 172 | tce.te_rdwr = 1; |