PCIe总线-RK3588 PCIe子系统简介(八)

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。

PCIe子系统示意图

RK3588 PCIe控制器兼容PCIe1.1、2.1、3.0协议,支持的特性如下:

  1. 兼容PCIe 3.0规范
  2. 共有5个PCIe控制器
    1. PCIe Gen3x4控制器,支持RC和EP模式
      • MPS为256字节
      • 16 ATU inbound regions, 16 ATU outbound regions
      • 最大为Gen3x4 link
      • 具有硬件流控功能的2通道DMA,包含2通道读和写
      • 当使用Gen3 PHY时,使用独立扩频时钟(SRIS)的分离参考时钟
    2. PCIe Gen3x2控制器,支持RC模式
      • MPS为256字节
      • 16 ATU inbound regions, 16 ATU outbound regions
      • 最大为Gen3x2 link
      • 当使用Gen3 PHY时,使用独立扩频时钟(SRIS)的分离参考时钟
    3. 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)的分离参考时钟
  3. 下面的特性是可选的:
    1. Alternative Routing-ID Interpretation (ARI)
    2. 应用可选的Address Translation Services (ATS)
    3. TLP Prefix
    4. Dynamic Power Allocation (DPA)
    5. 低功耗L1 Substates (L1SS)
    6. Resizable BAR(RBAR)支持扩展的RBAR和VF Resizable BAR
    7. 独立扩频时钟(SRIS)的分离参考时钟
    8. PCI Express Active State Power Management (ASPM)
    9. PCI Express 高级错误报告(AER)支持多个头部日志记录
  4. 支持Latency Tolerance Reporting (LTR)
  5. 支持Optimized Buffer Flush and Fill (OBFF)
  6. 内部数据通路(PIPE)时钟频率可为62.5 MHz, 125 MHz, 250MHz
  7. 高级电源和时钟管理
  8. 拥有地址转换单元
  9. 具有MSI-X功能
  10. Automatic Lane Reversal
  11. Up-configure Support
  12. RAS DES (Debug, Error Injection, and Statistics)
  13. 支持生成和校验ECRC
  14. 支持通过Configuration Intercept Controller修改配置写请求
  15. Store-and-forward Queue Modes for Rx TLPs
  16. 对于Posted, Non-posted, and Completion传输支持配置过滤规则
  17. Configurable BAR Filtering, I/O Filtering, Configuration Filtering and Completion Lookup/Timeout
  18. Three Application Transmit Clients
  19. MSI中断支持Per-Vector Masking (PVM), Extended message data
  20. 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。

PCIe控制器示意图

下面对其中一些模块的功能进行介绍。

2.1.DBI Slave

DBI Slave可以通过DBI接口访问控制器内部CDM寄存器,如配置空间寄存器,DMA寄存器、ATU寄存器、特殊的Shadow寄存器(IP厂家定制寄存器)。DBI内部划分了2个部分,可通过CS2进行选择,具体如下图所示。当然这部分寄存器,本地CPU和远程CPU都可访问。

CDM空间

如PCIe30X4(4L)拥有2块DBI空间,如下图所示。

RC寄存器

PCIe30X4(4L)作为RC时,DBI可以访问的寄存器如下图所示:

PCIe30X4(4L)DBI空间

PCIe30X4(4L)作为EP时,DBI可以访问的寄存器如下图所示:

EP寄存器

2.2.Client

Client包含了和PCIe控制器交互的逻辑,如发送和接收PCIe消息,请求进入和退出PM状态,处理中断、配置操作模式、读取基本的调试信息等等。寄存器地址范围如上图所示。部分寄存器如下图所示:

client寄存器

2.3.RADM

Receive Application-Dependent Module (RADM)实现了PCIe传输层接收数据包的功能,具体的功能如下:

  1. 整理和过滤接收的TLP。过滤规则和路由可配置
  2. 缓冲和排队接收的TLP
  3. 将接收的TLP路由到控制器接收的接口

RADM模块维护了Receive Completion Lookup Table (LUT) 表,用于跟踪完成报文和监测发送non-posted请求的完成报文是否超时。当在规定的时间内没有接收到预期的完成报文,则会上报超时事件。

2.4.XADM

Transmit Application-Dependent Module (XADM)实现了PCIe传输层发送数据包的功能,具体的功能如下:

  1. TLP仲裁
  2. 构造TLP
  3. 流量检查

XADM发送路径采用cut-through架构,除了retry buffer之外,没有实现发送缓冲区和队列(buffering/queues)。控制器内部维护了一个目标完成查询表(Target
Completion Lookup Table),其存储了接收到的请求的TLP头部信息。

2.5.CDM

Configuration-Dependent Module (CDM) 实现了下面的功能:

  1. 标准的PCIe配置空间
  2. 控制器特有的寄存器空间(Port Logic Registers)

2.6.eDMA

eDMA拥有一个读通道和一个写通道,可同时进行存储器事务读写。支持scatter-gather。若传输完成或者发生了错误,可选择中断通知本地CPU或者通过MWr中断(MSI或MSI-X)通知远端CPU。DMA write将本地内存数据拷贝到远端内存。DMA read:将远端内存数据拷贝到本地内存。

DMA

2.7.PMC

PMC模块实现了PCI Express Active State Power Management (ASPM)功能。

2.8.CXPL

CXPL是PCIe的核心模块,实现了PCIe的协议,由事物层、数据链路层和物理层组成,外部通过PIPE接口与PHY连接,具体如下图所示。

CXPL

参考资料

  1. PCIEXPRESS体系结构导读
  2. PCI Express technology 3.0
  3. PCI Express® Base Specification Revision 5.0 Version 1.0
  4. https://www.cnblogs.com/DF11G/p/17341493.html
  5. Rockchip RK3588 TRM

相关推荐

  1. PCIe总线-RK3588 PCIe驱动设备树介绍(九)

    2024-06-16 07:22:06       18 阅读
  2. <span style='color:red;'>pcie</span>_TLP

    pcie_TLP

    2024-06-16 07:22:06      21 阅读
  3. PCIe中断总结-各个中断的区别

    2024-06-16 07:22:06       82 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 07:22:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 07:22:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 07:22:06       82 阅读
  4. Python语言-面向对象

    2024-06-16 07:22:06       91 阅读

热门阅读

  1. 012_redhat安装activemq

    2024-06-16 07:22:06       31 阅读
  2. Python

    Python

    2024-06-16 07:22:06      31 阅读
  3. 双指针【1】两数之和基础版 归并排序

    2024-06-16 07:22:06       29 阅读
  4. mybatis框架原理,组件,案例,优化,优缺点总结

    2024-06-16 07:22:06       31 阅读
  5. TPS、QPS、CPS、PV和UV

    2024-06-16 07:22:06       48 阅读
  6. 如何用蒙版制作玻璃划动效果

    2024-06-16 07:22:06       31 阅读
  7. Python知识点总结

    2024-06-16 07:22:06       36 阅读
  8. Redis

    Redis

    2024-06-16 07:22:06      34 阅读
  9. 数据结构之B树

    2024-06-16 07:22:06       31 阅读
  10. 华为Atlas 300I 推理卡显卡安装

    2024-06-16 07:22:06       28 阅读
  11. 数据分析的流程是啥样?

    2024-06-16 07:22:06       31 阅读
  12. RAG下的prompt编写探索

    2024-06-16 07:22:06       30 阅读
  13. merkle tree中文

    2024-06-16 07:22:06       34 阅读