AR# 55326

Zynq-7000 SoC、APU - ページ最後の L1 キャッシュ ラインの branch-to-self 命令によってサービスが停止する

説明

ページ最後の L1 キャッシュ ラインから branch-to-self ループを実行すると、プロセッサ内の要求の連続したストリームによって、その他のプロセッサで実行される CP15 ブロードキャスト処理が停止する場合があります。

ソリューション

CP15 ブロードキャスト処理を実行しているプロセッサがその処理を完了できないため、デバッグ モードに入ったり、割り込みを受け入れることができません。branch-to-self ループを実行しているプロセッサに割り込むことができない場合 (プロセッサが割り込みを無効にしている、またはすべての割り込みが別のプロセッサに割り当てられている)、この問題によってシステムのライブロックが発生する可能性があります。

影響: 深刻な問題ではありません。この問題はシステムのパフォーマンスに影響を与えたり、ワースト ケースでは、branch-to-self ループを実行しているプロセッサに割り込むことができない場合にシステムのライブロックが発生する可能性があります。
回避策:CPU が生成した要求の連続したストリームを分割します。「回避策の詳細」を参照してください。
対象となる構成: 2 つの CPU を使用するシステム
影響するデバイス リビジョン:すべて。修正予定なし。(Xilinx Answer 47916) - 「Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点」を参照してください。
サード パーティのエラッタ:Arm 社のエラッタ 799769


回避策の詳細

この問題を回避するには、branch-to-self ループを実行しているプロセッサで内部生成された要求の連続したストリームを分割します。ソフトウェアは通常、多重プロセッサ環境におけるループ リリースなどの外部イベントの発生を待っている間に branch-to-self loop ループを実行します。推奨する回避策としては、『ARM アーキテクチャ リファレンス マニュアル』で勧められているように、branch-to-self ループを WFE または WFI 命令を含むループで置き換えます。その他の回避策として、ループに NOP を追加したり、branch-to-self 命令をページ最後のキャッシュ ライン以外の別の位置に移動させたりすることでも問題を回避できます。

branch-to-self ループを実行しているソフトウェアを修正できない場合の推奨回避策は、ループを実行しているプロセッサがウォッチドッグとして機能する割り込みを定期的に取るように強制的に設定することです。 定期的な割り込みの生成には複数の方法があり、システムによって異なります。ローカル タイマー、グローバル タイマー、あるいはパフォーマンス監視ユニットのサイクル カウンター オーバーフローで生成された割り込みなどが考えられます。

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

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

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