1. Arm架构中PCIe事务的内存属性基础
在Arm架构中,内存类型和属性是决定事务处理行为的关键因素。每个PCI Express事务都会应用特定的内存属性,这些属性决定了事务的一致性特性。Arm架构定义了多种内存类型和属性,包括Normal、Device和Strongly-ordered等类型,以及Cacheable、Shareable等属性。
1.1 内存类型与属性分类
Arm架构中的内存类型主要分为三类:
- Normal内存:用于普通数据存储,支持缓存和预取
- Device内存:用于外设寄存器访问,具有严格的访问顺序要求
- Strongly-ordered内存:具有最强的顺序性保证
对于PCIe DMA事务,最常用的是Normal内存类型,配合以下关键属性:
- Cacheable:决定事务数据是否可缓存
- Shareable:定义事务的共享域范围
- Allocation hints:提供缓存分配建议
1.2 初始内存属性设置
PCIe事务的初始内存属性通常设置为:
- 内存类型:Normal
- 缓存属性:Inner和Outer Write-back Cacheable
- 共享属性:Outer Shareable
这种默认配置确保了事务在大多数情况下的高效处理,同时保持了系统的一致性。在Arm Base System Architecture (BSA)规范中,这些初始属性为后续可能的属性转换提供了基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. PCIe事务属性转换流程
2.1 属性转换的基本流程
PCIe DMA事务的内存类型和属性赋值遵循一个概念性的多步骤流程。虽然实现可以选择不同的应用顺序,但最终观察到的结果必须与顺序描述的等效。图8展示了这个流程的基本结构:
- 初始属性赋值
- No_snoop转换(如果适用)
- System MMU转换(如果存在)
- 目标特定转换
- 最终属性确定
重要提示:在最终内存类型和属性确定之前,事务必须遵循PCI Express事务规则,不能基于中间内存类型或属性进行合并、组合或其他形式的修改。
2.2 ATS内存属性的处理
PCI Express Translated事务可能包含ATS内存属性(AMA
