要允许从FPGA软逻辑到HPS存储器项目的高速缓存一致性访问必须到位:
- MMU页表
- NOC安全设置
- CoreLink™2级高速缓存控制器L2C-310配置
- AXI边带信号:Axi_cache_security桥
- AxCache和AxUser
- AXPROT
MMU页表
必须设置MMU页表,以便定义可缓存的目标内存区域,以及安全或非安全。有关MMU页表分配属性和安全模式(信任区域)的更多详细信息,请参阅Linux和ARM文档。
- 内存必须标记为Write back Write Allocate(WBWA)。
- 对于要从Linux用户空间应用程序或内核访问的内存,安全模式应该是不安全的。
- 安全应该用于在ARM安全状态下运行的进程访问内存(不要与管理员模式混淆)。
如果CP15:SDR:NS = 1,则启用安全模式。 注意:NS寄存器仅在管理员模式下可用。
NOC安全设置
Arria®10SoC片上网络连接(NOC)可在每个网桥和整个互连中配置防火墙。允许通过HPS网桥进行访问
- 必须将防火墙配置为允许通过网桥进行事务
- 必须将主控件设置为允许/禁止安全访问
- 如果将master设置为禁止安全访问,则所有事务都将更改为非安全状态,这可能会破坏一致性。
从SoC EDS软件版本16.0及更高版本生成的U-boot禁用NOC防火墙,但将master设置为禁止安全访问。
允许通过FPGA2HPA桥进行安全访问:
将寄存器fpga2soc_ctrl:allow_secure设置为1(默认值= 0,不允许安全)
2级缓存控制器配置
CoreLink™2级高速缓存控制器L2C-310配置
建议将辅助控制寄存器位[22]: 共享属性覆盖使能位设置为ON。此设置禁用L2高速缓存控制器中的优化,该控制将来自MPU核心或ACP端口的一些非高速缓存访问转换为可高速缓存的非分配访问,并将一致性点从SDRAM移动到L2高速缓存。如果主器件通过L3或FPGA2SDRAM桥访问SDRAM,则一致性点的改变可能会导致问题。
参考: CoreLink™2级高速缓存控制器L2C-310,修订版:r3p3技术参考手册 (ARM DDI 0246H(ID080112)):第2.3.2节可共享属性。
以上是在最新的u-boot-socfpga版本中设置的,可从https://github.com/altera-opensource/u-boot-socfpga获得。
从Qsys驱动AXI边带信号:Axi_cache_security桥
应使用Axi_cache_security桥将AxCache / AxUser / AxProt边带信号驱动为正确的值。 Axi_cache_security桥可以在Arria 10 Bridge示例中找到https://www.altera.com/support/support-resources/design-examples.h tml
AxCache [3:0]边带信号
正确的AxCache [3:0]设置取决于MMU页面表设置。
请参阅ARM®体系结构参考手册ARMv7-A和ARMv7-R版本 (ARM DDI 0406C.c(ID051414)):A3.5内存类型和属性以及内存顺序模型AxCache [1]必须为1才能进行相干访问。
参考: Cortex™-A9MPCore®修订版:r3p0技术参考手册 (ARM DDI 0407G(ID072711)):2.4加速器一致性端口
AW(R)CACHE [3:0]
[3] – 写可分配
[2] – 读取可分配
[1] – 可缓存
[0] – 可忍受
AW(R)CACHE [3:0]的建议初始值
awcache = 0xF; // 4’b1111写Allocate,Read Allocate,Bufferable,Cacheable
arcache = 0xF; // 4’b1111写Allocate,Read Allocate,Bufferable,Cacheable
注意:应根据用例更改这些设置
AxUser [4-0]边带信号
AxUser信号用于传递额外信息,而对于ACP事务,它们用于传递内部和外部可缓存信息。
AW(R)用户[3:0]
[0] – 对于相干访问,必须将共享属性设置为1
[3:1] – SCU未解释为ACP没有内部缓存策略,如果缓存是以独占模式设置的,则传递给L2缓存控制器。
文献: Cortex™-A9MPCore®修订版: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(R)PROT [2:0]
[2] – 取指令
[1] – 非安全访问
[0] – 特权访问
AxProt [2:0]的建议初始值
MMU页表内存安全设置,CPU安全设置和ACP事务安全状态必须全部匹配,以确保缓存命中。
对安全状态的CPU访问的安全存储器位置的非安全ACP事务将导致高速缓存未命中和不连贯的访问。
支持方案摘要:
非安全
- MMU页表设置为将目标内存区域定义为非安全
- 设置NOC防火墙以允许对目标区域的非安全访问
- F2H桥对目标区域执行安全或非安全访问
安全
- MMU页表设置为将目标存储区定义为安全
- NOC防火墙设置为允许安全访问目标区域
- F2H网桥执行对目标区域的安全访问。
没有回复内容