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.

[参考译文] TDA4VE-Q1:在 Linux 内核引导期间、所有内核都挂起

Guru**** 2756835 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1597006/tda4ve-q1-all-cores-hang-during-linux-kernel-boot

器件型号: TDA4VE-Q1
主题: SysConfig 中讨论的其他器件

尊敬的 TI 专家:

SW:SDK10.1

HW:我们的定制电路板

在引导测试期间、系统偶尔会在 Linux 内核引导期间卡住、大约每 3000 次引导尝试就卡住一次。

通过 CCS 连接时、发现所有内核都卡在错误处理功能中。 如“Memory Browser“中所示、当尝试通过 CCS 将值写入 DDR 时、所有数据都重置为零。

 

20251211-100905.jpg

图中显示了详细的 Linux 调用堆栈:

20251211-100916.jpg

以下是悬挂和正常情况下的输出:

hang.log

ok.log 

此致

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

    顺便说一下、我们在正常启动期间观察到了一种异常现象。 我们的 DDR 配置包括 DDR0 (2GB  K4F6E3S4HB-KHCL) 和 DDR1 (1GB  K4F8E3S4HD-GHCL)、总容量为 3GB、启用了交错模式。 如图所示、我们发现 DDR0 和 DDR1 的初始化值有很大不同:在交错区域内、DDR0(涵盖从 0x0080000000 到 0x008000007F 的地址范围)将其数据初始化为 0xFF。 相比之下、后续的 DDR1 段(跨越地址 0x0080000080 至 0x00800000FF)的初始化数据设置为 0x00。  DDR INTERLEAVE 区域值不同是否正常?

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

    您好、

    设备是否始终悬挂在同一位置?

    内核日志在您的系统中被禁用。 您能提高内核的日志级别并共享日志吗?

    此致、
    Tanmay

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

    您好、 Tanmay、

    设备是否始终悬挂在同一位置?

    悬挂 点各不相同、始终发生在 Linux 内核启动的早期阶段。

    您能否提高内核的日志级别并共享日志。

    我们已启用内核日志记录、目前正在进行测试。

    顺便说一下、我们在正常启动期间观察到了一种异常现象。 我们的 DDR 配置包括 DDR0 (2GB  K4F6E3S4HB-KHCL) 和 DDR1 (1GB  K4F8E3S4HD-GHCL)、总容量为 3GB、启用了交错模式。 如图所示、我们发现 DDR0 和 DDR1 的初始化值有很大不同:在交错区域内、DDR0(涵盖从 0x0080000000 到 0x008000007F 的地址范围)将其数据初始化为 0xFF。 相比之下、后续的 DDR1 段(跨越地址 0x0080000080 至 0x00800000FF)的初始化数据设置为 0x00。  DDR INTERLEAVE 区域值不同是否正常?

    这种现象是否正常?

    此致

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

    您好、 Tanmay、

    我们已启用内核日志记录、目前正在进行测试。

    启用内核日志记录后、Linux 无法通过 UART 输出错误消息。  以下是悬挂和正常情况下的输出:

    e2e.ti.com/.../hang_2D00_kernel.loge2e.ti.com/.../ok_2D00_kernel.log

    以下是通过 CCS 获取的调用栈信息。

    此致

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

    尊敬的 TI 专家:

    在新的启动挂起过程中、我们发现了一个重要的线索:

    如下图所示、 MCU2_0 内核的栈指针变量 pxStack(地址 0xA28AEF58) 被 0x00 意外覆盖、导致系统挂起栈溢出检查。

    进一步检查附近存储器区域后发现异常访问边界:

    地址 0xA28AF07F 不可写、并且前面的 128‑字节范围 (0xA28AF000–0xA28AF07F、偏移 0x0–0x7F) 用零填充、并且完全无法访问(既不可读,也不可写)。

    地址 0xA28AF080 是可写的、并且以下 128‑字节范围 (0xA28AF080–0xA28AF0FF、偏移 0x80–0xFF) 正常运行。

    0x7F/0x80 边界与 128‑字节分段对齐。 在我们的存储器映射中、0x0–0x7F 范围属于 DDR0 的一个段、而 0x80–0xFF 属于 DDR1 的一个段。

    发生故障时、整个 DDR0 区域变得不可读/不可写并读为全零、而 DDR1 区域保持完全正常工作。  这可能是什么原因?

    此致

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

    尊敬的 TI 专家:

    目前、我们的目标是迫切的 您能否告知是否有任何进展?

    此致、

    谢 JC

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

    您好、xie JC、

    据我所知、您只有前 2GB 的交错内存、但 后一个 1GB 不是。 在这种情况下、DDR 控制器是否配置 正确? 是否也要与@Kevin 一起审查此配置?

    此致、

    Brijesh

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

    您好 、Brijesh、

    下面是我们当前的 DDR 配置。 您能回顾一下吗?

    e2e.ti.com/.../SPRACU8B_5F00_Jacinto7_5F00_DDRSS_5F00_RegConfigTool_2D00_DDR0_2D00_2GB_2D00_DDR1_2D00_1GB_2D00_OK.zip

    我们已经发现、在新的 DDR0 SysConfig 中默认启用数据总线反转。 此修改的目的是什么?

    此致

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

    您好、

    我们发现、在新的 DDR0 SysConfig 中、数据总线反转默认处于启用状态。 此修改的目的是什么?

    我们发现打开 DBI(适用于读取和写入)有助于提高眼图裕度;因此、我们决定默认将其打开。  

    您是否尝试过在配置中启用 DDRSS0 的 Read DBI、以查看它是否对失败有任何影响? 请注意、读取延迟应根据频率和读取 DBI 配置进行设置。

    此致、
    Kevin

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

     尊敬的 Kevin:

    为 DDRSS0 启用读取 DBI 后、不再发生问题。 感谢您的支持。

    此致