RISC-V IOMMUの構成について、概略をざっくり理解するためのメモ。
何回か読もうとして挫折してきたので、もう一度ちゃんと読んでみようと思う。
1.4. IOMMUの特徴
- RISC-V IOMMU仕様のバージョン1.0は、以下の機能をサポートしている:
- メモリ・ベースのデバイス・コンテキストで、パラメータとアドレス変換構造を見つける。デバイス・コンテキストは、ハードウェアが提供する一意のdevice_idを使用して配置される。サポートされるdevice_idの幅は24ビットまでである。
- ハードウェアが提供する一意のprocess_idを使用して、パラメータとアドレス変換構造を見つけるための、メモリベースのプロセスコンテキスト。サポートされるprocess_idは最大20ビットである。
- 16ビットのGSCIDと20ビットのPSCID。
- 2段階のアドレス変換。
- RISC-V Privileged仕様[3]で規定されているページベースの仮想メモリシステムにより、CPU MMUとIOMMUに共通のページテーブルを使用するか、IOMMUに個別のページテーブルを使用するかをソフトウェアが柔軟に選択できる。
- 最大57ビットの仮想アドレス幅、56ビットのシステム物理アドレス幅、59ビットのゲスト物理アドレス幅。
- PTE アクセス済みビットとダーティビットのハードウェア更新。
- RISC-V Advanced Interrupt Architecture [2]で規定されたMSIページテーブルを使用して、仮想割り込みファイルへのメモリアクセスとMSIアドレス変換を識別する。
- Svnapot と Svpbmt 拡張。
- PCIe ATS および PRI サービス [1]。翻訳要求に応答して、SPA ではなく GPA に IOVA を翻訳することをサポートする。
- ハードウェア・パフォーマンス・モニター(HPM)。
- ソフトウェアにサービスを要求するためのMSIおよびワイヤシグナル割り込み。
- ソフトウェアがデバッグをサポートするためにアドレス変換を要求するためのレジスタ・インターフェース。
- IOMMUがサポートする機能は、5.3節のcapabilitiesレジスタを使用して検出することができる。