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.

[参考译文] TDA4VEN-Q1:J722S EVM 取代 2G DDR 会导致 CPU 异常冻结、SMC 功能探针中的 PV 时间故障和 SMP 启动故障

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1647167/tda4ven-q1-j722s-evm-replacement-of-2g-ddr-causes-abnormal-cpu-freeze-pv-time-failure-in-smc-feature-probe-and-smp-bring-up-failure

器件型号: TDA4VEN-Q1

您好、
 
在将 DDR 配置从 8G 更改为 2G、固件 SYSFW ABI:4.0(固件版本 0x000a '10.0.8--v10.00.08 (Fiery Fox)') 后、我们会调试 TI J722S EVM 上的启动故障。
 
观察到的行为现在分为多个阶段:
 
1.早期启动最初显示在与 PV_TIME_INIT/SMCCC 相关的路径周围挂起。
绕过 PV_TIME_INIT 进行调试后、内核可以继续运行、越过 TIME_INIT 和 CONSOLE_INIT、因此早期停滞不是由控制台启动引起的。
证据:
- kernel-log1-default defcong.txt
- kernel-log2-default defcong-skip_pv_time_init.txt
 
2.在启用正常 SMP 的情况下、引导在辅助 CPU 启动期间挂起。
最后一条调试消息显示 CPU1 到达 PSCI CPU_ON 路径、但不打印进一步的进度。
证据:
- kernel-log3-未设置 CONFIG_PARAVIRT.txt
 
3.即使用 maxcpus=1 引导,系统仍然无法完成引导。
在这种情况下、内核明确绕过辅助 CPU 启动并继续更进一步、但随后在 OP-TEE 初始化期间停止。
最后可见的日志为:
- log9.txt
单核激活成功的证据:
- kernel-log4-not set config_pARAVIRT-maxcpus=1.txt
 
其他说明:
- 2G 内存布局似乎被 Linux 识别,并且保留内存/CMA 区域被填充:
- CONFIG_PARAVIRT 已在当前调试内核中禁用:
 
我们目前的怀疑不仅仅是 Linux SMP 问题。 该故障可能与 2G DDR 配置下的安全固件交互有关、包括:
- SMCCC 功能探测
-用于辅助内核的 PSCI CPU_ON
- OP-TEE 初始化/安全监控调用
 
您能否帮助检查 TF-A/OP-TEE/SYSFW 假设是否仍取决于原始的 8G DDR 设置、尤其是在安全存储器分割、辅助 CPU 引导进入处理或 2G DDR 下的安全世界存储器访问方面?
 
附件:
- kernel-log1-default defcong.txt
- kernel-log2-default defcong-skip_pv_time_init.txt
- kernel-log3-未设置 CONFIG_PARAVIRT.txt
- kernel-log4-not set config_pARAVIRT-maxcpus=1.txt
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您能否共享内核的设备树配置和映射文件?

    此致、
    Tanmay

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

    您好、

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

    您好、

    我看到您的叠加中有以下节点:

    			linux-cma-buffers@e0000000 {
    				compatible = "shared-dma-pool";
    				reusable;
    				reg = <0x00 0xe0000000 0x00 0x10000000>;
    				linux,cma-default;
    				phandle = <0x0d>;
    			};

    这在 DDR 之外。 这可能是导致该问题的原因。

    此致、
    Tanmay

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

    您好、

    我们尝试禁用此节点、但引导仍然失败。 由于存储器起始地址为 0x80000000、因此 0xe0000000 处于该范围内。

    谢谢

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

    您好、

    1. J722S EVM 器件树中段式存储器配置的可能影响:
    原始 8GB DDR 设备树配置: 2+6→工作电流
    内存@80000000{
    /* 8G RAM */
    REG =<0x00000000 0x80000000 0x00000000 0x80000000>、
    <0x00000008 0x80000000 0x00000001 0x80000000>;
    device_type =“存储器“;
    全部引导;
    };
    →为 4GB DDR 器件树配置:2+2 μ F 工作电流
    内存@80000000{
    /* 4G RAM */
    REG =<0x00000000 0x80000000 0x00000000 0x80000000>、
    <0x00000008 0x80000000 0x00000000 0x80000000>;
    device_type =“存储器“;
    全部引导;
    };
    更改为 2GB DDR 器件树配置: 2+0→不工作
    内存@80000000{
    /* 2G RAM */
    reg =<0x00000000 0x80000000 0x00000000 0x80000000>;
    device_type =“存储器“;
    全部引导;
    };
    对于 2GB DDR、当前只有一个存储器段。 这是否会导致内核启动失败?
    2. J722S EVM 内核引导故障与固件是否密切相关?
    从现有日志中可以看出、2GB DDR 下的基本内存检测不再是最早的挂起点。 日志显示 OP-TEE 预留、CMA 预留和总 2GB 可用内存统计信息均已成功建立。 这表明问题更可能与切换到 2GB DDR 后的 SMC/安全固件交互有关。 因此、当前的怀疑应侧重于 TF-A、OP-TEE、TIFS/SCI 固件、或者 2GB DDR 对安全世界/分割/次级引导地址的影响。
    3.共享 dma-pool 内存保留对内核启动失败的影响:
    我们尝试在 k3-j722s-rtos-memory-map-ddr-2g 覆盖设备树中禁用所有共享 dma-pool 区域、但内核仍无法引导、挂起点保持不变。 典型的禁用方法:
    linux_cma_region:linux-cma-buffers@e0000000{
    compatible =“shared-dma-pool“;
    可重复使用;
    REG =<0x00 0xe0000000 0x00 0x10000000>;
    linux、cma-default;
    STATUS =“已禁用“;
    };
    4. U-Boot 中的 2GB DDR 测试: 2GB DDR 测试在 U-Boot 控制台中执行并通过。 测试日志如下所示:
    ==>bdinfo
    BOOT_params = 0x000000000000
    DRAM 组= 0x000000000000
    -> start = 0x0000000080000000
    ->大小= 0x0000000080000000
    flashstart = 0x0000000000000000
    闪存大小= 0x000000000000
    Flashhoffset = 0x000000000000
    波特率= 115200bps
    relocaddr = 0x00000000ffed9000
    reloc off = 0x000000007f6d9000
    Build = 64 位
    Current eth = Ethernet@8000000port@1
    ethaddr = C2:9f:cc:2d:C3:7e
    ip 地址=
    FDT_blob = 0x00000000ffa86800
    NEW_FDT = 0x00000000ffa86800
    FDT_SIZE = 0x00000000000125a0
    MULTI_DTB_FIT= 0x000000000000
    LMB_DUMP_ALL:
    memory.cnt = 0x1 / max = 0x10
    存储器[0][0x80000000-0xffffffff]、0x80000000 字节标志:0
    reserved.cnt = 0x2/max = 0x10
    保留[0][0x9e780000-0xa6bfffff]、0x08480000 字节标志:4.
    保留[1][0xfa82000-0xffffffff]、0x0157e000 字节标志:0
    器件树=单独
    Serial addr = 0x0000000002800000
    宽度= 0x0000000000000000
    SHIFT = 0x000000000002
    偏移= 0x0000000000000000
    时钟= 0x0000000002dc6c00
    arch_number = 0x000000000000
    TLB addr = 0x00000000ff0000
    irq_sp = 0x00000000ffa867f0
    SP START = 0x00000000ffa867f0
    早期 malloc 用法:2e88/8000
    测试第一个安全区域: mtest 0x80000000 0x9e77ffffOK
    测试第二个安全区域: mtest 0xa6c00000 0xfea81fffOK
    5.此平台是否适用于 2GB DDR? 您能给我们发送一些示例以供参考吗?
    谢谢

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

    您好、是否有关于此问题的任何更新? 谢谢!