PCIE Spec ---Software Initialization and Configuration(二)
7.2 PCI Express Configuration Mechanisms
PCIE 将配置空间从 PCI 的 256 字节扩展为 4096 字节。从而将配置空间划分为 256 字节 PCI 兼容区域和剩余的 PCIE 扩展区域。 PCI 兼容区域通过 CAM 机制访问,扩展区域通过 ECAM 机制访问。
7.2.1 PCI-compatible Configuration Mechanism
因为需要和 PCI 兼容,所以需要支持 PCI 的访问模式,PCIE 的接口同时兼容 PCI bus 枚举和软件配置。
PCIE 和 PCI 一样需要一个配置空间用于软件初始化和配置,所以需要继续保留 PCI 的 heard 格式和行为。
PCI-compatible Configuration Access Mechanism 和 ECAM 的格式是一样的,对于PCI-compatible Configuration 请求只是扩展寄存器的数据都是 0.
7.2.2 PCI Express Enhanced Configuration Access Mechanism (ECAM)
只在PCI-compatible 或者没有实现自己处理器架构的特殊固件接口的系统需要这个 EACM 机制,用于访问配置空间。
对于有自己特有处理器架构固件接口的系统不需要 ECAM 机制。对于所有系统我们都建议使用由操作系统提供的应用处理接口(API)来访问配置空间,而不是直接使用硬件机制。
ECAM 机制使用 flat 模式,通过操作内存映射地址两个寄存器来访问操作设备配置空间,内存映射地址决定访问处理的内容。
内存映射访问配置空间的大小和基地址由 host bridge 和固件设计决定,若是支持 N bit 的 BUS,则说明该平台的 Bus 最多可以由 2 n -1 个,而内存映射地址对齐则是需要是 2(n+20)字节的内存地址边界。
7.2.2.1 Host Bridge Requirements
在支持 ECAM(Enhanced Configuration Access Mechanism)机制的系统中,PCIe Host Bridge 负责将主处理器发出的内存映射的 PCIe 配置空间访问请求转换为 PCIe 配置事务。
地址解码:
PCIe Host Bridge 会解码主处理器发出的内存地址,确定该地址是否属于 PCIe 配置空间的映射范围。
如果地址属于 PCIe 配置空间的映射范围,PCIe Host Bridge 会继续进行转换。
生成 PCIe 配置事务:
PCIe Host Bridge 根据解码出的内存地址,生成相应的 PCIe 配置事务。
配置事务的类型可以是 Type 0 或 Type 1,具体取决于目标设备的位置(直接连接的设备或下游设备)。
发送 PCIe 配置事务:
生成的 PCIe 配置事务通过 PCIe 总线发送到目标设备。
目标设备接收到配置事务后,会执行相应的操作(如读取或写入配置寄存器)。
返回结果:
如果配置事务是读取操作,目标设备会将读取的数据返回给 PCIe Host Bridge。
PCIe Host Bridge 将读取的数据返回给主处理器,完成内存访问请求。
Host Bridge 的 PCI class code 保留的使用是为了向后兼容;Host Bridge 配置空间对于标准的 PCIE 软件是不透明的,并且可以以兼容 PCI Host Bridge Type 0 配置空间的特殊实现方式实现。
PCIE Host Bridge 不需要通过 RC Event 收集器来触发 error.这个功能支持是可选的,看厂商具体实现。
7.2.2.2 PCI Express Device Requirements
设备需要支持扩展的 4bit 用于解码配置空间寄存器的访问(PCI 支持的是 8bit 也就是 256 字节,扩展至 12bit 也就是 4096 字节 4K)。
7.2.3 Root Complex Register Block (RCRB)
每个 Root Port 或者 RCiEP 应该和一个 4096byte 大小的块内存映射的寄存器关联称为 Root Complex Register Block(RCRB).这些寄存器类似于配置空间并且可以包含 PCIE 扩展能力以及其他应用于 RC 的特殊实现。
多个 Root Port 或者内部设备可以关联到同一个 RCRB,但是 RCRB 内存映射的寄存器不能在同一个内存映射空间或者内存空间。
RC 实现是不需要支持跨越双字节对齐边界的访问或者使用锁定机制的访问;如果访问的地址未对齐,或者访问的数据跨越了双字节边界(例如从奇数地址开始的 2 字节访问),RC 不需要支持这种访问。相反,RC 可以生成错误(如 Unsupported Request,UR)或将其拆分为多个对齐的访问。