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:PCIe MSI 地址映射

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/654815/rtos-am5728-pcie-msi-address-mapping

器件型号:AM5728

工具/软件:TI-RTOS

您好!

我有一个设置、其中 AM572x DSP 内核侧运行 RC、FPGA 运行 EP。 现在、FPGA 发送 MSI 中断、在 RC 模式下、我需要处理它。

下面提供了有关 FPGA MSI 功能的一些详细信息

描述符名称       偏移        值

 CapID               0x50        0x5

 下一个指针           0x51        0x78

 消息控制       0x52        0xA5

消息地址      0x54        0xFEE0F00C

消息高位地址0x58        0x0

消息数据          0x5C        0x49B4

从这一点我了解到 FPGA 已启用 MSI、消息控制字段的 MMC[19-17]为2、这意味着 FPGA 可以通过地址0xFEE0F00C 和数据0x49B4发送2个 MSI 中断

如何在我的 RC 代码中配置 MSI 地址。 MSI 消息通过任何 PCIe 入站地址区域处理? 交换哪个地址空间 MSI 消息。

用 地址0xFEE0F00C 对 MsiCtrlAddr 寄存器进行编程是否足够?

如何区分2个 MSI 中断与 RC FPGA?

在 TI 的 PCIe 示例代码中,在 PlatformSetupMSIAndINTX 函数中,对 RC msiCtrlAddr 进行了编程 ,PCIe_window_MSI_ADDR 和 EP MsiLowAddress 是 PCIe_window_MSI_ADDR>>>2.

在 PlatformMsiIntxIsr ISR 函数 中(msiBits[0].msiCtrlIntStatus = 1)表示 RC 已接收 MSI 中断

MSI 控制器中断#N 状态寄存器(RC 模式 MSI 接收器)
N = MSI 数据[7:5]且 STATUS[i]= MSI 矢量#I 的状态、其中 i = MSI 数据[4:0]
我假设 MSI 矢量区分 MSI 中断1和2

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

    请告诉我有关这方面的最新信息

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

    MSI 中断基本上是一个存储器写入事务。 首先、您需要确保 RC 和 EP 都可以通过启用 RC 和 EP 端状态和命令寄存器中的 BUS_MS 和 MEM_SP 位来初始化和接受存储器访问。

    然后、您需要在 EP 侧执行存储器写入(将消息数据写入消息地址)、以便通过 PCIe 链路传输 MSI 数据包。 在 RC 侧、您需要一个条形图配置来接受像0xFEE0F00C 这样的传入地址。 此外、对地址为0xFEE0F00C 的 MsiCtrlAddr 寄存器进行编程。

    MSI 控制器中断#N 状态寄存器(RC 模式 MSI 接收器)
    N = MSI 数据[7:5]且 STATUS[i]= MSI 矢量#I 的状态、其中 i = MSI 数据[4:0]
    我假设 MSI 矢量区分 MSI 中断1和2 =>这是正确的。

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

    请告诉我如何配置条形图以接受传入的 MSI 地址(MSI 地址0xFEE0F00C)

    我需要这些信息的原因让我解释一下。

    我有这样的设置。 我有 AM5728。 DSP 内核将 TI RTOS 作为 RC 运行、并将 FPGA 作为终点。 和 RC 触发器在两个不同的 PCIe 地址空间中使用 EDMA 向 FPGA 发送和接收数据。  

    因此、我知道我必须配置两个 OB ATU 来从 FPGA 发送和接收数据。 由于 RC 收到 MSI 消息,我想知道如何为接受 MSI 地址执行条形图配置

    此外、

    我假设运行 Linux RTOS 的 AM5728 ARM 端执行 RC 和 EP 枚举。 现在、我应该如何对 MSI 消息进行条形图配置?   

    否则、假设 ARM Linux 不进行枚举、并且 RC 应该进行自配置(如 TI PCIe drv 示例中提供的示例代码所示)。 在示例代码中、RC 和 EP 都是自配置的)、我不知道如何从 RC 配置 FPGA。

    因此,请告诉我,在我的情况下,什么是可行的。 ARM 应该负责枚举、还是 DSP RC 代码应该进行自配置以及 FPGA 端点的配置?

    请尽快答复我。

    谢谢你。

    此致

    Manjula

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

    器件型号:AM5728

    工具/软件:TI-RTOS

    您好!

    在我接收 MSI 中断后、必须通过 EDMA 接收数据。 从 FPGA 接收数据必须发生在下半部分 ISR 中。

    那么、我如何创建任务并等待信标挂起、以便当我获得 MSI 中断时、我可以执行信标发布、并且我的任务可以接管对数据的读取

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

    请向我提供有关此内容的最新信息。

    一个位于 MSI 配置上。

    第二个是在驱动程序中创建任务、以在下半部分 ISR 中执行 EDMA 接收。

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

    请任何人更新此内容。 这将有助于我的进一步实施。

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

    RTOS PCIe 代码不执行枚举。 因此、以 RC 形式运行的 DSP 无法配置以 EP 形式运行的 FPGA。 它们必须单独配置。

    如果您在 A15上运行 Linux、Linux OS 可以枚举 PCIe EP、以便配置 FPGA。 我认为 Linux 应该能够读取 FPGA 的 MSI 功能寄存器、并设置条形图和入站转换以接受出现的 MSI 中断。

    对于信标挂起/发布实现、您可以查看 processors.wiki.ti.com/.../BIOS_Training:_Semaphores
    www.youtube.com/watch

    software-dl.ti.com/.../Semaphore.html

    此致、Eric