I have an M.2 PCIe device with a 32bit DMA bus address limitation. The driver for the device makes the following call:
pci_set_dma_mask(pdev, DMA_BIT_MASK(32)), which returns successfully. This should mean that the host indicated that it can support the requirement for a 32bit DMA address, and will provide a 32bit address when requested.
However, when the driver later makes a call to pci_map_single(), a DMA bus address above 4GB is returned.
Is this a known issue or am I completely misunderstanding something? Is there a way to force the platform to use a DMA address range below 4GB?
There is no real downside as such except that with some of the non-optimized Ethernet card drivers, we observed a little less performance. If the perf you are getting with SMMU enabled is fine for you, please go ahead and keep the SMMU enabled.