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.

[参考译文] AM5728:在 Linux 中重新初始化 DSP、IPU、PRU 问题

Guru**** 2540720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/615501/am5728-dsp-ipu-pru-issue-with-reinitialization-in-linux

器件型号:AM5728

你好

我们有以下情况。

我们需要使用 TI RTOS 应用程序尽可能快地加载和启动 DSP/IPU/PRUSS 内核、因此我们使用通过 SBL 加载的多核应用二进制文件。

我们还在多核应用中将 SPL 用作 A15内核的应用。

A15内核加载 SPL -> u-boot -> Linux。

Linux 重置并重新初始化 DSP/IPU/PRUSS 内核(我们不知道在哪里)、并尝试使用默认应用程序(使用 Remoteproc 驱动程序)加载它们。

如果我们删除默认应用(位于 lib/固件中)、则内核仍会在 Linux 启动时复位。

我们必须避免在 Linux 中重置和重新初始化 DSP/ IPU/PRUSS 内核、因此通过 SBL 加载的应用程序在加载 Linux 后仍能继续工作。

我们如何实现这一点?

P.S. 我们还需要在内核中为 Linux 和 TI RTOS 应用程序提供 IPC 功能。 可能的解决方案不应影响它。

我认为在这种情况下,Remoteproc 驱动程序必须能够正常工作。

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

    Pavel、

    如您所见、Linux Remoteproc 驱动程序将在 Linux 引导过程中重置、加载并运行内核(DSP/IPU/PRU)。 阻止这种情况发生的最简单方法是禁用与内核相对应的器件树节点。 但是、这将使 Linux 完全不知道内核的存在、因此您将失去 Linux 和 TI RTOS 应用程序之间的 IPC 功能(如果您的 IPC 依赖于 Linux Remoteproc 驱动程序)。

    一种解决方案是让您离开器件树、但修改 Remoteproc 驱动程序的功能以阻止 Linux 引导过程尝试重置/重新加载内核。 DSP 和 IPU 内核的探测函数可在 drivers/remoteproc/OMA_remoteproc.c 文件的'omap_rproc_prob'函数中找到。 PRU 内核的探测函数可在 drivers/remoteproc/pruss.c 文件的'pruss_probe"函数中找到。

    因此、我看到的三个选项是:

    1. 使用提供/支持的 Remoteproc 驱动程序加载 IPU/DSP/PRU 内核
      1. 您的内核将在 Linux 引导过程中启动、这可能对您来说不够快
    2. 禁用器件树中的 IPU/DSP/PRU 节点以停止 Linux 重置/重新加载它们
      1. 这将允许您在 SBL 过程中加载内核、Linux 应将其单独保留
      2. 您很可能需要在内核之间修改 IPC、因为 Linux 不再知道内核、因为它们不在器件树中
    3. 修改 Remoteproc Linux 驱动程序以不再执行重置/重新加载功能
      1. Linux 和 DSP/IPU/PRU 内核之间可能仍具有 IPC 功能、但无法执行驱动程序的复位/重新加载功能
      2. 这不是我们支持的用例之一、因此您需要自行进行这些修改

    Jason Reeder

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

    Pavel、

    您描述的用例被称为"早期启动和后期连接"功能、该功能目前在 DRA7xx 中受支持、但 AM572x 目前支持 μn`t。 您可以在此处的 wiki 文章中参阅在 DRA72xx 上实现此功能:
    processors.wiki.ti.com/.../Early_Boot_and_Late_Attach_in_Linux

    请注意、使用 Processor SDK RTOS 中的 SBL 以及 u-boot 存在一些风险。 SBLn`t 到电路板库并初始化时钟、引脚多路复用器和 DDR、然后 Uboot 会覆盖该时钟和引脚多路复用器、因此我们建议按照此处所述使用 SBL。

    在 DSP/IPU 上具有 ARM Linux 和 RTOS 的系统中、我们当前期望 ARM Linux 启动、然后在 IPU 和 DSP 上加载固件、如下所述:
    processors.wiki.ti.com/.../Linux_IPC_on_AM57xx

    此致、
    Rahul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们已按照 processors.wiki.ti.com/.../Linux_IPC_on_AM57xx 中所述向 IPC 示例添加外设的说明进行操作
    这些示例将从 Linux 加载。

    但是、我们需要相同的文件来从 MLO 通过多核应用文件进行引导。

    我们已将 BIOS/ex02_MessageQ 示例内容添加到 DSP 和 IPU 的 GPIO 应用中、但无法连接它们。
    (其中一个应用程序在 MessageQ_open 上失败)

    我们还需要在 A15上的 Linux 和从 MLO 加载的 DSP/IPU 上的 TI RTOS 之间建立 IPC 连接。

    从 MLO 引导时、IPU 内核上的 IOMMU 设置是否存在任何特定问题。

    或者、是否有关于如何将外设添加到 IPC TI RTOS 示例以及如何通过 MLO 引导它们(尤其是 IPU)的指南?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、

    您上一篇文章与 RTOS 相关。 您能否打开一个新主题? 我看到您有另一个与该线程相关的线程、用于早期启动/后期连接。 我们可以关闭这个并转到该主题吗?

    谢谢!

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。 我们可以关闭该线程