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# 47547

Zynq-7000 SoC、APU - ASID スイッチの後に間違った MMU 変換が発生する可能性がある

説明

ASID スイッチの後 microTLB エントリが破損していて、その後に続く MMU 変換が破損する可能性があります。投機的で、明示的メモリ アクセスが間違った投機を基に実行されると、この問題が発生します。

通常、間違って予測された分岐や、条件付あるいは条件が満たされなかった場合に、この問題が発生します。

ASID スイッチ コード シーケンスに DSB 命令を追加することで、この問題を回避できます。

ソリューション

影響:

深刻な問題ではありません。回避策なしでも MMU 変換は間違っていることがあります。

回避策:

ASID スイッチ コード シーケンスに DSB 命令を追加します。詳細は「回避策の詳細」セクションを参照してください。

対象となる構成:

ARM プロセッサの MMU を使用するシステム

対象となるデバイス リビジョン:すべて。修正予定はありません。(Xilinx Answer 47916) - 「Zynq-7000 AP SoC デバイス - シリコン リビジョン間の相違点」を参照してください。

 

この投機的メモリ アクセスが TLB にないと、Page Table Walk が発生する可能性があります。Page Table Walk が ASID スイッチ コード シーケンスの前に開始し、その後に完了すると、問題が発生します。microTLB には、古い ASID に対応しているこの新しい TLB エントリで新しいエントリが割り当てられます。microTLB は ASID を保存しないため、ASID スイッチの後の新しい ASID で変換されるはずの MMU 変換が、この古い microTLB エントリで処理される際に破損します。
アクセスの Security ステートは microTLB に保存されているため、Trustzone Security のリスクはなく、その結果破損は起きないことに留意してください。

回避策の詳細

ASID スイッチ コード シーケンスに DSB 命令を追加します。ARM アーキテクチャでは ASID スイッチの前後にのみ ISB を必要とします。ASID スイッチの前に DSB を追加すると、ASID 変更の前に Page Table Walk が完了し、古いエントリが microTLB に割り当てられることはありません。

defconfig の CONFIG_ARM_ERRATA_754322 を参照してください。

ASID の変更と Translation Table Base Register (TTBR) を同期させるには、Arm リファレンス マニュアルの例を次のように変更する必要があります。

元のシーケンス:

新しいシーケンス:

 

シーケンス #1

~

DSB

ASID を 0 に変更

ASID を 0 に変更

ISB

ISB

Translation Table Base Register を変更

Translation Table Base Register を変更

ISB

ISB

~

DSB

ASID を新しい値に変更

ASID を新しい値に変更

 

シーケンス #2

Translation Table Base Register をグローバル専用マッピングに変更

Translation Table Base Register をグローバル専用マッピングに変更

ISB

ISB

~

DSB

ASID を新しい値に変更

ASID を新しい値に変更

ISB

ISB

Translation Table Base Register を新しい値に変更

Translation Table Base Register を新しい値に変更

 

シーケンス #3

TTBCR.PD1 = 0 に設定

TTBCR.PD1 = 0 に設定

ISB

ISB

~

DSB

ASID を新しい値に変更

ASID を新しい値に変更

Translation Table Base Register を新しい値に変更

Translation Table Base Register を新しい値に変更

ISB

ISB

TTBCR.PD0 = 0 に設定

TTBCR.PD0 = 0 に設定

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

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

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
47916 Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点 N/A N/A
AR# 47547
日付 06/13/2018
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス
  • Zynq-7000
  • XA Zynq-7000
  • Zynq-7000Q
このページをブックマークに追加