PCIe端点可以访问Root Complex BAR吗?

时间:2013-06-20 08:56:51

标签: pci-e

我正在开发一个嵌入式PCIe系统,其中两个SoC连接在一起,主机是Root Complex,Slave是端点。主机将运行Linux。

通常,主机SoC提供内存窗口,其中映射端点BAR。这允许主机上的卡驱动程序读取/写入从站上的IO或内存。通常,Slave将包含内置在PCIe IP中的DMAC,它与PCIe地址和本地地址一起使用。主机将通过写入内存窗口来设置此DMAC。

就我而言,Endpoint没有内置于PCIe IP的DMAC,但确实有一个系统DMAC。那么,有两个问题......

  1. 端点可以通过BAR访问Root Complex的内存吗?
  2. 使用系统DMAC而不是构建时是否存在性能影响 在PCIe DMAC? (换句话说,如何通过BAR进行访问 PCIe总线,你为每次访问获得一个TLP吗?)
  3. 任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

  1. BAR位于传统的配置空间内。因此,只能通过CfgRd或CfgWr达到该寄存器。这些TLP(事务层数据包)只能来自RC。那么EP怎么知道RC的有效内存地址是什么?棘手的问题,PCI-Express规范没有答案。实际上,有些地区比其他地区更有可能被分配,所以你可以做出有根据的猜测。

  2. 访问BAR需要至少2个TLP:请求(CfgWr或CfgRd)和相应的完成(分别为Cpl或CplD)。

  3. 我希望有所帮助,

答案 1 :(得分:0)

在考虑了这一点之后,我认为答案很明确......

在我的情况下,Endpoint没有内置的PCIe-DMAC,Endpoint只能使用PCIe窗口访问RC内存。通常,这些窗口用于RC以访问EP存储器(如BAR所详述)。但是,没有什么可以阻止端点使用相同的机制来访问RC内存。唯一的问题是设置之一。在这种情况下,RC必须告诉端点它应该使用的PCIe地址和大小。这与使用PCIe-DMAC的情况没有什么不同。

答案 2 :(得分:0)

PCIe EP中有一种称为地址转换的东西。例如:

  1. 主机在虚拟空间中使用malloc分配内存。
  2. 主机通过BAR为EP提供分配的虚拟地址。
  3. 主机将地址转换器编程为虚拟到物理转换器。
  4. 现在,当EP生成针对主机虚拟地址的TLP时,转换器将TLP的DST地址(主机虚拟)更改为相应的主机物理地址。

来源https://patents.google.com/patent/US8171230B2/en