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[3:0]用于标识,NSAIDW[3:0]标识写。 怎么标识? 芯片设计时,分配的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

posted @ 2022-08-13 11:47  zephyr~  阅读(1914)  评论(0编辑  收藏  举报