4

我正在开发一个嵌入式 PCIe 系统,其中两个 SoC 连接在一起,主机是根联合体,从机是端点。主机将运行 Linux。

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

就我而言,端点没有内置到 PCIe IP 中的 DMAC,但确实有系统 DMAC。那么,两个问题...

  1. 端点可以通过 BAR 访问根复合体的内存吗?
  2. 使用系统 DMAC 而不是内置 PCIe DMAC 是否会对性能产生影响?(换句话说,通过 BAR 的访问如何出现在 PCIe 总线上,每次访问是否获得一个 TLP?)

任何帮助表示赞赏!

4

3 回答 3

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

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

我希望这会有所帮助,

于 2013-06-20T18:10:53.427 回答
1

稍微想了想,我想答案很明确了……

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

于 2013-07-02T12:07:24.957 回答
0

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

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

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

于 2018-07-06T06:40:54.793 回答