I've been looking at using the i.MX6Q's PCIe for both endpoint and root complex and since there is no DMA engine on the PCIe built it's a bit difficult to write linux drivers for high data throughput. I have two things I'd like to clarify:
1) Would it be possible to use the SDMA to copy data out of the PCIe space (0x01000000 say) into a location in memory to 'emulate' the PCIe having a true DMA controller?
2) I have been studying the PCIe specs from PCI-SIG as well as the reference manuals, etc. I am unsure about exactly how the memory BARs work on the EP: is it possible to simply use the iATU for 'DMA'? For example, I think that I could map BAR0 to a region that I kzalloc on the EP in the driver that has some arbitrary data structure in it. When the RC writes data in the format of this data structure to the EP's BAR0, would it end up in my kzallocd area? Does this same logic apply from the EP back to the RC, except that the address would have to be hardcoded since the concept of BARs doesnt apply to RC's?
In this case, only the sender of the data needs to use the SDMA to move data from where it is to where it needs to be for PCIe, bringing me to 1), above. Perhaps I've missed the boat somewhere!
Sorry if this is pushing this question too far, but I'm sure others are wondering the same things!
Hopefully I've been clear enough! There's a major learning curve involved with PCIe and the iMX way...