工具/软件:
尊敬的:
我们使用的是内核 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 内核的中断。
此致、
奥利弗·塔列夫斯基