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.

[参考译文] TDA4VM:在分离模式下仅运行 R5F core0

Guru**** 2416110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1532198/tda4vm-running-only-r5f-core0-in-split-mode

器件型号:TDA4VM

工具/软件:

尊敬的:

我们使用的是内核 6.6.80、在“drivers/remoteproc/ti_k3_r5_remoteproc.c"中“中、如果 core1 在拆分模式下失败、有一个代码会清除 core0。

       /* undo core0 upon any failures on core1 in split-mode */
       if (cluster->mode == CLUSTER_MODE_SPLIT && core == core1) {
               core = list_prev_entry(core, elem);
               rproc = core->rproc;
               kproc = rproc->priv;
               goto err_split;
       }

1.

这是什么原因? 我们目前没有 core1 固件、但将来会有。

删除此代码可以让我们在 core0 上运行固件、即使 core1 无法加载固件并启动。

2.

同样在该文件中、它指出 core0 必须保持比 core1 更高的功率状态。 这是否意味着如果 core0 由于某种原因必须重新启动、我们首先必须停止 core1?

3.

在同一个文件中、如果 rproc 未从重置中释放、以下代码将删除该 rproc。

                ret = wait_event_interruptible_timeout(cluster->core_transition,
                                                       core->released_from_reset,
                                                      msecs_to_jiffies(2000));
                if (ret <= 0) {
                       dev_err(dev,
                                "Timed out waiting for %s core to power up!\n",
                                rproc->name);
                       goto err_powerup;
                }

由于我们没有 core1 的固件、但我们进入此清理、rproc 将被删除。 通过删除“goto err_powerup“ core1、可以设置 rproc、但内核处于“离线“状态。 然后、我们可以加载固件并在运行时启动 core1。 在“脱机“状态下创建 rproc 是否存在风险/缺点?

在运行时加载固件并启动内核时、为什么缺少固件会被视为错误? 我们的计划是通过应用程序选择固件。 当前实现需要我们重新加载内核模块和已在运行 R5F 内核的中断。

此致、

奥利弗·塔列夫斯基

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

    您好、Oliver:

    原因是什么? 我们目前没有 core1 的固件、但将来会有。

    此逻辑位于  k3_r5_cluster_rproc_init () 函数中、该函数作为驱动程序探测函数的一部分被调用。 不会 为每个核心单独调用探测函数、而是为群集调用一次探测函数。 该逻辑是探头故障时展开逻辑的一部分、我们不能有部分成功/失败的情况、因为驱动程序设计为在模块加载和探头过程中执行固件的自动启动。

    删除此代码使我们能够在 core0 上运行我们的固件、即使 core1 无法加载固件并启动。

      首先、k3_r5_cluster_rproc_init () 函数的哪个部分失败了? 这只是注册逻辑。

    同样、在同一个文件中、它还指出 core0 必须保持比 core1 更高的功率状态。 这是否意味着如果 core0 由于某种原因必须重新启动、我们首先必须停止 core1?

    是、这是拆分模式的硬件条件。 锁步模式和分离模式之间存在不同的上电和断电序列。

    如果在运行时可以加载固件并启动内核、为什么缺少固件会被视为错误? 我们的计划是通过应用程序选择固件。 当前实现需要我们重新加载内核模块和已在运行 R5F 内核的中断。

    在 commitremoteproc: k3-R5: 修复    上电 失败时的错误处理中说明了这方面的逻辑

    总体而言、驱动器状态机旨在处理锁步模式和分离模式以及内核启动与早期启动的多种组合、同时处理多种接口控制。

    它不适用于配置为拆分模式、而仅引导一个内核、因为这只是使整个驱动器状态机更加复杂。 这是您的产品中的一种部署选择、如果您只对运行一个内核感兴趣、也可以将群集配置为锁步模式;如果您有另一个内核的固件、则可以切换到拆分模式。 从电源的角度来看、不会有显著差异。  

    此致

    Suman