要允许高速缓存一致性访问从FPGA 软逻辑到 HPS 内存的物件数量,必须:
- MMU 页面表
- NOC 安全设置
- CoreLink™ 二级高速缓存控制器 L2C-310 配置
- AXI 边带信号:Axi_cache_security桥
- AxCache 和 AxUser
- AXPROT
MMU 页面表
必须设置 MMU 页面表,以便定义目标内存区域可缓存、安全或不安全。 有关 MMU 页表分配属性和安全模式(信任区)的更多详细信息,请参阅 Linux 和 ARM 文档。
- 内存必须标记为"写回写分配"(WBWA)。
- 要从 Linux 用户空间应用程序或内核访问内存,安全模式应该是不安全的。
- 安全性应该用于通过在 ARM 安全状态下运行的过程来访问内存(不会与主管模式相混淆)。
如果 CP15:SDR:NS = 1,则启用安全模式。 注:NS 寄存器将仅在监督模式下可用。
NOC 安全设置
Arria® 的 10 SoC 片上 SoC 网络 iinterconnect (NOC) 可在每个桥上和整个互连过程中通过防火墙进行配置。 要通过 HPS 桥允许访问
- 必须配置防火墙以允许通过桥梁进行交易
- 必须设置主控件以允许/禁用安全访问
- 如果主程序设置为禁用安全访问,则所有交易将更改为非安全状态,从而会破坏一致性。
由 SoC EDS 软件版本 16.0 及更高版本生成的 U-boot 禁用 NOC 防火墙,但设置主设备以禁用安全访问。
要通过 FPGA2HPA 桥实现安全访问:
设置寄存器fpga2soc_ctrl:allow_secure为 1(默认 = 0,不允许安全)
级别 2 高速缓存控制器配置
CoreLink™ 二级高速缓存控制器 L2C-310 配置
建议将 Aux Control 寄存器位 [22]: 共享属性覆盖启用位 设置为 ON。 此设置禁用 L2 高速缓存控制器的优化,后者将一些非高速缓存访问从 MPU 内核或 ACP 端口转换为可缓存的非分配访问,并将一致性点从 SDRAM 移到 L2 高速缓存。 如果大师通过 L3 或 FPGA2SDRAM 网桥访问 SDRAM,一致性点的变化可能会导致问题。
参考 :CoreLink™ 二级高速缓存控制器 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 边带信号:Axi_cache_security桥
Axi_cache_security桥应该用于将 AxCache/AxUser/AxProt 边带信号驱动到正确的值。 Arria 10 桥示例 https://www.altera.com/support/support-resources/design-examples.html中可找到Axi_cache_security桥
AxCache[3:0] 侧带信号
正确的 AxCache [3:0] 设置取决于 MMU Page 表设置。
请参阅 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 ® 高速缓存[3:0]
[3] - 写入可分配
[2] - 读取可分配
[1] - 可缓存
[0] - 可缓冲
AW®高速缓存的初始值建议[3:0]
awcache = 0xF;4'b1111 写入分配,读取分配,可缓冲,可缓存
arcache = 0xF;4'b1111 写入分配,读取分配,可缓冲,可缓存
注意:应根据使用案例更改这些设置
AxUser[4-0] 侧带信号
AxUser 信号用于传递额外信息,对于 ACP 交易,用于传递内部和外部可缓存信息。
AW®用户[3:0]
[0] - 必须将共享属性设置为 1 以进行一致访问
[3:1] - 未经 SCU 解释为 ACP 没有内部高速缓存策略,如果高速缓存以专有模式设置,将传递给 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 Page 表设置为将目标内存区域定义为非安全性
- 设置了 NOC 防火墙,以允许非安全地访问目标区域
- F2H 桥对目标区域执行安全或非安全的访问
安全
- MMU 页面表设置为将目标内存区域定义为安全
- NOC 防火墙设置为允许安全地访问目标区域
- F2H 桥对目标区域执行安全访问。