[PATCH 1/2] arm64: dma_mapping: allow PCI host driver to limit DMA mask
From: arnd@arndb.de (Arnd Bergmann)
Date: 2017-02-16 16:13:01
Also in:
linux-pci, linux-renesas-soc, lkml
From: arnd@arndb.de (Arnd Bergmann)
Date: 2017-02-16 16:13:01
Also in:
linux-pci, linux-renesas-soc, lkml
On Thursday, December 29, 2016 11:45:03 PM CET Nikita Yushchenko wrote:
static int __swiotlb_dma_supported(struct device *hwdev, u64 mask)
{
+#ifdef CONFIG_PCI
+ if (dev_is_pci(hwdev)) {
+ struct pci_dev *pdev = to_pci_dev(hwdev);
+ struct pci_host_bridge *br = pci_find_host_bridge(pdev->bus);
+
+ if (br->dev.dma_mask && (*br->dev.dma_mask) &&
+ (mask & (*br->dev.dma_mask)) != mask)
+ return 0;
+ }
+#endif
if (swiotlb)
return swiotlb_dma_supported(hwdev, mask);
return 1;I think it's wrong to make this a special case for PCI. Instead, we should follow the dma-ranges properties during dma_set_mask() to ensure we don't set a mask that any of the parents up to the root cannot support. Arnd