デフォルトの Linux BSP が、SMP モードでキャッシュと TLB メンテナンス・ブロードキャストを有効にしないため (レジスター ACTLR のビット 0 は「0」のまま)、キャッシュ・コヒーレンシーの問題が見られる場合があります。
このビットの説明については、ARM A9 MPCore テクニカル・リファレンス・マニュアル[2]: セクション 1.7.3 メンテナンス操作の放送を参照してください。
同じコヒーレント・ドメイン上で SMP モードで動作するすべてのプロセッサーは、TLB およびキャッシュ・メンテナンス操作を送受信できます。ARM アーキテクチャー・リファレンス・マニュアルでは、ブロードキャスト操作に関する詳細情報を提供しています。A9-MP クラスター内の Cortex-A9 プロセッサーは、SMP モード (ACTLR) で動作する際にブロードキャスト可能なメンテナンス操作をブロードキャストします。SMP=1) および保守運用放送が有効になっている場合 (ACTLR.FW=1)。Cortex-A9 プロセッサーは、SMP モード ACTLR で動作しているときに、ブロードキャスト・メンテナンス操作を受信して実行できます。SMP=1。
両方の ACTLR を設定することをお勧めします。FW および ACTLR。SMP から 1。proc-v7 で Linux コードを変更することでビットを設定できます。以下のような S ファイル:
#ifdef CONFIG_SMP
ALT_SMP (mrc p15、0、r0、c1、c0、1)
ALT_UP (mov r0, #(1 << 6)) @ UP のために偽のそれ
tst r0、#(1 << 6) @ SMP/nAMP モードが有効ですか?
orreq r0, r0, #(1 << 6) @ SMP/nAMP モードを有効にする
orreq r0, r0, r10 @ CPU 固有の SMP ビットを有効にする
orr r0, r0, #(1) @ この行を追加すると ACTLR[0]
mcreq p15、0、r0、c1、c0、1
#endif