AR# 52035

Zynq-7000 SoC、APU - ページ マッピングを移動する変換エントリをアップデートすると変換エラーが発生することがある

説明

Cortex-A9 マイクロアーキテクチャに特定のある条件下で、キャッシュ可能な変換テーブルのエントリをアップデートする書き込みを実行すると、以前の変換エントリと新しい変換エントリの両方が一時的に変換テーブル ウォークで認識できなくなり、変換エラーが発生します。

ソリューション

この問題は、次の条件下で発生します。


  1. プロセッサでデータ キャッシュおよび MMU がイネーブルになっている。
  2. TTB レジスタがキャッシュ可能なディスクリプター メモリ領域で機能するよう設定されている。
  3. プロセッサで既存のキャッシュ可能変換テーブル エントリがアップデートされ、この書き込み操作が L1 データ キャッシュでヒットする。
  4. ハードウェア変換テーブル ウォークが試行される。ハードウェア変換テーブル ウォークは、命令フェッチ、あるいはロードまたはストア操作を含むアドレス変換を必要とする命令実行のためです。
    このハードウェア変換テーブル ウォークが条件 2 でアップデートされているエントリにアクセスしようとし、そのアクセスが L1 データ キャッシュにヒットします。


実際には、この問題は OS で物理的なページのマップが変更されるときに発生することがあります。OS に物理的なページへの既存のマップ (以前のマップ) があり、新しいページへのマップ (新しいマップ) に移行しようとしている状態です。このため、OS が次を実行します。


  1. 以前の変換エントリをキャンセルせずに新しい変換を書き込む。この時点では、物理ページは以前のマップと新しいマップのどちらでもアクセスできます。
  2. DSB 命令を実行し、その後 ISB 命令ペアを実行し、新しい変換エントリが確実に認識されるようにする。
  3. 以前のエントリを削除する。


ただし、この問題のため、新しいエントリが書き込まれた後に以前のマップも新しいマップも認識されなくなり、変換エラーが発生します。

影響:
深刻な問題ではありません。変換エラーが発生します。回避策があります。
回避策:
「回避策の詳細」を参照して、FPGA の IDCODE の基本動作を実行し、クリーニングおよび無効化操作を実行します。
対象となる構成:
CPU を使用するシステム。
対象となるデバイス リビジョン:すべて。修正予定はありません。(Xilinx Answer 47916) - 「Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点」を参照してください。


回避策の詳細:

推奨される回避策は、エントリをアップデートする前に、変換エントリを含むキャッシュ ラインに対してクリーニングおよび無効化操作を実行し、書き込み操作がデータ キャッシュでミスになるようにすることです。 

この回避策により、この問題が発生する条件が回避されます。割り込みは一時的にディスエーブルにし、メンテナンス操作および変換エントリのアップデート中に割り込みが発生しないようにします。

このようにすると、割り込みサービス ルーチンによりキャッシュ ラインがキャッシュに戻されることはありません。


別の回避策として、変換テーブル エントリをキャッシュ不可能なメモリ領域に配置する方法もありますが、この方法ではパフォーマンスが顕著に低下します。

新しい変換テーブル エントリの書き込み直後に DSB 命令を挿入すると、この問題が発生する確率は大幅に下がりますが、完全な回避策ではありません。

改訂履歴
2013 年 3 月 - 初版。

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

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

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