STM32MP1 - TZC
TrustZone アドレス空間コントローラ
1.0 版

STM32MP1 TrustZone アドレス空間コントローラのプレゼン
テーションにようこそ。

1

概要

2

• TZC は、プログラム可能な領域によって定義される TrustZone® セキュリ
ティ制御および NSAID（非セキュアマスタアドレス ID）に応じて、DDR の読出しアクセスと書込みアクセスをフィルタすることを目的とした機能• TZC には 2 つのフィルタ（AXI ポートに 1 つ）

TrustZone® アドレス空間コントローラ（TZC）は、セキュリティルールおよび非セキュアマスタアドレス ID に応じて、DDR アクセスをフィルタすることを目的としています。
これは、TZC の簡略化されたブロック図です。
TZC は 2 つのフィルタユニット（AXI ポートに 1 つ）で構成されます。フィルタは同時に機能しています。
2 つのフィルタは、APB インタフェースでセットされる共通の制御レジスタで制御されます。

2

主な機能（1/2）

3• 2 つのフィルタユニットは同時に機能• 9 つの領域
• 領域 0 は常に有効になっており、DDR のアドレス範囲全体をカバー• 領域 1～8 には、4KB 単位のプログラム可能な開始／終了アドレスがあり、いずれかまたは両方のフィルタに割当て可能• セキュアアクセスおよび非セキュアアクセスの許可は、領域ごとにプログラム• 非セキュアアクセスは、非セキュアマスタアドレス ID（NSAID）に応じてフィルタ• 同じフィルタで制御される領域はオーバーラップ不可

TZC は 2 つの AXI ポートで同時に機能している 2 つのフィルタユニットで構成されます。

アクセスのフィルタリングは最大 9 つの領域をサポートしています。
•領域 0 は常に有効になっており、DDR のアドレス範囲全体をカバーしています。

•領域 1～8 には、4KB 単位のプログラム可能な開始および終了アドレスがあります。1 つの領域を、いずれかまたは両方のフィルタに割り当てることができます。

セキュアアクセスおよび非セキュアアクセスの許可は、領域ごとに定義されます。
非セキュアアクセスは、非セキュアマスタアドレス ID に応じてフィルタされます。
同じフィルタで制御される領域はオーバーラップさせてはなりません。

3主な機能（2/2）

4• AXI バスエラーまたは割込みで許可のチェック失敗を発信• 32bit APB4 インタフェース• TZC 設定はセキュアマスタのみでサポート• 読出しアクセスパスは、最大 256 個の未処理トランザクションをサポート• ゲートキーパーロジックによって各フィルタを有効および無効化が可能• 投機的アクセスをサポート
注：TZC には、2 サイクルの遅延があります。

許可のチェックに失敗すると、AXI バスエラーまたは割込み、あるいはその両方で信号送信できます。
TZC は 32bit APB4 インタフェースでプログラムされます。
TZC 設定はセキュアマスタのみでサポートされます。

読出しアクセスパスは、最大 256 個の DDR に対する未処理トランザクションをサポートしています。
ゲートキーパーロジックを使用して、各フィルタを有効および無効にします。
TZC は投機的アクセスをサポートしています。

注：TZC には、2 サイクルの遅延があります。主な機能を減らした高速パス（FPID）は、STM32MP1 シリーズではサポートしていません。

4プログラミングガイドライン

5• 領域 0 はベース領域で、アドレス範囲全体をカバーし、常に有効• 領域 0 は領域 1～8 以外のアクセスの捕捉が可能• 領域 1～8 を同じフィルタに割り当てる場合、互いにオーバーラップ不可• 半静的プログラミングでは、フィルタ設定を再プログラムする前にすべてのアクセス（ゲート）のブロックが必要• TZC は独立した読出しおよび書込みの設定をサポート• セキュアと非セキュアの設定は独立していますが、セキュアチェックはあらゆるマスタに適用できる一方、非セキュアチェックはマスタごとにフィルタ（NSAID による選択）。

TZC プログラミングでは次のガイドラインを遵守する必要があります。
•領域 0 はベース領域で、アドレス範囲全体をカバーし、常に有効になっています。

•領域 0 は領域 1～8 以外のアクセスの捕捉が可能•

領域 1～8 を同じフィルタに割り当てる場合、互いにオーバーラップさせてはなりません。

•半静的プログラミングで再設定する場合、フィルタ設定を再プログラムする前にすべてのアクセス（ゲート）をブロックする必要があります。

TZC のアクセスフィルタリングは以下に基づきます。
•

読出しと書込みの設定（読出しのみ、書込みのみ、読出し／書込み、アクセスなし）は独立しています。

•

セキュアと非セキュアの設定は独立していますが、セキュアチェックはあらゆるマスタに適用できる一方、非セキュアチェックはマスタごとにフィルタされます（NSAID による選択）。

5

プログラミングの例
領域 1 読出し／書込みセキュアのみ

領域 2 すべての読出し／書込み（セキュアと非セキュア）

領域 3 非セキュア MDMA の読出し／書込み（NSAID = 5）

Region1.s_wr_en = 1
Region1.s_rd_en = 1
Region1.nsaid_rd_en = 0x0000
Region1.nsaid_wr_en = 0x0000
Region1.filter_en = 0b11

Region2.s_wr_en = 1
Region2.s_rd_en = 1
Region2.nsaid_rd_en = 0xFFFF
Region2.nsaid_wr_en = 0xFFFF
Region2.filter_en = 0b11

Region3.s_wr_en = 0
Region3.s_rd_en = 0
Region3.nsaid_rd_en = 0x0020
Region3.nsaid_wr_en = 0x0020
Region3.filter_en = 0b11

領域 1

領域 2

領域 3

start1end1

start2不可

start3end3

不可
領域 00x0000000

end2

6（すべてのフィルタで常に有効）

Region0.s_wr_en = 0
Region0.s_rd_en = 0
領域 0 は領域 1～8 以外の読出し／書込み
Region0.nsaid_rd_en = 0x0000 アクセスを捕捉するために使用
Region0.nsaid_wr_en = 0x0000

0xFFFFFFFF

このスライドでは、簡単なプログラミングの例を示しています。
DDR 空間は、3 つの非オーバーラップ領域をサポートしています。
• 領域 1 は start1～end1 のアドレスで定義されます。領域 1はセキュアアプリケーションによってのみ読み書きアクセスが可能です。
• 領域 2 は start2～end2 のアドレスで定義されます。領域 2はセキュアアプリケーションと非セキュアアプリケーションによって共有領域の読み書きアクセスが可能です。
• 領域 3 は start3～end3 のアドレスで定義されます。領域 3は非セキュア MDMA エンジン（NSAID = 5）によってのみ読み書きアクセスが可能です。
レジスタ設定とプログラミングシーケンスは、wr_en と rd_en のパラメータです。NSAID は次のスライドの表に列挙しています。
領域 0 は常に有効になっており、DDR のアドレス範囲全体をカバーしています。これらの領域以外のアクセスを捕捉するためにセットされます。
そのため、3 つの定義された領域以外からのアクセスは許可されません。
6

NSAID の表
MasterUSBH（EHCI）

NSAID[0:3]

CA70b0000

CM40b0001

LTDC

0b0011

GPU0b0100

MDMA0b0101

DMA10b0110

DMA20b0110

USBH（EHCI）

0b0111

USBH（OHCI）

0b0111OTG

0b1000SDMMC10b1001

SDMMC20b1001

SDMMC30b1001

ETH

0b1010DAP

0b11117

非セキュアマスタアドレス ID（NSAID）は、この表に列挙されたマスタに応じて 4bit でエンコードされます。

7