LX2080Aには8コア中4コアを無効化する必要があります。8コアのうち特定の4つのコアをオフにする方法を教えていただけますか?
テストのために、rcw_2200_750_3200_19_5_2.rcw ファイルに以下を追加しましたが、起動しません。
.pbi
0x01e00094、0x00000f0 に書き込みます。
。終わり
他に修正が必要な箇所はありますか?
最初の4つのLX2080Aクラスタをアクティブにしたまま、上位の4つのアクティブコアを無効にする場合は、物理コアビットマップを使用します。
コピー
# 物理コア8、10、12、14を無効にする
.pbi
0x01e00094、0x00005500 に書き込みます
。終わり
私たちはそれを適用しました。しかし、起動しなかった。
.pbi
0x01e60060、0x0000000f に書き込みます。
0x01e00094、0x000000f0 に書き込みます
。終わり
バージョンが適用されていない状態で、ubootプロンプトのレジスタを次のように読みました。
アクティブコアの数は奇数であるようだ。
> md.l 0x01e00094
01e00094: 00000000 00000000 00000000 00000000 ................
01e000a4: 87360220 00000040 00000000 00000000 .6.@...........
=> MD.L.0x01e60060
01e60060: 0000aaa 000000000000000000000000000000 ................
01e60070: 000000000000000000000000000000000000................
これが原因でしょうか?
ありがとう
コアを無効にするためのターゲットレジスタは正しいですが、変更を以下のようにするだけでは不十分です。
.pbi
0x01e00094、0x00000f0 に書き込みます。
。終わり
完全な32ビット値を使用し、ブート/リリースパスが無効化されたコアを起動しようとしないようにしてください。
.pbi
0x01e00094、0x000000f0 を書き込みます /* COREDISR: コア 4、5、6、7 を無効化します */
。終わり
0x01e00094 は DCFG + 0x94 です。LX2160A/LX2080A のリファレンスマニュアルには、DCFG のベースアドレスが 0x1E0_0000 であり、COREDISR がオフセット 0x94 にあると記載されています。COREDISRは未使用の物理コアを無効化・クロックゲートするための文書化された仕組みであり、システム準備前にPBIによってプログラム可能です。コア4–7のビット/フィールドはCore 4の無効化からCore 7の無効化に対応しているため、コア0–3を維持し、コア4–7を無効にしたい場合、0x000000f0が期待されるマスクです。
重要な追加項目はブートリリースです。LX2/LS2 4コアケースの場合、文書化された内部ガイダンスは以下のペアリングです:
ブートリリース @ 0x01e60060 = 0x0000000f
COREDISR @ 0x01e00094 = 0x000000f0 /* Core7:4 を無効にする */
したがって、起動時にリリースされるのはコア0–3のみで、コア4–7は無効化されます。ブートリリースレジスタ BRRL は RST ベース 0x1E6_0000 + 0x60 にあり、そのビット CR0...CR15 は対応するコアをブートホールドオフから解放します。また、COREDISRマスクにプライマリブートコアが含まれていないかも確認してください。RMによるとブートコアはBRCORENBR[CORE_NBR]で識別可能です。
起動失敗を確認するための2つの実用的なチェック方法:
起動後、COREDISR とコア無効化ステータスレジスタを読み取って結果を確認します。LX2 実験では、COREDISABLESR @ 0x01E00990 を使用して無効化コアマスクを確認しました。また、COREDISRで無効化されたコアは、後からソフトウェアによって再有効化されてはならないことに注意してください。
「コア0~3を保持し、コア4~7を無効にする」には、COREDISR = 0x000000f0を使用し、ブートリリースマスクがアクティブなコアのみを解放することを確認してください。例:BRRL = 0x0000000f ; そうでない場合、ファームウェアは無効にしたコアを起動しようとする可能性があります。
.pbi
0x01e00094、0x00005500 に書き込みます
0x01e60060、0x000000aa を書き込む
。終わり
私たちはそれを適用しました。しかし、起動しなかった。
他に調査すべき事項はありますか?
起動はするが、結果は以下の通りである。
=> md.l 0x01e00094
01e00094: 0000aa00 00000000 00000000 00000000 ................
01e000a4: 87360220 00000040 00000000 00000000 .6.@...........
=> md.l 0x01e60060
01e60060: 0000aaaa 00000000 00000000 00000000 ................
01e60070: 00000000 00000000 00000000 00000000 ................
カーネルは8つのCPUも検出する。
これをLX2080aで試せますか?
ありがとうございます。
結果は同じようだ。
=> md.l 0x01e00094
01e00094: 00008888 00000000 00000000 00000000 ................
01e000a4: 87360220 00000040 00000000 00000000 .6.@.......... .
=> md.l 0x01e60060
01e60060: 0000aaaa 00000000 00000000 00000000 ................
01e60070: 00000000 00000000 00000000 00000000 ................
クラスター内のすべてのコアを無効にすると、システムがハングアップするようです。
1つのクラスター内で1つのコアだけを無効にしましょう。
.pbi
0x01e00094、0x00008888 に書き込みます。
0x01e60060、0x00002222 に書き込みます。
。終わり
以下の設定をお試しください。
.pbi
0x01e00094、0x0000aa00 に書き込みます
0x01e60060、0x000000aa を書き込む
。終わり
LX2160Aのコア番号付けはクラスタグループに対して連続的です。16コアは8つのクラスターに分かれており、各クラスターには2つのコアが含まれています。番号付けは以下のとおりです。
コア0とコア1はクラスター1に属しています
コア2とコア3はクラスター2に属しています。
...
そしてクラスター8に属するコア14と15まで続きます
クラスタ内のすべてのコアを無効にすると、システムがハングアップします。だから目的を達成することは不可能だ。
以下の設定は正しいと思われます。
.pbi
0x01e00094、0x00005500 に書き込みます
0x01e60060、0x000000aa に書き込みます
。終わり
`0x01e60060` リリースレジスタの値 `0x0000aaaa` に関して、コア 1、3、5、7、9、11、13、および 15 は無効化されているコア (1 で示される) であり、コア 0、2、4、6、8、10、12、および 14 (0 で示される) は、LX2080A で実際にサポートされているアクティブなコアであると考えられます。
8つのクラスターそれぞれに1つのコアが接続されており、4つのクラスターは無効化しなければなりません。これにより、残りの4つのクラスターそれぞれに1つずつ、4つのアクティブなコアが残ります。しかし、`COREDISR`と`BRRL`を変更した後でも、`BRRL`と`COREDISABLESR`レジスタは引き続き`0x0000aaaa`を表示します。
そこで、クラスタ数が最初8に設定されていた「atf/nxp/soc-lx2160/soc.c'のSoC初期化ルーチンを確認し、クラスタ番号を4に変更してシステムが正常に起動しました。現在、`get_num_cluster()` 内で値を 4 にハードコーディングしていますが、他の提案やフィードバックがあれば歓迎します。
=> md.l 0x01e00094
01e00094: 00005500 00000000 00000000 00000000 .U.............
=> md.l 0x01e60060
01e60060: 0000ffaa 00000000 00000000 00000000 ................
=> md.l 0x01e00990
01e00990: 0000ffaa 00000000 00000000 00000000 ...
よろしくお願いします。