2400525_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2400525_ja-JP

2400525_ja-JP

LS1046A カスタムボード - FlexBuildで作成されたイメージは、DTの導管方法のためのpsci: probeingにハングします。

こんにちは、

私はLS1046Aをベースにしたカスタムボードを開発しているのですが、FlexBuildで生成したDebianイメージで起動時に問題が発生しています。

まず最初のステップとして、デフォルトのLS1046AFRWY BSPを一切変更せずにビルドし、自作の基板上でテストしました。カーネル起動中に、以下の出力後にシステムが必ずハングアップします。

PSCI:DTからの導管方法のプロービング。

カーネルパニックや例外は発生せず、システムはこの時点で停止する。

以下のNXPフォーラムのThreadで非常に似た問題を説明しているのを見つけました:

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

一時的な回避策として、以下のコマンドを使ってU-Bootから手動でLinuxを起動できます。しかし、カーネルは、ブート引数「mem=」を使用して使用可能なメモリを1982MBに制限した場合にのみ正常に起動します。この値を増やすと、カーネルが再びハングアップします(起動中の異なるタイミングで発生することもあります)。

mmc dev 0

パートUUID mmc 0:3 パートUUIDr

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 (4GB DDR4)
  • ブートメディア:SDカード
  • BSP: FlexBuild (LSDK 25.12)

FlexBuild特有の問題を除外するために、Yocto(YP 6.0 / lf-6.18.20)を使って完全に新しいBSPを作成し、同じハードウェアでテストしました。

結果は全く同じだ。カーネルは再び出力後にハングアップします。

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の最上位から約10MiB引いた領域付近で、サイズは最大2MiBです。

 

Linuxが4GBのDDRマップで起動すると、BL31のリージョンと物理的に重なるページが割り当てられます。最初の PSCI SMC 呼び出し ( psci_get_version ) が、すでに破損したメモリにジャンプし、システムはハングアップします。パニックも例外もなく、ただ沈黙するだけです。

bdinfoの出力は正確なパターンを確認しています。DDR バンク 1 は0x8FFFFFFFFで終了し、BL31 は約RAM_END - 10 MiB = 0x8FF600000にあります。

DDR銀行 スタート 終了 備考
バンク0 0x80000000 0xFBDFFFFF ~1982 MiB —作業mem=制限
バンク1 0x880000000 0x8FFFFFFFF 2 GB 高銀行 — BL31 はここに住んでいます

mem=1982Mの回避策はLinuxをバンク0内に留め、BL31が存在するバンク1には一切触れません。これがまさに機能する理由です。


修正 — デバイスツリーでBL31メモリを予約する

正しい恒久的な解決策は、DTSに reserved-memory ノードを追加 し、BL31のリージョンをLinuxのメモリ割り当てでタブリングにすることです。

ステップ1:BL31がどこに積載されているかを確認する

ATFビルド構成を確認してください( plat/nxp/soc-ls1046a/.../platform_def.hBL31_BASEBL31_SIZEについて。FRWY BSPを搭載したLSDK/lf-6.xの場合、一般的な配置は以下のとおりです。

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

実行時にU-Bootの出力や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は正しく機能します。


 

よろしくお願いします。


Re: LS1046A Custom Board -image built with FlexBuild hangs at psci: probing for conduit method fromこんにちは、

提案された解決策を試してみましたが、残念ながら問題は解決しませんでした。

まず、TF-A(ATF)ビルドからBL31アドレスを確認しました。

- BL31_BASE = 0xFBE00000
- BL31_SIZE = 0x200000 (2 MiB)

次に、BL31ランタイム領域を予約するために、デバイスツリーに「reserved-memory」ノードを追加し、DTBを再構築しました。

その後、「mem=1982M」ブートパラメータなしでシステムを再度起動しました。しかし、システムは依然として同じ箇所で停止したままです。
タグ(1)
評価なし
バージョン履歴
最終更新日:
木曜日
更新者: