Hi linuxdev
I used your suggestion and now I think I have succeeded disable the smmu for pcie.
I use ls /sys/kernel/debug/12000000.iommu/masters/
and here is the results :
ls /sys/kernel/debug/12000000.iommu/masters/
13e10000.host1x 150c0000.nvcsi 15700000.vi 3460000.sdhci
13e10000.host1x:ctx0 15100000.tsecb 15810000.se 3510000.hda
13e10000.host1x:ctx1 15210000.nvdisplay 15820000.se 3530000.xhci
13e10000.host1x:ctx2 15340000.vic 15830000.se 3550000.xudc
13e10000.host1x:ctx3 15380000.nvjpg 15840000.se adsp_audio
13e10000.host1x:ctx4 15480000.nvdec 17000000.gp10b smmu_test
13e10000.host1x:ctx5 154c0000.nvenc 2490000.ether_qos sound_ref
13e10000.host1x:ctx6 15500000.tsec 2993000.adsp
13e10000.host1x:ctx7 15600000.isp 3400000.sdhci
Although I think the smmu is disabled, the problem seems still exist. I have used pci_alloc_consistent() and kmalloc() function to apply for memory. I use __pa() to change the virt_addr to phys_addr, but the transform results seems odd for me.
pci_alloc_consistent()
virt_addr is ffffff8000e83000, phys_addr is ffffffc080e83000, bus_addr is fc002000
virt_addr is ffffff8000e84000, phys_addr is ffffffc080e84000, bus_addr is fc003000
virt_addr is ffffff8000e85000, phys_addr is ffffffc080e85000, bus_addr is fc004000
virt_addr is ffffff8000e86000, phys_addr is ffffffc080e86000, bus_addr is fc005000
virt_addr is ffffff8000e87000, phys_addr is ffffffc080e87000, bus_addr is fc006000
virt_addr is ffffff8000e88000, phys_addr is ffffffc080e88000, bus_addr is fc007000
virt_addr is ffffff8000e89000, phys_addr is ffffffc080e89000, bus_addr is fc008000
virt_addr is ffffff8000e8a000, phys_addr is ffffffc080e8a000, bus_addr is fc009000
virt_addr is ffffff8000e8b000, phys_addr is ffffffc080e8b000, bus_addr is fc00a000
virt_addr is ffffff8000e8c000, phys_addr is ffffffc080e8c000, bus_addr is fc00b000
kmalloc()
virt_addr buffer is ffffffc1e1ebe000, phys_addr buffer is 261ebe000
virt_addr buffer is ffffffc1e1ebd000, phys_addr buffer is 261ebd000
virt_addr buffer is ffffffc1e1eb8000, phys_addr buffer is 261eb8000
virt_addr buffer is ffffffc1e1ebc000, phys_addr buffer is 261ebc000
virt_addr buffer is ffffffc1e1eb9000, phys_addr buffer is 261eb9000
virt_addr buffer is ffffffc1e61a5000, phys_addr buffer is 2661a5000
virt_addr buffer is ffffffc1e61a6000, phys_addr buffer is 2661a6000
virt_addr buffer is ffffffc1e61a7000, phys_addr buffer is 2661a7000
virt_addr buffer is ffffffc1e61a3000, phys_addr buffer is 2661a3000
virt_addr buffer is ffffffc1e61a2000, phys_addr buffer is 2661a2000