UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 47550

Zynq-7000、APU - MVA によるキャッシュ ラインのメンテナンス操作が内部共有可能メモリ領域では機能しないことがある

説明

特定のタイミングでは、内部供給可能メモリ領域に対して実行される MVA データまたはユニファイド キャッシュ ライン メンテナンス操作が、システムの Point of Coherency または Point of Unification まで進行できない場合があります。これは、自己書き換えコードに影響します。この問題は、2 つのプロセッサが SMP モードで動作しており、CP15 メンテナンス操作のブロードキャストがイネーブルになっている場合にのみ発生します。この問題には、既知の回避策があります。

ソリューション

影響 :
深刻な問題ではありません。

回避策 :

推奨される手順に従ってください。詳細は、「回避策の詳細」セクションを参照してください。

対象となるコンフィギュレーション :


ARM プロセッサの 1 つまたは両方を SMP モードで使用するシステム
対象となるデバイス リビジョン : すべて。修正の予定はありません。(ザイリンクス アンサー 47916) - Zynq-7000 デバイスのデザイン アドバイザリ マスター アンサーを参照してください。



特定のタイミングでは、内部供給可能メモリ領域に対して実行される MVA データまたはユニファイド キャッシュ ライン メンテナンス操作が、システムの Point of Coherency または Point of Unification まで進行できない場合があります。これは、自己書き換えコードに影響します。

この問題は、2 つのプロセッサが SMP モードで動作しており、CP15 メンテナンス操作のブロードキャストがイネーブルになっている場合にのみ発生します。

次に、この問題が発生する状況の例を示します。

1 つの CPU が MVA による内部供給可能メモリ領域をターゲットとしたデータまたはユニファイド キャッシュ ライン メンテナンス操作を実行します。このメモリ領域は、ローカルに変更されています。

2 番目の CPU が、同じ時間枠内に同じメモリ ロケーションに対してメモリ要求を発行します。

まれな状況が発生し、キャッシュ操作が指定のポイント (Coerency または Unification) まで実行されません。

次のメンテナンス操作が影響を受けます。

DCIMVAC : MVA から PoC へのデータまたはユニファイド キャッシュ ラインを無効にします。
DCCMVAC : MVA から PoC へのデータまたはユニファイド キャッシュ ラインをクリアします。
DCCMVAU : MVA から PoU へのデータまたはユニファイド キャッシュ ラインをクリアします。
DCCIMVAC : MVA から PoC へのデータまたはユニファイド キャッシュ ラインをクリアし、無効にします。

この問題は、2 番目の CPU が次の処理を実行中に発生します。

ロード命令のため発生した読み出し要求。ロード命令が投機的の場合も同様です。
ストア命令のため発生した書き込み要求
PLD 命令のため発生したデータ プリフェッチ。PLD 命令が投機的の場合も同様です。

影響の詳細

キャッシュ メンテナンスが Point of Unification または Point of Coherence まで実行されるかどうかが確実ではないので、データ キャッシュに古いデータが残ってしまい、そのデータ見ることができるべきであるほかのキャッシュ エージェントで見ることができません。
そのため、自己書き換えコードが正しく実行されず、データ キャッシュに書き込まれる新しいコード シーケンスを命令キャッシュで見ることができるようになりません。

L1 のデータ側ではデータは一貫性を保ちます。Cortex-A9 MP コア クラスターまたは ACP からのデータ読み出しには、正しいデータが使用されます。同様に、Cortex-A9 MP コア クラスターまたは ACP からの同じキャッシュ ラインに対する書き込みでも、これらのデータが失われたことが原因でデータが破損することはありません。

自己書き換えコードで使用されるメモリ領域が誤って共有される可能性はほとんどありません。そのため、キャッシュ操作と同じキャッシュ ラインに対する書き込みが問題を発生させる時間枠内に発生することは、実際にはないかもしれません。自己書き換えコードで問題が発生するのは、投機的ロード命令またはブラインド PLD 命令のために発生する読み出し操作に限定されると考えられます。

また、コヒーレンシ ドメイン外のエージェントへのデータの生成が正しく実行されないことがあります。特に、キャッシュ メンテナンス操作のデータ ターゲットを、完了したときに外部 DMA エンジンで見ることができない可能性があります。先ほども述べたように、DMA エンジンのような外部エージェントによってメモリ領域が誤って共有される可能性はほとんどありません。そのため、外部 DMA エージェントに対してデータを生成するときに問題が発生するのは、投機的ロード命令またはブラインド PLD 命令のために発生する読み出し操作に限定されると考えられます。

回避策の詳細

この問題を回避するには、ARM では次をインプリメントすることを推奨しています。

キャッシュ ライン サイズ アライメントで、自己書き換えコードと DMA エンジンなどの外部エージェントにクリーニングされるデータが誤って共有されないようにします。

PERIPHBASE アドレスからオフセット 0x30 に配置されている非公開 (undocumented) の SCU 診断制御レジスタのビット 0 をセットします。このビットをセットすると、ミグラトリ ビット機能がディスエーブルになります。これにより、ダーティ キャッシュr ラインが下位メモリ サブシステムに追い出され、別のプロセッサが読み出しを実行する際に Point of Coherency および Point of Unification になります。

キャッシュ メンテナンス操作の前に DSB 命令を挿入します。キャッシュ メンテナンス操作がほかのメモリ操作のないループ内で実行されている場合は、ARM ではループに入る前に DSB を挿入することを推奨しています。

これによりこの問題が発生する確率は低減されますが、完全にはなくなりません。そのため、ザイリンクスでは問題が発生しない別の回避策を推奨します。この回避策では、ダブル フラッシュを実行します。

STR > DSB > DCC_MVA > DSB > DCC_MVA
AR# 47550
日付 08/15/2012
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス
  • Zynq-7000
このページをブックマークに追加