一、背景

        在分析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协议,支持的特性如下:

  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.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传输层接收数据包的功能,具体的功能如下:

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

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

2.1.3 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.1.4 CDM

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

  1. 标准的PCIe配置空间
  2. 控制器特有的寄存器空间(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

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

Logo

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

更多推荐