I am working on an embedded PCIe system where two SoCs are connected together, the Host is a Root Complex, the Slave is an Endpoint. The Host will run Linux.
Typically the Host SoC provides memory windows, where the Endpoint BARs are mapped. This allows a card driver on the Host to read/write to IO or memory on the Slave. Often, the Slave will include a DMAC built into the PCIe IP, that works with a PCIe address and a local address. The Host will setup this DMAC by writing to the memory windows.
In my case, the Endpoint doesn't have a DMAC built in to the PCIe IP, but is does have a system DMAC. So, two questions...
- Can an Endpoint access the Root Complex's memory via BARs?
- Are there any performance implications of using a system DMAC instead of built in PCIe DMAC? (in other words, how do accesses via BARs appear on the PCIe bus, do you get one TLP for each access?)
Any help appreciated!