arm tzpc & tzasc & tzc400 introduction
本文基于《于ARM TZC-400 TRM》进行梳理
Introduction
About
The CoreLink TZC-400 TrustZone Address Space Controller (TZC-400) is an AMBA-compliant System on-Chip (SoC) peripheral.
TZC-400对发送到内存或外设的事务执行安全检查。TZC-400使用filter unit过滤从masters到slaves的总线访问,TZC-400最多有4个Filter unit。您可以使用TZC-400在地址空间中创建最多8个区域,每个区域都有单独的安全级别设置。任何事务必须满足安全需求才能访问内存或外设。您可以设置各个地区的base地址、top地址、enable和安全级别。
TZC-400通过ACE-Lite响应通道或中断上报检查错误。
TZC-400的使用示例
不同的mastert会连接到不同的filter unit。
TZC-400 interfaces
Control unit使用APB协议,clock和reset。
每个Filter unit均有单独的ACE-Lite clock和reset,filter unit会根据ACE-Lite地址、Fast path ID、NSAID(Non-Secure Access ID)来筛选。
TZC对外输出1根中断上报安全检查异常。
FPID & NSAID
Fast Path IDentity (FPID)决定filter unit的读操作是使用快速路径还是普通路径。每个filter unit有单独1 bit FPID输入。fast path依赖speculative access,因此必须开启master和slave的speculative access功能。是芯片固定的还是可以软件配置?
Non-secure Access IDentity (NSAID)标识发起访问的master。每个filter unit有两组NSAID信号,每组4个bit,NSAIDR 怎么标识? 芯片设计时,分配的master id。
Region
Region是一个连续的地址空间定义了start和end。
region有单独的安全级别配置。
TZC-400有9个regions:region0是default,部分编程,region1-8是完全编程。
通过control unit设置每个region的安全和地址空间。
region检查规则:
- region必须使能,filter unit才能用来检查访问合法性
- region0始终是使能的,只能修改安全访问属性。
- filter unit如果在其他region找不到访问地址匹配,会使用region0的配置
- Filter unit使用的region1-8空间不能有overlap memory,但是region1-8可以与region0有overlap memory,而且region1-8的规则会覆盖region0。
Features
- 可以在地址映射中最多定义8个region(完全编程)。
- 一个默认的基本区域覆盖所有剩余的地址映射部分,即region0。
- 通过APB4总线编程每个region的访问权限,包括region0。
- 只有当ACE-Lite事务的安全状态/ID和映射region的安全设置匹配时,filter unit才允许在ACE-lite master和slave之间传输数据。
- 所有filter units共享公共区域配置寄存器的设置,保证一致性。
- filter unit支持相互独立的异步时钟,而且也和control unit的APB时钟是异步的。
- 支持双读访问通道,即快速路径和正常路径。快速路径具有低延迟,但outstanding数量
有限。正常路径可以支持更多数量的outstanding,正常路径支持256个待处理事务,但延迟不低于快速路径的延迟。 - 非安全访问是基于ID进行事务过滤的。
- 状态和中断信号可以通过软件编程进行配置,从而管理失败的权限检查。
- 每个时钟域都有AXI低功耗接口。
- Gate keeper用于控制每个filter unit的访问状态,使能或禁用。
Register summary
Offset | Name | Type | Description |
---|---|---|---|
0x0 | BUILD_CONFIG | RO | 当前IP实现了几个region,实现了几个filter |
0x4 | ACTION | RW | 当访问检查失败时,中断和bus返回如何处理 |
0x8 | GATE_KEEPER | RW | 控制每个filter unit的使能和去使能,低bit对应每个filter unit控制,高bit代表状态 |
0xc | SPECULATION_CTRL | RW | 控制读写随机访问 |
0x10 | INT_STATUS | RO | 每个filter unit的中断状态 |
0x14 | INT_CLEAR | WO | 每个filter unit的中断状态清除 |
0x100+(0x20*n) | REGION_TOP_LOW | RW | regionX的低地址 |
0x108+(0x20*n) | REGION_TOP_HIGH | RW | regionX的高地址 |
0x110+(0x20*n) | REGION_ATTRIBUTES | RW | 控制每个region的属性:安全读写属性、是否使能对应filter unit |
0x114+(0x20*n) | REGION_ID_ACCESS | RW | 高bit控制写,低bit控制读每bit对应NSAID的使能情况 |
Software API
/* 关闭全部filter unit */
void tzc400_disable_filters(void);
/* 开启全部filter unit */
void tzc400_enable_filters(void);
/* 配置某个region属性:绑定filter unit、起始地址、安全属性、发起访问source id */
void tzc400_configure_region(unsigned int filters,
unsigned int region,
unsigned long long region_base,
unsigned long long region_top,
unsigned int sec_attr,
unsigned int nsaid_permissions);
/* 配置检查异常的处理动作 */
void tzc400_set_action(unsigned int action);
/* 中断查询及清楚 */
int tzc400_it_handler(void)
Question
TZC-400和TZPC和TZASC区别
物理内存和外设的隔离保护通过TZASC和TZPC的设置来达到目的。TZASC可以把物理内存分成多个区域,每个区域的访问权限可以灵活配置为安全区域或是非安全区域,甚至可以配置成只有普通世界可以访问。TZPC则是配置不同的外设属于哪个世界。当然了TZASC和TZPC的配置只能在安全世界下进行。
TZPC只能控制某个外设的安全属性,它不能细粒度的控制地址空间。
TZC400是TZASC的具体实现的IP。
Reference
《TZC-400 TRM 》https://developer.arm.com/documentation/100325/0001/?lang=en