powerpc/iommu: Use coherent_dma_mask for alloc_coherent
The IOMMU code has been passing the dma-mask instead of the coherent_dma_mask to the iommu allocator. Coherent allocations should be made using the coherent_dma_mask. Also update the vio code to ensure the coherent_dma_mask is set. Without this change drivers, such as ibmvscsi, fail to load with the corrected dma_iommu_alloc_coherent(). Signed-off-by: Milton Miller <miltonm@bga.com> Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
56d8adc569
commit
b3c73856ae
@ -19,7 +19,7 @@ static void *dma_iommu_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag)
|
||||
{
|
||||
return iommu_alloc_coherent(dev, get_iommu_table_base(dev), size,
|
||||
dma_handle, device_to_mask(dev), flag,
|
||||
dma_handle, dev->coherent_dma_mask, flag,
|
||||
dev_to_node(dev));
|
||||
}
|
||||
|
||||
|
@ -1257,6 +1257,10 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node)
|
||||
viodev->dev.parent = &vio_bus_device.dev;
|
||||
viodev->dev.bus = &vio_bus_type;
|
||||
viodev->dev.release = vio_dev_release;
|
||||
/* needed to ensure proper operation of coherent allocations
|
||||
* later, in case driver doesn't set it explicitly */
|
||||
dma_set_mask(&viodev->dev, DMA_BIT_MASK(64));
|
||||
dma_set_coherent_mask(&viodev->dev, DMA_BIT_MASK(64));
|
||||
|
||||
/* register with generic device framework */
|
||||
if (device_register(&viodev->dev)) {
|
||||
|
Loading…
Reference in New Issue
Block a user