ソフトロジックから HPS メモリーへのFPGAキャッシュ・コヒーレント・アクセスを許可するには、次の項目数が必要です。
- MMU ページ表
- NOC セキュリティー設定
- CoreLink™ レベル 2 キャッシュ・コントローラー L2C-310 構成
- AXI サイドバンド信号: Axi_cache_securityブリッジ
- AxCache と AxUser
- AXPROT
MMU ページ表
MMU ページテーブルは、キャッシュ可能なターゲット・メモリー領域と、セキュアまたは非セキュアを定義するように設定する必要があります。 MMU ページ・テーブル割り当て属性とセキュア・モード (トラストゾーン) の詳細については、Linux および ARM のドキュメントを参照してください。
- メモリーは、ライト・バック・ライト・アライト (VMWA) としてマークされている必要があります。
- Linux ユーザースペース・アプリケーションまたはカーネルからメモリーにアクセスするには、セキュリティー・モードを非セキュアにする必要があります。
- セキュアは、ARM セキュア状態で実行するプロセスがアクセスするメモリーに使用する必要があります (スーパーバイザー・モードと混同しないでください)。
CP15: SDR:NS = 1 の場合、セキュア・モードが有効になります。 注: NS レジスターはスーパーバイザー・モードでのみ利用可能です。
NOC セキュリティー設定
Arria® 10 SoC Network on Chip iinterconnect(NOC) は、各ブリッジおよびインターコネクト全体のファイアウォールで構成できます。 HPS ブリッジ経由のアクセスを許可するには
- ブリッジを介したトランザクションを許可するようにファイアウォールを設定する必要があります。
- 安全なアクセスを許可 / 保護するには、マスター・コントロールを設定する必要があります。
- マスターが安全なアクセスに設定されている場合、すべてのトランザクションは非セキュアな状態に変更され、コヒーレンシーを壊す可能性があります。
SoC EDS ソフトウェア・バージョン 16.0 以降から生成された U ブートは、NOC ファイアウォールを無効にしますが、マスターを安全なアクセスに設定します。
FPGA2HPA ブリッジを介したセキュアなアクセスを許可するには:
レジスター fpga2soc_ctrlの設定: allow_secureを 1 (デフォルト = 0、セキュアを許可しない)
レベル 2 キャッシュ・コントローラーの構成
CoreLink™ レベル 2 キャッシュ・コントローラー L2C-310 構成
補助制御レジスター・ビット [22] 共有属性上書き有効ビット を ON に設定することを推奨します。 この設定は、MPU コアまたは ACP ポートからの一部のキャッシュ不能アクセスをキャッシュ可能な非割り当てアクセスに変換する L2 キャッシュ・コントローラーの最適化を無効にし、コヒーレンシー・ポイントを SDRAM から L2 キャッシュに移動します。 コヒーレンシーの変化は、マスターが L3 または FPGA2SDRAM ブリッジを介して SDRAM にアクセスする場合に問題を引き起こす可能性があります。
リファレンス: CoreLink™ レベル 2 キャッシュ・コントローラー L2C-310、リビジョン: r3p3 テクニカル・リファレンス・マニュアル (ARM DDI 0246H (ID080112)): セクション 2.3.2 共有可能な属性。
上記は、https://github.com/altera-opensource/u-boot-socfpga から入手可能な最新バージョンの u-boot-socfpga でデフォルトで設定されています https://github.com/altera-opensource/u-boot-socfpga
Qsys: Axi_cache_securityブリッジからの AXI サイドバンド信号の駆動
Axi_cache_securityブリッジを使用して、AxCache/AxUser/AxProt サイドバンド信号を正しい値にドライブする必要があります。 Axi_cache_securityブリッジは、Arria 10 Bridge の例https://www.altera.com/support/support-resources/design-examples.html にあります。
AxCache[3:0] サイドバンド信号
適切な AxCache [3:0] 設定は MMU ページテーブルの設定に依存します。
ARM® アーキテクチャー・リファレンス・マニュアル ARMv7-A および ARMv7-R エディション (ARM DDI 0406C.c (ID051414) ) を参照: A3.5 メモリーの種類と属性、およびコヒーレント・アクセスにはメモリーオーダーモデル AxCache[1] を 1 にする必要があります。
リファレンス: Cortex™-A9 MPCore® リビジョン: r3p0 テクニカル・リファレンス・マニュアル (ARM DDI 0407G (ID072711)): 2.4 アクセラレーター・コヒーレンシー・ポート
AW®CACHE[3:0]
[3] - すべて書き込み可能
[2] - すべて読み取り可能
[1] - キャッシュ可能
[0] - バッファー可能
AW®CACHE の推奨初期値[3:0]
awcache = 0xF。4'b1111 書き込み割り当て, 読み込み割り当て, バッファー可能, キャッシュ可能
arcache = 0xF。4'b1111 書き込み割り当て, 読み込み割り当て, バッファー可能, キャッシュ可能
注: これらの設定はユースケースに基づいて変更する必要があります。
AxUser[4-0] サイドバンド信号
AxUser 信号は追加情報を渡すために使用され、ACP トランザクションでは内部および外部キャッシュ可能な情報を渡すために使用されます。
AW®User[3:0]
[0] - コヒーレント・アクセスの場合、shared 属性を 1 に設定する必要があります
[3:1] - ACP には内部キャッシュ・ポリシーがないため、SCU では解釈されず、キャッシュが排他的モードでセットアップされている場合に使用するために L2 キャッシュ・コントローラーに渡されます。
リファレンス: Cortex™-A9 MPCore® リビジョン: r3p0 テクニカル・リファレンス・マニュアル (ARM DDI 0407G (ID072711)): 2.4 アクセラレーター・コヒーレンシー・ポート、
AxUSER の推奨初期値[4:0]
awuser = 0x1。5'b00001
aruser = 0x1。5'b00001
注: Arria 10 では、AXI 共有属性は内部で「1」に関連付けられています。
AxProt[2:0] サイドバンド信号
AxProt はトランザクションのセキュアな状態を指定し、キャッシュヒットを確実にするためにターゲットメモリーのセキュリティー状態と一致する必要があります。
AW®PROT[2:0]
[2] - 命令フェッチ
[1] - 非セキュア・アクセス
[0] - 特権アクセス
AxProt の推奨初期値[2:0]
MMU ページ・テーブル・メモリーのセキュリティー設定、およびキャッシュ・ヒットを確実にするために、CPU セキュア設定と ACP トランザクション・セキュア状態がすべて一致している必要があります。
CPU が安全な状態でアクセスするセキュアなメモリーロケーションへの非セキュア ACP トランザクションは、キャッシュ・ミスとインコヒーレント・アクセスの結果となります。
サポートされているシナリオの概要:
非セキュア
- MMU ページテーブルは、ターゲットメモリー領域を非セキュアとして定義するように設定されています。
- NOC ファイアウォールは、ターゲットエリアへの非安全なアクセスを許可するように設定されています。
- F2H ブリッジは、対象エリアへのセキュアなアクセスまたは非セキュア・アクセスを実行します。
安全
- MMU ページテーブルは、ターゲットメモリー領域をセキュアとして定義するように設定されています。
- NOC ファイアウォールは、ターゲットエリアへの安全なアクセスを許可するように設定されています。
- F2H ブリッジは、ターゲットエリアへの安全なアクセスを実行します。