Skip to content

Commit 4c374af

Browse files
aakoskinozbenh
authored andcommitted
powerpc/dma-iommu: Fix IOMMU window check
Checking for device mask to cover the whole IOMMU table is too strict. IOMMU allocators should handle mask constraint properly for each allocation. The patch enables to use old AirPort Extreme cards on PowerMacs with more than 1GB of memory; without the patch the driver init fails with: b43-pci-bridge 0001:01:01.0: Warning: IOMMU window too big for device mask b43-pci-bridge 0001:01:01.0: mask: 0x3fffffff, table end: 0x80000000 b43-phy0 ERROR: The machine/kernel does not support the required 30-bit DMA mask Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
1 parent f0f0c9a commit 4c374af

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

arch/powerpc/kernel/dma-iommu.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,10 @@ static int dma_iommu_dma_supported(struct device *dev, u64 mask)
8383
return 0;
8484
}
8585

86-
if ((tbl->it_offset + tbl->it_size) > (mask >> IOMMU_PAGE_SHIFT)) {
87-
dev_info(dev, "Warning: IOMMU window too big for device mask\n");
88-
dev_info(dev, "mask: 0x%08llx, table end: 0x%08lx\n",
89-
mask, (tbl->it_offset + tbl->it_size) <<
90-
IOMMU_PAGE_SHIFT);
86+
if (tbl->it_offset > (mask >> IOMMU_PAGE_SHIFT)) {
87+
dev_info(dev, "Warning: IOMMU offset too big for device mask\n");
88+
dev_info(dev, "mask: 0x%08llx, table offset: 0x%08lx\n",
89+
mask, tbl->it_offset << IOMMU_PAGE_SHIFT);
9190
return 0;
9291
} else
9392
return 1;

0 commit comments

Comments
 (0)