2400525_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2400525_zh-CN

2400525_zh-CN

LS1046A 定制板 - 使用 FlexBuild 版本的映像在 psci 处卡住:正在从 DT 探测导管方法。

你好,

我正在开发一款基于 LS1046A 的定制板,在使用 FlexBuild 生成的 Debian 镜像时遇到了启动问题。

首先,我版本了默认的 LS1046AFRWY 电路板支持包。没有做任何修改,并在我的定制板上进行了测试。内核启动过程中,系统总是在打印以下内容后挂起:

psci:从DT探测导管方法。

没有内核崩溃或异常;系统就此停止运行。

我在NXP论坛上找到了一个描述类似问题的帖子:

https://community.nxp.com/t5/Layerscape/LS1043A-RDB-Linux-Hangs-At-PSCI/td-p/750075

作为临时解决方案,我可以使用以下命令从 U-Boot 手动启动 Linux。但是,只有当我使用“mem=”启动参数将可用内存限制为 1982 MB 时,内核才能成功启动。如果我增加这个值,内核又会挂起(有时在启动过程中的不同阶段)。

mmc dev 0

部分 uuid mmc 0:3 partuuidr

加载 mmc 0:1 0x81000000 图像

加载mmc 0:1 0x90000000 fsl-ls1046a-frwy-sdk.dtb

setenv bootargs "console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 root=PARTUUID=${partuuidr} rw rootwait mem=1982M"

booti 0x81000000 - 0x90000000

测试环境:

  • SoC:LS1046A
  • DDR:IS43/46QR16512A(4 GB DDR4)
  • 启动介质:SD卡
  • BSP:FlexBuild(LSDK 25.12)

为了排除 FlexBuild 特有的问题,我还使用 Yocto (YP 6.0 / lf-6.18.20) 构建了一个全新的 电路板支持包。,并在相同的硬件上进行了测试。

结果完全相同。内核在打印以下内容后再次挂起:

psci:从DT探测导管方法。

下面显示的是bdinfo输出的相关部分

动态随机存取存储器\(DRAM\) 存储体 0

  • 起始地址:0x80000000
  • 大小:0x7be00000

动态随机存取存储器\(DRAM\) 存储体 1

  • 起始地址:0x880000000
  • 大小:0x80000000

LMB 内存区域:

内存[0] :0x80000000 - 0xfbdfffff

内存[1] :0x880000000 - 0x8ffffffff

保留[0] : 0xfac154c0 - 0xfbdfffff

保留[1] : 0x8ffff5000 - 0x8ffffffff

有没有人遇到过类似的问题?或者有什么建议,让我接下来应该调查哪些方面?

任何建议都将不胜感激。

QorIQ LS1设备Re: LS1046A Custom Board -image built with FlexBuild hangs at psci: probing for conduit method from

你好,

根本原因——BL31 内存冲突

LS1046A 的启动流程如下:

Boot ROM → BL2 (DDR Init) → BL31 (stays resident in DRAM) → U-Boot → Linux
 
 

BL31 永久驻留在 动态随机存取存储器\(DRAM\) 中,并处理所有 SMC 调用(PSCI: psci_get_version 、CPU 开/关等)。它的典型位置在RAM 顶部减去约 10 MiB 的位置,大小可达2 MiB

 

当 Linux 使用完整的 4 GB DDR 映射启动时,它会分配与 BL31 区域物理重叠的页面。第一次 PSCI SMC 调用( psci_get_version )跳转到已损坏的内存,系统挂起——没有恐慌,没有异常,只有寂静。

您的bdinfo输出证实了确切的模式——DDR Bank 1 结束于0x8FFFFFFFF ,而 BL31 大约位于RAM_END - 10 MiB = 0x8FF600000

DDR银行 开始 结束 说明
银行 0 0x80000000 0xFBDFFFFF ~1982 MiB —您的工作mem=限制
银行 1 0x880000000 0x8FFFFFFFF 2 GB 高位银行——BL31 位于此处

mem=1982M变通方法使 Linux 保持在 Bank 0 内,永远不会触及 BL31 所在的 Bank 1——这正是它有效的原因。


修复——在设备树中预留 BL31 内存

正确的永久解决方法是在 DTS 中添加一个reserved-memory节点,将 BL31 区域标记为 Linux 内存分配器禁止访问。

步骤 1:找到 BL31 的加载位置

检查您的 ATF 版本配置( plat/nxp/soc-ls1046a/.../platform_def.h )对于BL31_BASEBL31_SIZE 。对于采用 FRWY 电路板支持包。的 LSDK/lf-6.x,典型的安装位置如下:

BL31_BASE = 0x8FF80000   (top of high DDR bank minus ~512 KB to 2 MB)
BL31_SIZE = max 2 MiB
 
 

您可以通过检查 U-启动 输出或 ATF 版本日志中的 BL31: v2.x... Entry point address = ...

步骤 2:将预留内存节点添加到您的 DTS 中

在您的板级 DTS 文件(基于fsl-ls1046a-frwy-sdk.dts )中添加:

/ {
    reserved-memory {
        #address-cells = <2>;
        #size-cells = <2>;
        ranges;

        /* Reserve BL31 runtime region — adjust addresses to match your ATF build */
        bl31_reserved: bl31@8ff600000 {
            reg = <0x8 0xff600000 0x0 0x00200000>; /* 2 MiB at RAM_END - 10 MiB */
            no-map;
        };
    };
};
dts
 

调整0x8ff600000和大小0x200000 ,以匹配 ATF 版本中的实际 BL31 加载地址。

步骤 3:重建并使用全部内存进行测试

添加预留信息后,重新构建 DTB 并启动,无需mem=变通方法。内核将跳过该区域,BL31 保持不变,PSCI 将正常工作。


 

此致


Tags (1)
No ratings
Version history
Last update:
2 weeks ago
Updated by: