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/am5726:M4上的 PCIe LLD 功能出现问题

Guru**** 2614265 points
Other Parts Discussed in Thread: AM5726

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/581937/rtos-am5726-issue-with-pcie-lld-function-on-m4

器件型号:AM5726

工具/软件:TI-RTOS

您好!  

这是此主题的后续问题:  

现在、我遇到了另一个问题。  

如上一个线程中所建议的那样、我已经将 M4上的 PCIe 配置空间从0x2000_0000重新映射到0xA000_0000。 现在、如果我使用内存浏览器、我可以在地址0xA400_4000处看到远程设备和供应商 ID。 现在、我尝试使用 PCIe LLD 读取这些寄存器。 我使用了以下代码:  

pcieRegisters_t myRegs ={0};

pcieVndDevIdReg_t myRemoteCfgDevAndVendorID ={0};
myRegs.vndDevId =&myRemoteCfgDevPrintVendorID;

if (RetVal = Pciev1_readRegs (handle、PCIe_location_remote、myepdendorID)=&myRemoteCfrom_remote_remote_remote_remote_eIdPrintVendorID);if (RetVal =(RetVx1)

和 myPCIe_readRegs)读操作失败!"PCIe_readDireLog RetVal=%d\n"、RetVal);
}
否则
{
Log_print2 (Diags_info、"本地供应商 ID:%x、设备 ID:%x\n"、myRemoteCfgDevAndVendorID.vndId、myRemoteCfgDevAndVendorID.devId);
} 

我的第一个问题是、我始终为两个 ID 获取0xFFFF。  

第二个问题是、当我尝试在地址0xA400_4000处强制读取时、M4崩溃、并在 Linux 控制台中输出以下内容:

[45.094907] OMAP-L3_NOC 44000000.OCP:L3应用程序错误:目标5 mod:1 (不可清除)
[45.094920] OMAP-L3_NOC 44000000.OCP:L3调试错误:目标5 mod:1 (不可清除) 

为什么我可以在内存浏览器中读取它、但无法读取代码中的值?

此致、

戴维

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

    器件型号:AM5726

    工具/软件:TI-RTOS

    您好!  

    在我的项目中、我通过 PCIe 将 AM5726连接到 Cyclone V FPGA。 到目前为止、我们已经能够正确地枚举 DSP 中的 PCIe 端点以及配置 FPGA 和 DSP 之间的 DMA 事务。 但是、我们需要 DSP 中 PCIe 驱动程序用于编解码器处理的 MIPS。 因此、我们决定在 M4中移动 PCIe 驱动器

    我正在努力使 PCIe 枚举在 M4处理器中正常工作。 我已经有另一个线程用于解决该问题。  

    我想知道是否可以实施以下工作流程来解决我的问题。

    1. 枚举 DSP 上的 PCIe 端点
    2. 在 DSP 中配置 OB 和 IB 转换。 但是、使用来自 M4内核0的 L2SRAM 地址。  
    3. 在 DSP 中配置 DMA
    4. 配置由 M4处理的 PCIe 中断。  

    这在 Sitara 处理器中是可行的吗?

    谢谢、

    戴维

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

    我没有听说过 TI 关于这一点的任何信息。
    有人对为什么在 ARM 上生成此异常有任何想法吗?

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

    很抱歉耽误你的回答! 为什么 M4可以从 CCS 菜单窗口中看到 PCIe DeviceID/供应商 ID、而不是从代码中看到、我将在明天尝试在 M4上运行代码的情况下进行设置。

    为什么 Linux 强制读取崩溃、如何从 M4读取0xa000_4000? 它是否类似于 devmem2? 或者、您是否有应用程序在 Linux 和 M4之间发送/接收 IPC 消息?

    对于建议、
    枚举 DSP 上的 PCIe 端点
    2.在 DSP 中配置 OB 和 IB 转换。 但是、使用来自 M4内核0的 L2SRAM 地址。
    3.在 DSP 中配置 DMA
    配置 PCIe 中断、使其由 M4处理。

    第1点和第2点是一次性的。 您可以使用 DSP 代码来实现它。 通过 TRM、M4也可以访问 L2SRAM 0x4100_0000。

    第3点、配置 EDMA 是一次性的、下一次传输会怎么样? 您是否重新加载相同的 EDMA OPT 参数、或者每次都必须使用一些不同的参数(例如源、目的)、并且必须通过 DSP 重新配置? 如果这是重复工作、您是否考虑将 M4用于 EDMA?

    第4点、也可以实现。

    我的整体思路是将 PCIe 初始化、EDMA 和中断划分在多个位置的编码复杂性。

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

    无需道歉。 但这只是我正在进行的项目中的一个重要的事情,我不希望这成为关键的路径:)。

    在 M4上、我使用运行 SYS/BIOS 的 M4处理器中的 PCIe LLD 读取寄存器函数读取0xA000_4000。 我还尝试取消引用指向0xA000_4000的指针、并得到相同的结果。 每次尝试从 PCIe 远程配置寄存器读取值时、我都会在 Linux 控制台上打印 L3错误。 之后、M4处理器无响应。

    现在、正如您指出的、我正在尝试限制应用的复杂性。 如果可能、我希望拥有 M4中的所有内容(PCIe 配置和枚举、EDMA 设置和 PCIe 中断处理)。

    关于 EDMA、我有一个乒乓缓冲器、因此我的参数集可以在初始化阶段进行编程。 传输之间不需要重新配置、因为我也在参数集中设置了 linkAddr 参数。 EDMA 传输需要在接收到 PCIe 中断时启动。

    再次感谢您的帮助。 如果有任何帮助,将不胜感激。
    此致、
    戴维