diff options
Diffstat (limited to 'arch/powerpc/platforms/pseries/iommu.c')
-rw-r--r-- | arch/powerpc/platforms/pseries/iommu.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index c78f2b290a73..2043659ea7b1 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,10 +146,7 @@ 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; | 149 | if (TCE_PAGE_FACTOR == 0 && npages == 1) |
147 | npages <<= TCE_PAGE_FACTOR; | ||
148 | |||
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); |
152 | 152 | ||
@@ -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; |