We have a PCI driver for our multiple devices. It worked for years in x86 and PPC in Linux 32-bit and 64-bit. But the driver did not work in the Jetson_TX1 ARM platform (first time we are trying to support ARM). After the DMA was programmed, an error showned in dmesg as
smmu_dump_pagetable(): fault_address=0x0000000083403000 pa=0xffffffffffffffff bytes=ffffffffffffffff #pte=0 in L2
during the excusion of the DMA transaction.
You are probably correct, but an exact answer (which I can’t give) will depend on which L4T version you are using. I think in the earlier releases with only 32-bit support things worked with some backwards compatibility, but later on in the 64-bit future the way the memory I/O worked shifted from whether addresses corresponded to physical address to not corresponding to physical address…and an update would be required for anything assuming there was no address shift. Likely determining DMA address is wrong due to leaving out that translation of address.
I don’t know if flashing the system will fix anything…if it is a driver in need of changes it depends on whether the driver is updated. It is worth trying though, the most recent L4T version for a TX1 is R28.1. See:
[url]https://developer.nvidia.com/embedded/linux-tegra[/url]
Disabling SMMU might do what you need. I am thinking about an issue where there was a change between whether PCIe DMA was physical address at one time, and then changed with SMMU such that some drivers were still mistakenly using physical address when what they really needed was a virtual address. Someone from NVIDIA will need to comment on how to test if this is the issue.