diff options
author | Milton Miller <miltonm@bga.com> | 2011-06-24 05:05:24 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-09-19 19:19:35 -0400 |
commit | d24f9c6999eacd3a7bc2b289e49fcb2bf2fafef2 (patch) | |
tree | 66276ee7149e5eab4b7ec9785bad7bdf0564ea3d /arch/powerpc/platforms/cell/iommu.c | |
parent | 3a8f7558e475b68254d8bc3a2211f3f89bf67a71 (diff) |
powerpc: Use the newly added get_required_mask dma_map_ops hook
Now that the generic code has dma_map_ops set, instead of having a
messy ifdef & if block in the base dma_get_required_mask hook push
the computation into the dma ops.
If the ops fails to set the get_required_mask hook default to the
width of dma_addr_t.
This also corrects ibmbus ibmebus_dma_supported to require a 64
bit mask. I doubt anything is checking or setting the dma mask on
that bus.
Signed-off-by: Milton Miller <miltonm@bga.com>
Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-kernel@vger.kernel.org
Cc: benh@kernel.crashing.org
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/cell/iommu.c')
-rw-r--r-- | arch/powerpc/platforms/cell/iommu.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c index 5ef55f3b098..fc46fcac392 100644 --- a/arch/powerpc/platforms/cell/iommu.c +++ b/arch/powerpc/platforms/cell/iommu.c | |||
@@ -1161,11 +1161,20 @@ __setup("iommu_fixed=", setup_iommu_fixed); | |||
1161 | 1161 | ||
1162 | static u64 cell_dma_get_required_mask(struct device *dev) | 1162 | static u64 cell_dma_get_required_mask(struct device *dev) |
1163 | { | 1163 | { |
1164 | struct dma_map_ops *dma_ops; | ||
1165 | |||
1164 | if (!dev->dma_mask) | 1166 | if (!dev->dma_mask) |
1165 | return 0; | 1167 | return 0; |
1166 | 1168 | ||
1167 | if (iommu_fixed_disabled && get_dma_ops(dev) == &dma_iommu_ops) | 1169 | if (!iommu_fixed_disabled && |
1168 | return dma_iommu_get_required_mask(dev); | 1170 | cell_iommu_get_fixed_address(dev) != OF_BAD_ADDR) |
1171 | return DMA_BIT_MASK(64); | ||
1172 | |||
1173 | dma_ops = get_dma_ops(dev); | ||
1174 | if (dma_ops->get_required_mask) | ||
1175 | return dma_ops->get_required_mask(dev); | ||
1176 | |||
1177 | WARN_ONCE(1, "no get_required_mask in %p ops", dma_ops); | ||
1169 | 1178 | ||
1170 | return DMA_BIT_MASK(64); | 1179 | return DMA_BIT_MASK(64); |
1171 | } | 1180 | } |