Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ACPI/IORT: Don't set default coherent DMA mask

Now that we can track upstream DMA constraints properly with
bus_dma_mask instead of trying (and failing) to maintain it in
coherent_dma_mask, it doesn't make much sense for the firmware code to
be touching the latter at all. It's merely papering over bugs wherein a
driver has failed to call dma_set_coherent_mask() *and* the bus code has
not initialised any default value.

We don't really want to encourage more drivers coercing dma_mask so
we'll continue to fix that up if necessary, but add a warning to help
flush out any such buggy bus code that remains.

Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>

authored by

Robin Murphy and committed by
Christoph Hellwig
6757cdae 03bfdc31

+11 -11
+11 -11
drivers/acpi/arm64/iort.c
··· 978 978 int ret, msb; 979 979 980 980 /* 981 - * Set default coherent_dma_mask to 32 bit. Drivers are expected to 982 - * setup the correct supported mask. 981 + * If @dev is expected to be DMA-capable then the bus code that created 982 + * it should have initialised its dma_mask pointer by this point. For 983 + * now, we'll continue the legacy behaviour of coercing it to the 984 + * coherent mask if not, but we'll no longer do so quietly. 983 985 */ 984 - if (!dev->coherent_dma_mask) 985 - dev->coherent_dma_mask = DMA_BIT_MASK(32); 986 - 987 - /* 988 - * Set it to coherent_dma_mask by default if the architecture 989 - * code has not set it. 990 - */ 991 - if (!dev->dma_mask) 986 + if (!dev->dma_mask) { 987 + dev_warn(dev, "DMA mask not set\n"); 992 988 dev->dma_mask = &dev->coherent_dma_mask; 989 + } 993 990 994 - size = max(dev->coherent_dma_mask, dev->coherent_dma_mask + 1); 991 + if (dev->coherent_dma_mask) 992 + size = max(dev->coherent_dma_mask, dev->coherent_dma_mask + 1); 993 + else 994 + size = 1ULL << 32; 995 995 996 996 if (dev_is_pci(dev)) { 997 997 ret = acpi_dma_get_range(dev, &dmaaddr, &offset, &size);