AR# 55325

Zynq-7000 SoC、APU - プロセッサによって連続的に書き込まれている L1 キャッシュ ラインに対するコヒーレント要求が拒否されることがある

説明

プロセッサが 1 つの L1 キャッシュ ラインに連続した書き込みストリームを実行していると、別のコヒーレント プロセッサまたは ACP がそのキャッシュ ラインにアクセスできない可能性があります。

ソリューション

この問題は、次のような場合に発生する可能性があります。

  • CPU0 がコヒーレント メモリ領域のアドレス A に対して読み出しアクセスを実行する。
  • CPU1 がアドレス A と同じキャッシュ ラインへの書き込み操作のみを含むループの実行を継続する。

この例では、Cortex-A9 MPCore のアービトレーション方式により CPU1 からの書き込み要求が常に優先されるため、CPU0 からの読み出しが適切に実行されません。CPU0 が停止し、それ以上処理が進みません。

CPU0 のコヒーレント読み出しアクセスを完了できないため、デバッグ モードに入ることや割り込みを受信することはできません。CPU1 で割り込みが無効になっているなど CPU1 も割り込みを受信できない場合、またはすべての割り込みが CPU0 に割り当てられる場合、システムのライブロックが発生する可能性があります。

影響: 深刻な問題ではありません。ほかのコヒーレント エージェントに対するサービスが拒否されるため、パフォーマンスの問題やシステムのライブロックが発生する可能性があります。
システムのライブロックは、連続した書き込みストリームを実行しているプロセッサへの割り込みが不可能な場合に発生する可能性があります。
回避策:連続した書き込みストリームを分割します (「回避策の詳細」を参照)。
対象となる構成: 2 つの CPU を使用するか、1 つの CPU と ACP を使用するシステム。
対象となるデバイス リビジョン:すべて。修正予定はありません。(Xilinx Answer 47916) - 「Zynq-7000 AP SoC デバイス - シリコン リビジョン間の相違点」を参照してください。
サード パーティのエラッタ:Arm 社のエラッタ 791420


回避策の詳細

この問題を回避するには、書き込みストリームを実行しているループに DMB 命令を挿入して、ライブロックの原因となっている連続した書き込みストリームを分割します。 

書き込みストリームを発行するソフトウェアを修正できない場合は、CPU1 にウォッチドッグとして機能する定期的な割り込みを強制的に挿入することを推奨します。 

この定期的な割り込みの生成にはいくつかの方法があり、システムによって異なります。ローカル タイマー、グローバル タイマー、パフォーマンス監視ユニット サイクル カウンター オーバーフローによって生成された割り込みなどが考えられます。

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
47916 Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点 N/A N/A
AR# 55325
日付 05/28/2018
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス