主题中讨论的其他器件:AM6442、 AM6422
工具/软件:
尊敬的专家:
目前、我们正在尝试使用 Uboot 在 R5F 内核上加载软件。
在 EVM 或通过 JTAG 均能正常工作。
但是、使用我们自己的自定义硬件后、它不再起作用。
中使用的磁芯略有不同
EVM:AM6442 (4-R5F 内核)
定制硬件:AM6422 (2个 R5F 内核)
我们是否需要考虑或更改任何内容以同时为 AM6422启用 Uboot?
此致、
Alex
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.
工具/软件:
尊敬的专家:
目前、我们正在尝试使用 Uboot 在 R5F 内核上加载软件。
在 EVM 或通过 JTAG 均能正常工作。
但是、使用我们自己的自定义硬件后、它不再起作用。
中使用的磁芯略有不同
EVM:AM6442 (4-R5F 内核)
定制硬件:AM6422 (2个 R5F 内核)
我们是否需要考虑或更改任何内容以同时为 AM6422启用 Uboot?
此致、
Alex
大家好、
摘要
好的、我想我有足够的信息供您在接下来的几天里取得进展。 我没有时间在硬件上运行测试、但对驱动程序的分析使我相信、如果不修改软件、硬件测试将无法正常工作。
首先、未使用 AM6422等 AM64x 器件型号测试 uboot rproc 驱动程序、仅使用超集器件(AM6442)。 虽然 u-boot 的 SDK 9.2.1.10版本和 u-boot 的 SDK 11.0版本中都定义了 cluster_MODE_SINGLECPU、但它实际上并未使用。 需要修改 U-Boot 驱动程序。 请参阅 Linux 驱动程序的功能。 另外、请告知我们您所做的软件更改、因为我们应该为 uboot 驱动程序打补丁、以便为每个人启用此功能。
详细信息
我们将了解 uboot 驱动程序
drivers/remoteproc/ti_k3_r5f_rproc.c
以及 Linux 内核6.1驱动程序
drivers/remoteproc/ti_k3_r5_remoteproc.c
仪表组模式很重要。 我们将使用 AM64x 特有的单 CPU 模式(即不同于 AM62x 单核模式):
ti_k3_r5_remoteproc.c
/*
* All cluster mode values are not applicable on all SoCs. The following
* are the modes supported on various SoCs:
* Split mode : AM65x, J721E, J7200 and AM64x SoCs
* LockStep mode : AM65x, J721E and J7200 SoCs
* Single-CPU mode : AM64x SoCs only
* Single-Core mode : AM62x, AM62A SoCs
*/
enum cluster_mode {
CLUSTER_MODE_SPLIT = 0,
CLUSTER_MODE_LOCKSTEP,
CLUSTER_MODE_SINGLECPU,
CLUSTER_MODE_SINGLECORE
};
此处 Linux 驱动程序中的注释听起来与您在尝试初始化 TCM 存储器时观察到的问题相关:
ti_k3_r5_remoteproc.c
/*
* The R5F cores have controls for both a reset and a halt/run. The code
* execution from DDR requires the initial boot-strapping code to be run
* from the internal TCMs. This function is used to release the resets on
* applicable cores to allow loading into the TCMs. The .prepare() ops is
* invoked by remoteproc core before any firmware loading, and is followed
* by the .start() ops after loading to actually let the R5 cores run.
*
* The Single-CPU mode on applicable SoCs (eg: AM64x) only uses Core0 to
* execute code, but combines the TCMs from both cores. The resets for both
* cores need to be released to make this possible, as the TCMs are in general
* private to each core. Only Core0 needs to be unhalted for running the
* cluster in this mode. The function uses the same reset logic as LockStep
* mode for this (though the behavior is agnostic of the reset release order).
* This callback is invoked only in remoteproc mode.
*/
static int k3_r5_rproc_prepare(struct rproc *rproc)
{
...
/* Re-use LockStep-mode reset logic for Single-CPU mode */
ret = (cluster->mode == CLUSTER_MODE_LOCKSTEP ||
cluster->mode == CLUSTER_MODE_SINGLECPU) ?
k3_r5_lockstep_release(cluster) : k3_r5_split_release(core);
if (ret) {
dev_err(dev, "unable to enable cores for TCM loading, ret = %d\n",
ret);
return ret;
}
您将注意到 u-boot 驱动程序中缺少为单 CPU 模式执行锁步释放的代码。 由于"拆分"版本在实际"锁步"版本是正确选择时使用、可能 TCM 未正确初始化、从而导致您的挂起。
一旦我们添加用于处理 AM64x 单 CPU 模式的逻辑、我预计您应该能够在 u-boot 器件树中在单 CPU 模式下传递。 然后、TCM 存储器初始化应开始工作。 有关如何将 AM64x R5F 子系统设置为单 CPU 模式的示例、请参阅中的示例补丁
AM64x Academy > Multiple >禁用 Linux 中的远程内核
https://dev.ti.com/tirex/explore/node?node=A__AWQEpuVOCljkhxqRi05Qpw__AM64-ACADEMY__WI1KRXP__LATEST
此致、
Nick