Jetson Nano does not honor 32bit pci_set_dma_mask

Hi all,

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?

I’m using the latest L4T 32.4 release.

Thanks!

Looks like this fixes it:

Out of curiousity, is there any downside to enabling the SMMU?

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.

Thanks!