This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/AM5728:DSP 中的 PCIe 枚举

Guru**** 2558250 points
Other Parts Discussed in Thread: AM5728

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/611298/rtos-am5728-pcie-enumeration-in-dsp

器件型号:AM5728

工具/软件:TI-RTOS

您好!  

在我们的定制板中、我们有3个端口 Pericom 开关、我们在其中连接了2个 Sitara 处理器和1个 Cyclone V FPGA:

到目前为止、我们在 AM5728上都成功实现了 PCIe 链路。 现在、我要在 RC 上执行 PCIe 枚举。 EP 和 RC 代码都在 C66 DSP 内核内运行。 我理解以下线程中所述的 PCIe 枚举:  

我之前在 KeyStone II 器件上实施过此类程序。 在 KeyStone-II 中、我使用了"配置事务设置寄存器"(CFG_SETUP)寄存器来执行该操作。  

但是、Sitara 处理器不支持该寄存器。 我已经阅读 了 AM5728 TRM 的第24.9.4.8.2.2节(多次)、但不清楚 如何使用 Pciev1_atuRegionConfig 函数实现这一点。

我们非常感谢您的帮助。  

戴维

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您在 AM5728 RC 上为枚举运行了什么软件? C66x 上的 Processor SDK RTOS 是什么样的? RTOS 代码不执行枚举。 您是否考虑在 A15上运行 Linux、因为 Linux OS 会进行枚举? 枚举过程可以在 en.wikipedia.org/.../PCI_configuration_space 上看到

    上述 CFG_SETUP 寄存器适用于 Keystone I/II PCIe、AM5728使用不同的 PCIe IP、因此寄存器不在此处。 我查看了通过 PCIe 提出的24.9.4.8.2.2配置请求、我认为在 Linux 代码中、我们应该针对正在发生的事件对哪些寄存器进行编程。 我将搜索并更新您。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eric:  

    是的、我在 C66上使用 TI-RTOS 来执行 PCIe 操作。 我知道 PDK 中没有提供枚举过程、我需要自己实现。  

    我们已经在 A15上运行 Linux、我们可以在 Linux 端执行枚举。 但是、这会给我们的设计增加一层复杂性、因为所有 PCIe 功能都必须在 DSP/M4中完成。  

    如果您能给我指出执行该操作的 Linux 代码、这将会很好。  

    此致、

    戴维

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您可以在任何最新的 Linux 版本下查看 PCIe Linux 驱动程序、例如:TI-processor-sdk-linux-rt-am57xx-evm-03.03.00.04/board-support/linux-rt-4.4.4.41+gitAUTOINC+968d071ce9-g968d071ce9/drivers/PCI/控制器/

    AM5728x 代码为:PCI-dra7xx.c. 函数 dra7xx_add_PCIe_port ()
    通用代码为:pcie-designware-host.c. 函数 dw_pcie_rd_conf()。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Eric 的回复。

    快速查看后、逆向工程在 Linux 内核中执行的任何操作以使用交换机正确设置总线似乎很麻烦。

    您是否认为可以执行以下操作:

    -让 Linux 内核执行枚举、将条形图映射到 PCIe 地址空间
    -启动 DSP 并执行需要在每个端点上发生的任何配置(我已经在 FPGA 的 DSP 中写入了该逻辑)
    -在 DSP 中配置任何入站转换
    -在 DSP 和 M4处理器中设置 PCIe 中断处理程序

    为什么它不起作用?

    戴维
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果您使用 A15枚举系统中的两个独立 EPS、Linux 将执行条形图映射、入站和出站映射、中断注册到 ARM GIC。 对于 DSP 端、如果您运行 RTOS、它将执行相同的操作、但没有枚举、并将中断注册到 C66x 内核。 您可以使用 C66x 进行数据移动和中断、然后需要在 Linux 中禁用 PCIe 中断注册。 这是 Linux 和 RTOS 的混合使用来分离 PCIe 功能、您需要进行一些试用。

    我们有一个用例、客户在 Linux 器件树中完全禁用了 PCIe、并使用 Linux 将 DSP 映像下载到 C66x、让 C66x 完全处理 PCIe。 但是、由于系统中有两个 EPS、因此在您的情况下似乎会出现问题。

    我知道 Linux 代码的逆向工程师是有问题的。 该文件夹还具有适用于 PCI-KeyStone-dw.c 中 Keystone II 器件的 PCIe 驱动程序 您可以了解 CFG_SETUP 是如何在此处编程的、并在任何相似情况下将调用流与 DRA7进行比较的。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Eric:

    感谢您的反馈。 是的、我们现在可以在 DSP/M4中完成 PCIe 数据移动和中断。 我们希望保持该状态、以便我们可以使用 A15内核周期来执行其他操作。

    我们已经在 C66x 中有一个具有单个端点的工作模型。 但是、正如您说过的、PCIe LLD 在设计时考虑了单个 EP。

    我将在下周尝试混合设置、看看能否使其正常工作。 我唯一需要删除的是 ARM 上的中断注册。 我可以在 DSP 应用程序中重做入站和出站映射。

    此致、
    戴维