AXI 地址的地址转换是基于 BDF 表编程(0x2420 到 0x2434)来完成的。这些 BDF 表格条目均可通过 AXI CSR 从接口 s_axil_csr_*
进行编程。其中提供了 8 个窗口,类似于 PCIe 总线上的 8 个 BAR。BDF 表格编程中的每个条目均表示 1 个窗口。如果用户需 2 个窗口,则需对 2 个条目进行编程,以此类推。
BDF 表格编程存在一些限制。
- 在对 BDF 进行编程前,所有 PCIe Slave Bridge 数据传输都必须保持禁止。
- 每个 BDF 表格条目都有 6 个寄存器。全部 6 个寄存器都必须完成编程才能构成 1 个有效的条目。即使部分寄存器包含 0 值,您仍需对该寄存器中的 0 值进行编程。
- 全部 6 个寄存器都需按顺序进行编程才能使对应条目有效。顺序如下所示。
- 0x2420
- 0x2424
- 0x2428
- 0x242C
- 0x2430
- 0x2434
BDF 表格条目起始地址 = 0x2420 + (0x20 * i),其中 i = 表格条目编号。
保护
通过 TrustZone 使用 AXI4 prot
字段有助于为 BAR 内的不同窗口指定保护级别。从 PMC 执行的任何访问操作都包含 a*prot[1]=0
,因此将享有完全访问权。
对于 BDF 空间,保护域 ID 本身存储在 BDF 表中。如果传入请求包含 a*rpot[1]=0
,那么将为其授予完整访问权。含 a*prot[1]=1
的请求仅有权访问保护级别较低的 BDF 条目。
下表对此行为进行了描述:
访问类型 | BDF 表值 (prot[2:0]) | a*prot[2:0] 中的值(AXI 接口) | 操作 |
---|---|---|---|
安全访问 | 3'hXXX | 3'hX0X (bit 1=0) | 允许 |
对安全条目执行非安全访问 | 3'hX0X | 3'hX1X (bit 1=1) | 不允许 |
对安全级别较低的条目执行非安全访问 | 3'hX1X | 3'hX1X (bit 1=1) | 如果在 a*prot 与 BDF 条目之间 bit [2] 与 bit [0] 相匹配,则允许 |