1.PCIe子系统
RK3588 PCIe子系统如下图所示。总共拥有5个PCIe控制器。PCIe30X4(4L)支持RC和EP模式,其他4个仅支持RC模式。ITS port 1连接PCIe30X4(4L)和PCIe30X2(2L)控制器,PCIe30X4(4L)和PCIe30X2(2L)控制器使用PCIe3.0 PIPE PHY。ITS port 0连接PCIe30X1_0(1L0)、PCIe30X1_1(1L1)和PCIe30X1_2(1L2)控制器,PCIe30X1_0(1L0)和PCIe30X1_1(1L1)控制器可复用PCIe3.0 PIPE PHY和Combo PIPE PHY,PCIe30X1_2(1L2)只能使用Combo PIPE PHY。
RK3588 PCIe控制器兼容PCIe1.1、2.1、3.0协议,支持的特性如下:
- 兼容PCIe 3.0规范
- 共有5个PCIe控制器
- PCIe Gen3x4控制器,支持RC和EP模式
- MPS为256字节
- 16 ATU inbound regions, 16 ATU outbound regions
- 最大为Gen3x4 link
- 具有硬件流控功能的2通道DMA,包含2通道读和写
- 当使用Gen3 PHY时,使用独立扩频时钟(SRIS)的分离参考时钟
- PCIe Gen3x2控制器,支持RC模式
- MPS为256字节
- 16 ATU inbound regions, 16 ATU outbound regions
- 最大为Gen3x2 link
- 当使用Gen3 PHY时,使用独立扩频时钟(SRIS)的分离参考时钟
- 3xPCIe Gen3x1控制器,支持RC模式
- MPS为256字节
- 8 ATU inbound regions, 8 ATU outbound regions
- 当连接到Gen3 PHY时,最大为Gen3x1 link,当连接到Combo PIPE PHY时,最大为Gen2x1 link
- 当使用Gen3 PHY时,使用独立扩频时钟(SRIS)的分离参考时钟
- PCIe Gen3x4控制器,支持RC和EP模式
- 下面的特性是可选的:
- Alternative Routing-ID Interpretation (ARI)
- 应用可选的Address Translation Services (ATS)
- TLP Prefix
- Dynamic Power Allocation (DPA)
- 低功耗L1 Substates (L1SS)
- Resizable BAR(RBAR)支持扩展的RBAR和VF Resizable BAR
- 独立扩频时钟(SRIS)的分离参考时钟
- PCI Express Active State Power Management (ASPM)
- PCI Express 高级错误报告(AER)支持多个头部日志记录
- 支持Latency Tolerance Reporting (LTR)
- 支持Optimized Buffer Flush and Fill (OBFF)
- 内部数据通路(PIPE)时钟频率可为62.5 MHz, 125 MHz, 250MHz
- 高级电源和时钟管理
- 拥有地址转换单元
- 具有MSI-X功能
- Automatic Lane Reversal
- Up-configure Support
- RAS DES (Debug, Error Injection, and Statistics)
- 支持生成和校验ECRC
- 支持通过Configuration Intercept Controller修改配置写请求
- Store-and-forward Queue Modes for Rx TLPs
- 对于Posted, Non-posted, and Completion传输支持配置过滤规则
- Configurable BAR Filtering, I/O Filtering, Configuration Filtering and Completion Lookup/Timeout
- Three Application Transmit Clients
- MSI中断支持Per-Vector Masking (PVM), Extended message data
- MSI-X支持Per-Vector Masking (PVM)
2.PCIe控制器
RK3588 PCIe控制器的示意图如下图所示。由RAW core和一些应用逻辑组成(Client和CLK/RST)。RAW core实现了PCIe协议和一些特定功能,包含多种AXI接口,RADM/XADM/CDM/eDMA/PMC/CXPL。
下面对其中一些模块的功能进行介绍。
2.1.DBI Slave
DBI Slave可以通过DBI接口访问控制器内部CDM寄存器,如配置空间寄存器,DMA寄存器、ATU寄存器、特殊的Shadow寄存器(IP厂家定制寄存器)。DBI内部划分了2个部分,可通过CS2进行选择,具体如下图所示。当然这部分寄存器,本地CPU和远程CPU都可访问。
如PCIe30X4(4L)拥有2块DBI空间,如下图所示。
PCIe30X4(4L)作为RC时,DBI可以访问的寄存器如下图所示:
PCIe30X4(4L)作为EP时,DBI可以访问的寄存器如下图所示:
2.2.Client
Client包含了和PCIe控制器交互的逻辑,如发送和接收PCIe消息,请求进入和退出PM状态,处理中断、配置操作模式、读取基本的调试信息等等。寄存器地址范围如上图所示。部分寄存器如下图所示:
2.3.RADM
Receive Application-Dependent Module (RADM)实现了PCIe传输层接收数据包的功能,具体的功能如下:
- 整理和过滤接收的TLP。过滤规则和路由可配置
- 缓冲和排队接收的TLP
- 将接收的TLP路由到控制器接收的接口
RADM模块维护了Receive Completion Lookup Table (LUT) 表,用于跟踪完成报文和监测发送non-posted请求的完成报文是否超时。当在规定的时间内没有接收到预期的完成报文,则会上报超时事件。
2.4.XADM
Transmit Application-Dependent Module (XADM)实现了PCIe传输层发送数据包的功能,具体的功能如下:
- TLP仲裁
- 构造TLP
- 流量检查
XADM发送路径采用cut-through架构,除了retry buffer之外,没有实现发送缓冲区和队列(buffering/queues)。控制器内部维护了一个目标完成查询表(Target
Completion Lookup Table),其存储了接收到的请求的TLP头部信息。
2.5.CDM
Configuration-Dependent Module (CDM) 实现了下面的功能:
- 标准的PCIe配置空间
- 控制器特有的寄存器空间(Port Logic Registers)
2.6.eDMA
eDMA拥有一个读通道和一个写通道,可同时进行存储器事务读写。支持scatter-gather。若传输完成或者发生了错误,可选择中断通知本地CPU或者通过MWr中断(MSI或MSI-X)通知远端CPU。DMA write将本地内存数据拷贝到远端内存。DMA read:将远端内存数据拷贝到本地内存。
2.7.PMC
PMC模块实现了PCI Express Active State Power Management (ASPM)功能。
2.8.CXPL
CXPL是PCIe的核心模块,实现了PCIe的协议,由事物层、数据链路层和物理层组成,外部通过PIPE接口与PHY连接,具体如下图所示。
参考资料
- PCIEXPRESS体系结构导读
- PCI Express technology 3.0
- PCI Express® Base Specification Revision 5.0 Version 1.0
- https://www.cnblogs.com/DF11G/p/17341493.html
- Rockchip RK3588 TRM