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.

[参考译文] 66AK2E05:来自 ARM 和 DSP 的 PCIe 中断

Guru**** 2562870 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/578361/66ak2e05-pcie-interrupts-from-both-arm-and-dsp

器件型号:66AK2E05
Thread 中讨论的其他器件:SYSBIOS

我将通过 PCIe 与 FPGA 进行通信。  当我使用具有 PCIe 中断的 ARM 时、一切都很好。  当我使用具有 PCIe 中断的 DSP 时、一切都很好。  当我想使用 ARM 和 DSP 通过 PCIe 与 FPGA 进行通信时、Linux 崩溃。

使用 PCIe MSI 1的 ARM 和使用 PCIe MSI 2的 DSP。

当 ARM 和 DSP 都需要访问 PCIe 中断时、似乎存在仲裁问题;是否存在相关的配置解决方法。  这种 ARM 和 DSP 都可以访问 PCIe 的情况是否可行?

提前感谢您!

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

    K2E 有两个独立的 PCIe 控制器、假设客户刚才讨论的是将同一个控制器用于 ARM 和 DSP? FPGA 是否是 PCIe EP 和 K2E PCIe RC? K2E 是 MSI 收件人吗?

    使用相同的 PCIe 中断控制器、同时向 GIC (Linux A15)和 CIC (到 C66x)内核注册、但使用不同的 MSI 矢量、如果从控制器的角度来看这是可行的、我们需要研究一下。

    对于软件方面、当我阅读电子邮件时、我假设您仅从一侧(可能是 Linux)配置了 PCIe、而 Linux 器件树注册了 PCIe 中断。 Linux OS 将 MSI 地址写入 PCIe 配置空间、因此 EP 知道要为 MSI 生成写入哪个地址? 此外、您还向 C66x 端注册了 PCIe 中断。

    有一些实验"运行并同步 DSP 和 ARM 读取/写入 FPGA "、似乎没有成功? 您能确认吗? 我认为 Linux 或 DSP 都需要设置 PCIe 出站转换、最多可以有32个这样的区域。 然后、A15和 DSP 访问各自的区域以访问 FPGA 侧的单独存储器、这应该是可以的。

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

    此外、从 PCIe 和中断控制器的角度来看、允许将相同的 PCIe 中断线路同时注册到 GIC 和 CIC、但我们没有这样的客户用例。 ISR 代码处理不同的中断号会非常复杂、因为 ARM 内核和 DSP 内核独立工作、需要代码来避免争用或丢失中断、如果客户希望 PCIe 中断实时工作、则不建议使用此方法。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想用补充资料来跟进这一问题,因为这是我最初的问题。 最近的测试表明、虽然有一个根本问题、但它与 PCIe 中断无关、而是 K2E 在 PCIe 接口上成功仲裁 ARM 和 DSP 访问之间的问题。

    K2E PCIe 配置为 RC、我们有一个 FPGA 端点。 端点配置了256 MB 的单个条形区域、因此、我们在 FPGA 中有许多寄存器可供 K2E 作为存储器映射区域使用。 K2E PCIe 配置有32个出站区域、每个区域8MB。

    我们在 ARM 和 DSP 上运行了一些简单的测试代码。 使用 IPC 从 Linux 加载 DSP 映像。 测试代码基本上允许启用和禁用从每个器件通过 PCIe 读取和写入 FPGA。 这些读取和写入基本上在1ms 计时器上运行、包括从1到64次读取和写入 FPGA 中的寄存器的任何位置。 此外、我们的 FPGA 还具有独立的以太网调试接口、允许我们在同一个寄存器中进行查看和查询。 下面是我们运行的测试方案、其中包含结果。

    1. ARM 只执行读取操作-工作正常
    2. ARM 执行读取和写入-工作正常
    3. DSP 只执行读取-工作正常
    执行读取和写入的 DSP -工作正常
    5. ARM 和 DSP 只执行读取-工作正常
    6.执行读取和写入的 ARM 和执行只读的 DSP -工作正常
    7.仅执行读取操作的 ARM 和执行读取和写入操作的 DSP -这基本上会使整个 K2E 芯片崩溃、而 ARM 控制台消失了、试图将 CCS 连接到 DSP 报告 DSP 内核被挂起
    8.在 ARM 测试同时运行3个进程的情况下重复测试6 -工作正常

    K2E 崩溃后、我们仍然能够使用 FPGA 调试以太网接口来查询一些调试寄存器、FPGA 端的一切看起来都很好(我们目前正在 FPGA 端添加其他调试、 但不确定它是否会告诉我们更多信息)。 此时(无需对 FPGA 进行任何更改)、我们可以重置 K2E、它会引导、加载 Linux、并成功将 PCIe 总线枚举到 FPGA、然后可以再次运行任何成功的测试。

    所有这些似乎都证明这是 FPGA 问题。 此外、所有这些测试都是在 ARM 和 DSP 读取/写入不同的出站存储器区域以及读取/写入具有相同结果的相同出站存储器区域的情况下执行的。

    在 K2E 方面还有什么其他需要寻求的想法吗? K2E 中 PCIe 内核的错误配置是否会导致这样的行为? 这些结果实际上显示、只要 DSP 不是尝试写入寄存器的器件、K2E PCIe 内核就会成功仲裁所有 ARM 和 DSP 访问。

    我们还考虑在 FPGA 上使用第二个条状区域、并尝试在两个条状区域之间隔离 ARM 和 DSP 访问、 但我所描述的测试结果确实表明、这不会改变任何情况、因为 PCIe 的 FPGA 端不知道 PCIe 事务是来自 ARM 还是来自 DSP。

    提前感谢您对此问题的任何意见/反馈。

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

    ATM 端运行 Linux、DSP 端运行 RTOS? "基本上在1ms 计时器上运行、包括从1到64次读取和写入 FPGA 中的寄存器的任何位置"。

    1) 1)如何在步骤6中同时从 ARM 读取和写入? 还是从 DSP 获取?
    2) 2)这1ms 计时器是否在 ARM 和 C66之间同步? 那么、从 A15和 C66x 进行 PCIe 访问的同时发生?

    例如、您能否为我的问题1)和2)说明一个时间图?

    3) 3)" FPGA 中的寄存器"。 我不熟悉 FPGA。 您是说 FPGA 有256MB 的寄存器吗? 或者、您的意思是256MB 内存空间、例如 TI 器件、可以是 DDR、L2和较小的寄存器区域吗?
    4) 4)问题是否与 MSI 相关?

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

    是的、ARM 正在运行 Linux、DSP 正在运行 SYSBIOS。  Linux 配置 PCIe。  DSP 通过 mpmsrv 启动、并使用 IPC

    FPGA 具有256MB 内存空间(整个 PCIe 内存空间)、由16个片选区域组成。  每个1被分成具有寄存器的区域和连接到 FPGA 中的块 RAM 的区域。

    以下伪代码同时执行、但在 ARM 和 DSP 上异步执行。  每个内核上的读取和写入按顺序进行、但期望 ARM 和 DSP 上都有足够的读取和写入、因此 PCIe 必须对访问进行仲裁。

    uint8_t buffer[num_Bytes];

    while (1)

     如果(READ_ENABLED)
     {
       //将数据从 FPGA 读取到缓冲区
       memcpy (&buffer、&FPGA_registers、num_Bytes);
     }

     如果(WRITE_ENABLED)
     {
       //将缓冲区中的数据写入 FPGA
       memcpy (&FPGA_registers、&buffer、num_Bytes);
     }

     //休眠1ms
     睡眠(1);

    Brian