linux之PCIE 的控制器硬件结构与dbi
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。
一、背景
在分析pcie 的ep 端驱动时, 发现操作配置空间的寄存器,需要以dbi 或者dbi2 基地址进行操作。那么下面就介绍一下dbi (data bus interface) 硬件的作用和pcie空间的硬件组成部分。
二、以RK3588的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.1 pcie 控制器
RK3588 PCIe控制器的示意图如下图所示。由RAW core和一些应用逻辑组成(Client和CLK/RST)。RAW core实现了PCIe协议和一些特定功能,包含多种AXI接口,RADM/XADM/CDM/eDMA/PMC/CXPL。

PCIE控制器中出现了DBI(DATA BUS INTERFACE)。
下面介绍其中的模块。
2.1.1 DBI
DBI 是什么?
DBI(data bus interface):是synopsys定义的访问PCIe寄存器的接口,PCIe协议规定了两种配置空间:PCI Configuration Space和 PCIe Extend configuration Space。而往往IP的生成商,会加入一个属于自己的配置空间,synopsys添加的配置空间为:Port logic Synosys Register。
- 位置:挂在 RC/EP 本地总线(AXI/APB 等)与 PCIe Core 之间。
- 访问方式:CPU 把 DBI 窗口映射为自己的 MMIO 区域,直接 load/store;控制器内部再把 DBI 请求翻译成对相应寄存器的读写。
典型场景:
- – 芯片上电后,BootROM 通过 DBI 给 RC/EP 设置根端口配置、Bar 地址、Link Control 等;
- – 驱动或固件在调试/热插拔时,用 DBI 快速查看或修改 EP 的 PCIe Capability;
- – 无需经过真正的 CFG TLP,速度快、延迟低。
一句话总结:DBI 就是 PCIe 控制器留给本地 CPU 的“后门”,用来直接配置/调试 PCIe 寄存器。让 本地 CPU/固件 直接读写 PCIe 标准配置空间和扩展寄存器,而不必真正发出 PCIe 事务。
- DSP(Down Stream Port)和USP(Upper Stream Port);
- CDM(Configuration-Dependent Module):含标准的 PCIe 配置空间及 PCIe Controller 指定的寄存器空间(端口逻辑寄存器);
- LBC(Local Bus Controller):EP 的 LBC module 给对端 USP 或本地 CPU 提供一种通过 DBI 访问 CDM 内部寄存器及 ELBI 外部应用寄存器的机制;

上面就是DBI操作CDM寄存器。
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.1.2 RADM
Receive Application-Dependent Module (RADM)实现了PCIe传输层接收数据包的功能,具体的功能如下:
- 整理和过滤接收的TLP。过滤规则和路由可配置
- 缓冲和排队接收的TLP
- 将接收的TLP路由到控制器接收的接口
RADM模块维护了Receive Completion Lookup Table (LUT) 表,用于跟踪完成报文和监测发送non-posted请求的完成报文是否超时。当在规定的时间内没有接收到预期的完成报文,则会上报超时事件。
2.1.3 XADM
Transmit Application-Dependent Module (XADM)实现了PCIe传输层发送数据包的功能,具体的功能如下:
- TLP仲裁
- 构造TLP
- 流量检查
XADM发送路径采用cut-through架构,除了retry buffer之外,没有实现发送缓冲区和队列(buffering/queues)。控制器内部维护了一个目标完成查询表(Target Completion Lookup Table),其存储了接收到的请求的TLP头部信息。
2.1.4 CDM
Configuration-Dependent Module (CDM) 实现了下面的功能:
- 标准的PCIe配置空间
- 控制器特有的寄存器空间(Port Logic Registers)
2.1.5 eDMA
eDMA拥有一个读通道和一个写通道,可同时进行存储器事务读写。支持scatter-gather。若传输完成或者发生了错误,可选择中断通知本地CPU或者通过MWr中断(MSI或MSI-X)通知远端CPU。DMA write将本地内存数据拷贝到远端内存。DMA read:将远端内存数据拷贝到本地内存。

2.1.6 PMC
PMC模块实现了PCI Express Active State Power Management (ASPM)功能。
2.1.7 CXPL
CXPL是PCIe的核心模块,实现了PCIe的协议,由事物层、数据链路层和物理层组成,外部通过PIPE接口与PHY连接,具体如下图所示。
CXPL才是PCIE 协议实现的硬件结构,上面其他寄存器都是实现PCIE的控制寄存器。

三、展示一下内核驱动代码中操作dbi 基地址的源码
给你们展示一下开源的驱动, 本公司的驱动源码不方便展示,但是原理都一样的。
源码路径:drivers/pci/controller/dwc/pci-layerscape-ep.c (PCIE ep 控制器驱动)

上面就是获取到了 dbi_base2 的基地址。
新思的dwc 驱动中封装了很多根据dbi_base/dbi_base2读写配置空间的函数。下面展示一下:
源码路径:drivers/pci/controller/dwc/pcie-designware.c

上面的函数接口调用举例,读取配置头类型:

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)