【问题标题】:Can a PCIe endpoint access Root Complex BARs?PCIe 端点能否访问根复合体 BAR?
【发布时间】:2013-06-20 08:56:51
【问题描述】:

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

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

在我的例子中,端点没有内置到 PCIe IP 的 DMAC,但确实有一个系统 DMAC。所以,两个问题...

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

任何帮助表示赞赏!

【问题讨论】:

    标签: pci-e


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

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

    希望对你有帮助

    【讨论】:

    • 谢谢,我认为这有帮助。
    • 虽然 Q2 不是关于读取 BAR,而是关于通过 BAR 窗口读取/写入数据(RC 启动对 EP 内存的读取/写入)。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多